aboutsummaryrefslogtreecommitdiff
path: root/gcc/ggc-common.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@gcc.gnu.org>1999-10-13 10:09:18 -0700
committerRichard Henderson <rth@gcc.gnu.org>1999-10-13 10:09:18 -0700
commit005537dfed601a7ec39b4d40f9d0e3bc954f167f (patch)
tree618d754ad605b42a6cdca53980a97a361d152aa9 /gcc/ggc-common.c
parent1f1479dc91216e63870c59ad48fdbb0b1c060d82 (diff)
downloadgcc-005537dfed601a7ec39b4d40f9d0e3bc954f167f.zip
gcc-005537dfed601a7ec39b4d40f9d0e3bc954f167f.tar.gz
gcc-005537dfed601a7ec39b4d40f9d0e3bc954f167f.tar.bz2
Simplified GC interface and other goodies.
From-SVN: r29946
Diffstat (limited to 'gcc/ggc-common.c')
-rw-r--r--gcc/ggc-common.c30
1 files changed, 25 insertions, 5 deletions
diff --git a/gcc/ggc-common.c b/gcc/ggc-common.c
index 6df622e..3aa0d99 100644
--- a/gcc/ggc-common.c
+++ b/gcc/ggc-common.c
@@ -268,21 +268,18 @@ ggc_mark_rtx_children (r)
ggc_mark_rtvec (XVEC (r, i));
break;
case 'S': case 's':
- ggc_mark_string_if_gcable (XSTR (r, i));
+ ggc_mark_if_gcable (XSTR (r, i));
break;
}
}
}
void
-ggc_mark_rtvec (v)
+ggc_mark_rtvec_children (v)
rtvec v;
{
int i;
- if (v == NULL || ggc_set_mark_rtvec (v))
- return;
-
i = GET_NUM_ELEM (v);
while (--i >= 0)
ggc_mark_rtx (RTVEC_ELT (v, i));
@@ -451,3 +448,26 @@ ggc_mark_tree_hash_table (ht)
hash_traverse (ht, ggc_mark_tree_hash_table_entry, /*info=*/0);
}
+/* Allocation wrappers. */
+
+char *
+ggc_alloc_string (contents, length)
+ const char *contents;
+ int length;
+{
+ char *string;
+
+ if (length < 0)
+ {
+ if (contents == NULL)
+ return NULL;
+ length = strlen (contents);
+ }
+
+ string = (char *) ggc_alloc_obj (length + 1, 0);
+ if (contents != NULL)
+ memcpy (string, contents, length);
+ string[length] = 0;
+
+ return string;
+}