From d1608c597e2f45021d43c56050aff08e5d417699 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Wed, 14 Feb 1996 10:35:51 -0300 Subject: reserved words are stored in main string table; "marked" field is used to indicate its type. Table initializations centralized by "tree.c". --- lex.c | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) (limited to 'lex.c') diff --git a/lex.c b/lex.c index c65d2253..d883fcb9 100644 --- a/lex.c +++ b/lex.c @@ -1,4 +1,4 @@ -char *rcs_lex = "$Id: lex.c,v 2.25 1996/02/12 18:32:40 roberto Exp roberto $"; +char *rcs_lex = "$Id: lex.c,v 2.26 1996/02/13 17:30:39 roberto Exp roberto $"; #include @@ -47,7 +47,6 @@ char *lua_lasttext (void) } -/* The reserved words must be listed in lexicographic order */ static struct { char *name; @@ -74,22 +73,14 @@ static struct #define RESERVEDSIZE (sizeof(reserved)/sizeof(reserved[0])) -static int findReserved (char *name) +void luaI_addReserved (void) { - int l = 0; - int h = RESERVEDSIZE - 1; - while (l <= h) + int i; + for (i=0; imarked = reserved[i].token; /* reserved word (always > 255) */ } - return 0; } @@ -282,12 +273,14 @@ int luaY_lex (void) case 'Z': case '_': { - Word res; + TaggedString *ts; do { save_and_next(); } while (isalnum(current) || current == '_'); *yytextLast = 0; - res = findReserved(yytext); - if (res) return res; - luaY_lval.pTStr = luaI_createfixedstring(yytext); + ts = lua_createstring(yytext); + if (ts->marked > 2) + return ts->marked; /* reserved word */ + luaY_lval.pTStr = ts; + ts->marked = 2; /* avoid GC */ return NAME; } -- cgit v1.2.3-55-g6feb