if we find a \ inside a macro parameter... handle it as an escape and
authorCarsten Haitzler <raster@rasterman.com>
Sat, 9 Apr 2011 02:49:19 +0000 (02:49 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Sat, 9 Apr 2011 02:49:19 +0000 (02:49 +0000)
skip it giving the next char verbatim.

SVN revision: 58510

legacy/edje/src/bin/epp/cpplib.c

index ae458bcc72c66018f9f40a8cc0dac5a5cb9b301e..8c92b3b2c42d7e391db8d8b4f1bd514ed0d5698c 100644 (file)
@@ -2031,10 +2031,26 @@ cpp_expand_to_buffer(cpp_reader * pfile, unsigned char *buf, int length)
       unsigned char      *p1 = buf;
       unsigned char      *p2 = buf1;
 
+#if 0      
+      while (p1 != limit) *p2++ = *p1++;
+#else
       while (p1 != limit)
-        *p2++ = *p1++;
+        {
+           if (*p1 == '\\')
+             {
+                p1++;
+                if (p1 != limit)
+                   *p2++ = *p1++;
+             }
+           else
+             {
+                *p2++ = *p1++;
+             }
+        }
+#endif
+      *p2 = 0;
+      length = p2 - buf1;
    }
-   buf1[length] = 0;
 
    ip = cpp_push_buffer(pfile, buf1, length);
    ip->has_escapes = 1;
@@ -2937,9 +2953,11 @@ macroexpand(cpp_reader * pfile, HASHNODE * hp)
                  xbuf_len += args[ap->argno].stringified_length;
               }
             else if (ap->raw_before || ap->raw_after || CPP_TRADITIONAL(pfile))
-               /* Add 4 for two newline-space markers to prevent
-                * token concatenation.  */
-               xbuf_len += args[ap->argno].raw_length + 4;
+               {
+                  /* Add 4 for two newline-space markers to prevent
+                   * token concatenation.  */
+                  xbuf_len += args[ap->argno].raw_length + 4;
+               }
             else
               {
                  /* We have an ordinary (expanded) occurrence of the arg.