Ver Fonte

BUG: a program ending in a comment without EOL made lex loops forever.

Roberto Ierusalimschy há 29 anos atrás
pai
commit
f0cc2d5506
2 ficheiros alterados com 5 adições e 10 exclusões
  1. 3 2
      inout.c
  2. 2 8
      lex.c

+ 3 - 2
inout.c

@@ -5,7 +5,7 @@
 ** Also provides some predefined lua functions.
 */
 
-char *rcs_inout="$Id: inout.c,v 2.37 1996/05/28 21:07:32 roberto Exp $";
+char *rcs_inout="$Id: inout.c,v 2.38 1996/07/12 20:00:26 roberto Exp roberto $";
 
 #include <stdio.h>
 
@@ -31,7 +31,8 @@ static char *st;
 */
 static int fileinput (void)
 {
- return fgetc (fp);
+  int c = fgetc(fp);
+  return (c == EOF) ? 0 : c;
 }
 
 /*

+ 2 - 8
lex.c

@@ -1,4 +1,4 @@
-char *rcs_lex = "$Id: lex.c,v 2.33 1996/05/28 21:07:32 roberto Exp roberto $";
+char *rcs_lex = "$Id: lex.c,v 2.34 1996/05/30 14:04:07 roberto Exp roberto $";
 
 
 #include <ctype.h>
@@ -82,7 +82,6 @@ static int read_long_string (char *yytext, int buffsize)
       yytext = luaI_buffer(buffsize *= 2);
     switch (current)
     {
-      case EOF:
       case 0:
         save(0);
         return WRONGTOKEN;
@@ -132,10 +131,6 @@ int luaY_lex (void)
     int tokensize = 0;
     switch (current)
     {
-      case EOF:
-      case 0:
-       save(0);
-       return 0;
       case '\n': linelasttoken = ++lua_linenumber;
       case ' ':
       case '\r':  /* CR: to avoid problems with DOS/Windows */
@@ -206,7 +201,6 @@ int luaY_lex (void)
             yytext = luaI_buffer(buffsize *= 2);
           switch (current)
           {
-            case EOF:
             case 0:
             case '\n':
               save(0);
@@ -316,7 +310,7 @@ int luaY_lex (void)
           return NUMBER;
         }
 
-      default: 		/* also end of file */
+      default: 		/* also end of program (0) */
       {
         save_and_next();
         return yytext[0];