summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog.MELT8
-rw-r--r--gcc/melt-runtime.c15
-rw-r--r--gcc/melt-runtime.h7
3 files changed, 27 insertions, 3 deletions
diff --git a/gcc/ChangeLog.MELT b/gcc/ChangeLog.MELT
index c714779061e..624272f9342 100644
--- a/gcc/ChangeLog.MELT
+++ b/gcc/ChangeLog.MELT
@@ -1,6 +1,14 @@
2011-01-12 Basile Starynkevitch <basile@starynkevitch.net>
+ * melt-runtime.h (meltgc_add_out_cstr_len): New function declaration.
+ (meltgc_add_strbuf_cstr_len): New macro.
+
+ * melt-runtime.c (meltgc_add_out_cstr_len): New function.
+ (meltgc_add_out_cstr): Call the above one.
+
+2011-01-12 Basile Starynkevitch <basile@starynkevitch.net>
+
* melt/warmelt-outobj.melt (runtypesupport_forwcopy): Remove and
revamp as...
(generate_runtypesupport_forwcopy_fun): New, which generates the
diff --git a/gcc/melt-runtime.c b/gcc/melt-runtime.c
index 2f07bf9a0c0..1c74c2daf3b 100644
--- a/gcc/melt-runtime.c
+++ b/gcc/melt-runtime.c
@@ -3179,15 +3179,18 @@ meltgc_add_out (melt_ptr_t out_p, const char *str)
}
}
+
void
-meltgc_add_out_cstr (melt_ptr_t outbuf_p, const char *str)
+meltgc_add_out_cstr_len (melt_ptr_t outbuf_p, const char *str, int slen)
{
- int slen = str ? strlen (str) : 0;
const char *ps = NULL;
char *pd = NULL;
char *cstr = NULL;
- if (!str || !str[0])
+ if (!str)
return;
+ if (slen<0)
+ slen = strlen(str);
+ /* at most four characters e.g. \xAB per original character */
cstr = (char *) xcalloc (slen + 5, 4);
pd = cstr;
for (ps = str; *ps; ps++)
@@ -3228,6 +3231,12 @@ meltgc_add_out_cstr (melt_ptr_t outbuf_p, const char *str)
void
+meltgc_add_out_cstr (melt_ptr_t outbuf_p, const char *str)
+{
+ meltgc_add_out_cstr_len (outbuf_p, str, -1);
+}
+
+void
meltgc_add_out_ccomment (melt_ptr_t outbuf_p, const char *str)
{
int slen = str ? strlen (str) : 0;
diff --git a/gcc/melt-runtime.h b/gcc/melt-runtime.h
index 068ece6395f..ec4fc96ef66 100644
--- a/gcc/melt-runtime.h
+++ b/gcc/melt-runtime.h
@@ -2753,6 +2753,13 @@ void meltgc_add_out_cstr (melt_ptr_t outbuf_p,
const char *str);
#define meltgc_add_strbuf_cstr(Out,Str) meltgc_add_out_cstr(Out,Str)
+/* add safely into OUTBUF the string STR of length SLEN encoded as a C
+ string with backslash escapes */
+void meltgc_add_out_cstr_len (melt_ptr_t outbuf_p,
+ const char *str, int slen);
+#define meltgc_add_strbuf_cstr_len(Out,Str,Slen) \
+ meltgc_add_out_cstr_len(Out,Str,Slen)
+
/* add safely into OUTBUF the string STR encoded as the interior of a
C comment with slash star and star slash replaced by slash plus and
plus slash */