BUG: "inclinenumber" cannot use public buffer, since it could change

the buffer pointer (luaY_lex and read_long_string have local
pointers to it).
This commit is contained in:
Roberto Ierusalimschy 1997-02-07 11:49:46 -02:00
parent 1143bf9286
commit b48847c5fa
1 changed files with 13 additions and 9 deletions

22
lex.c
View File

@ -1,4 +1,4 @@
char *rcs_lex = "$Id: lex.c,v 2.40 1996/11/21 14:44:04 roberto Exp roberto $"; char *rcs_lex = "$Id: lex.c,v 2.41 1996/11/22 13:08:02 roberto Exp roberto $";
#include <ctype.h> #include <ctype.h>
@ -12,7 +12,7 @@ char *rcs_lex = "$Id: lex.c,v 2.40 1996/11/21 14:44:04 roberto Exp roberto $";
#include "luadebug.h" #include "luadebug.h"
#include "parser.h" #include "parser.h"
#define MINBUFF 260 #define MINBUFF 250
#define next() (current = input()) #define next() (current = input())
#define save(x) (yytext[tokensize++] = (x)) #define save(x) (yytext[tokensize++] = (x))
@ -30,17 +30,22 @@ void lua_setinput (Input fn)
input = fn; input = fn;
} }
void luaI_syntaxerror (char *s) static void luaI_auxsyntaxerror (char *s, char *token)
{ {
char msg[256]; char msg[256];
char *token = luaI_buffer(1);
if (token[0] == 0)
token = "<eof>";
sprintf (msg,"%s;\n> last token read: \"%s\" at line %d in file %s", sprintf (msg,"%s;\n> last token read: \"%s\" at line %d in file %s",
s, token, lua_linenumber, lua_parsedfile); s, token, lua_linenumber, lua_parsedfile);
lua_error (msg); lua_error (msg);
} }
void luaI_syntaxerror (char *s)
{
char *token = luaI_buffer(1);
if (token[0] == 0)
token = "<eof>";
luaI_auxsyntaxerror(s, token);
}
static struct static struct
{ {
@ -82,7 +87,7 @@ static int inclinenumber (int pragma_allowed)
{ {
++lua_linenumber; ++lua_linenumber;
if (pragma_allowed && current == '$') { /* is a pragma? */ if (pragma_allowed && current == '$') { /* is a pragma? */
char *buff = luaI_buffer(MINBUFF+1); char buff[MINBUFF+1];
int i = 0; int i = 0;
next(); /* skip $ */ next(); /* skip $ */
while (isalnum((unsigned char)current)) { while (isalnum((unsigned char)current)) {
@ -95,8 +100,7 @@ static int inclinenumber (int pragma_allowed)
lua_debug = 1; lua_debug = 1;
else if (strcmp(buff, "nodebug") == 0) else if (strcmp(buff, "nodebug") == 0)
lua_debug = 0; lua_debug = 0;
else luaI_syntaxerror("invalid pragma"); else luaI_auxsyntaxerror("invalid pragma", buff);
buff[1] = buff[2] = buff[3] = 0; /* (re)set for next token */
} }
return lua_linenumber; return lua_linenumber;
} }