diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog.MELT | 8 | ||||
-rw-r--r-- | gcc/melt-runtime.c | 15 | ||||
-rw-r--r-- | gcc/melt-runtime.h | 7 |
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 */ |