]> git.saurik.com Git - bison.git/commitdiff
(literalchar): Fix the code for escaping \, " and '.
authorRichard M. Stallman <rms@gnu.org>
Sat, 24 May 1997 08:04:42 +0000 (08:04 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sat, 24 May 1997 08:04:42 +0000 (08:04 +0000)
(lex): Avoid trouble when there are many chars
to discard in a char literal with just several chars in it.

src/lex.c

index 719229419361e26af1fd08257ae6eea3196b1a51..ad06ea6a3fa97dc0e35ecd301f8adcfce6bd6c71 100644 (file)
--- a/src/lex.c
+++ b/src/lex.c
@@ -268,11 +268,11 @@ literalchar(pp, pcode, term)
      so that `\012' and `\n' can be interchangeable.  */
 
   p = *pp;
-  if (code >= 040 && code < 0177)
-    *p++ = code;
-  else if (code == '\\')  {*p++ = '\\'; *p++ = '\\';}
+  if (code == '\\')  {*p++ = '\\'; *p++ = '\\';}
   else if (code == '\'')  {*p++ = '\\'; *p++ = '\'';}
   else if (code == '\"')  {*p++ = '\\'; *p++ = '\"';}
+  else if (code >= 040 && code < 0177)
+    *p++ = code;
   else if (code == '\t')  {*p++ = '\\'; *p++ = 't';}
   else if (code == '\n')  {*p++ = '\\'; *p++ = 'n';}
   else if (code == '\r')  {*p++ = '\\'; *p++ = 'r';}
@@ -381,6 +381,7 @@ lex()
       {
        int code, discode;
        char discard[10], *dp;
+
        p = token_buffer;
        *p++ = '\'';
        literalchar(&p, &code, '\'');
@@ -389,8 +390,12 @@ lex()
        if (c != '\'')
          {
            warn(_("use \"...\" for multi-character literal tokens"));
-           dp = discard;
-           while (literalchar(&dp, &discode, '\'')) {}
+           while (1)
+             {
+               dp = discard;
+               if (! literalchar(&dp, &discode, '\''))
+                 break;
+             }
          }
        *p++ = '\'';
        *p = 0;