aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lparser.c37
-rw-r--r--ltablib.c30
2 files changed, 36 insertions, 31 deletions
diff --git a/lparser.c b/lparser.c
index 9a33bb42..01172c49 100644
--- a/lparser.c
+++ b/lparser.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lparser.c,v 2.9 2004/12/03 20:44:19 roberto Exp roberto $ 2** $Id: lparser.c,v 2.10 2004/12/03 20:50:25 roberto Exp roberto $
3** Lua Parser 3** Lua Parser
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -109,10 +109,15 @@ static int testnext (LexState *ls, int c) {
109 109
110 110
111static void check (LexState *ls, int c) { 111static void check (LexState *ls, int c) {
112 if (!testnext(ls, c)) 112 if (ls->t.token != c)
113 error_expected(ls, c); 113 error_expected(ls, c);
114} 114}
115 115
116static void checknext (LexState *ls, int c) {
117 check(ls, c);
118 next(ls);
119}
120
116 121
117#define check_condition(ls,c,msg) { if (!(c)) luaX_syntaxerror(ls, msg); } 122#define check_condition(ls,c,msg) { if (!(c)) luaX_syntaxerror(ls, msg); }
118 123
@@ -133,7 +138,7 @@ static void check_match (LexState *ls, int what, int who, int where) {
133 138
134static TString *str_checkname (LexState *ls) { 139static TString *str_checkname (LexState *ls) {
135 TString *ts; 140 TString *ts;
136 if (ls->t.token != TK_NAME) error_expected(ls, TK_NAME); 141 check(ls, TK_NAME);
137 ts = ls->t.seminfo.ts; 142 ts = ls->t.seminfo.ts;
138 next(ls); 143 next(ls);
139 return ts; 144 return ts;
@@ -396,7 +401,7 @@ Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, const char *name) {
396 funcstate.f->is_vararg = NEWSTYLEVARARG; 401 funcstate.f->is_vararg = NEWSTYLEVARARG;
397 next(&lexstate); /* read first token */ 402 next(&lexstate); /* read first token */
398 chunk(&lexstate); 403 chunk(&lexstate);
399 check_condition(&lexstate, (lexstate.t.token == TK_EOS), "<eof> expected"); 404 check(&lexstate, TK_EOS);
400 close_func(&lexstate); 405 close_func(&lexstate);
401 lua_assert(funcstate.prev == NULL); 406 lua_assert(funcstate.prev == NULL);
402 lua_assert(funcstate.f->nups == 0); 407 lua_assert(funcstate.f->nups == 0);
@@ -428,7 +433,7 @@ static void yindex (LexState *ls, expdesc *v) {
428 next(ls); /* skip the '[' */ 433 next(ls); /* skip the '[' */
429 expr(ls, v); 434 expr(ls, v);
430 luaK_exp2val(ls->fs, v); 435 luaK_exp2val(ls->fs, v);
431 check(ls, ']'); 436 checknext(ls, ']');
432} 437}
433 438
434 439
@@ -460,7 +465,7 @@ static void recfield (LexState *ls, struct ConsControl *cc) {
460 } 465 }
461 else /* ls->t.token == '[' */ 466 else /* ls->t.token == '[' */
462 yindex(ls, &key); 467 yindex(ls, &key);
463 check(ls, '='); 468 checknext(ls, '=');
464 luaK_exp2RK(fs, &key); 469 luaK_exp2RK(fs, &key);
465 expr(ls, &val); 470 expr(ls, &val);
466 luaK_codeABC(fs, OP_SETTABLE, cc->t->info, luaK_exp2RK(fs, &key), 471 luaK_codeABC(fs, OP_SETTABLE, cc->t->info, luaK_exp2RK(fs, &key),
@@ -514,7 +519,7 @@ static void constructor (LexState *ls, expdesc *t) {
514 init_exp(t, VRELOCABLE, pc); 519 init_exp(t, VRELOCABLE, pc);
515 init_exp(&cc.v, VVOID, 0); /* no value (yet) */ 520 init_exp(&cc.v, VVOID, 0); /* no value (yet) */
516 luaK_exp2nextreg(ls->fs, t); /* fix it at stack top (for gc) */ 521 luaK_exp2nextreg(ls->fs, t); /* fix it at stack top (for gc) */
517 check(ls, '{'); 522 checknext(ls, '{');
518 do { 523 do {
519 lua_assert(cc.v.k == VVOID || cc.tostore > 0); 524 lua_assert(cc.v.k == VVOID || cc.tostore > 0);
520 testnext(ls, ';'); /* compatibility only */ 525 testnext(ls, ';'); /* compatibility only */
@@ -584,13 +589,13 @@ static void body (LexState *ls, expdesc *e, int needself, int line) {
584 FuncState new_fs; 589 FuncState new_fs;
585 open_func(ls, &new_fs); 590 open_func(ls, &new_fs);
586 new_fs.f->lineDefined = line; 591 new_fs.f->lineDefined = line;
587 check(ls, '('); 592 checknext(ls, '(');
588 if (needself) { 593 if (needself) {
589 new_localvarliteral(ls, "self", 0); 594 new_localvarliteral(ls, "self", 0);
590 adjustlocalvars(ls, 1); 595 adjustlocalvars(ls, 1);
591 } 596 }
592 parlist(ls); 597 parlist(ls);
593 check(ls, ')'); 598 checknext(ls, ')');
594 chunk(ls); 599 chunk(ls);
595 check_match(ls, TK_END, TK_FUNCTION, line); 600 check_match(ls, TK_END, TK_FUNCTION, line);
596 close_func(ls); 601 close_func(ls);
@@ -944,7 +949,7 @@ static void assignment (LexState *ls, struct LHS_assign *lh, int nvars) {
944 } 949 }
945 else { /* assignment -> `=' explist1 */ 950 else { /* assignment -> `=' explist1 */
946 int nexps; 951 int nexps;
947 check(ls, '='); 952 checknext(ls, '=');
948 nexps = explist1(ls, &e); 953 nexps = explist1(ls, &e);
949 if (nexps != nvars) { 954 if (nexps != nvars) {
950 adjust_assign(ls, nvars, nexps, &e); 955 adjust_assign(ls, nvars, nexps, &e);
@@ -1011,7 +1016,7 @@ static void whilestat (LexState *ls, int line) {
1011 codeexp[i] = fs->f->code[expinit + i]; 1016 codeexp[i] = fs->f->code[expinit + i];
1012 fs->pc = expinit; /* remove `exp' code */ 1017 fs->pc = expinit; /* remove `exp' code */
1013 enterblock(fs, &bl, 1); 1018 enterblock(fs, &bl, 1);
1014 check(ls, TK_DO); 1019 checknext(ls, TK_DO);
1015 blockinit = luaK_getlabel(fs); 1020 blockinit = luaK_getlabel(fs);
1016 block(ls); 1021 block(ls);
1017 luaK_patchtohere(fs, whileinit); /* initial jump jumps to here */ 1022 luaK_patchtohere(fs, whileinit); /* initial jump jumps to here */
@@ -1059,7 +1064,7 @@ static void forbody (LexState *ls, int base, int line, int nvars, int isnum) {
1059 FuncState *fs = ls->fs; 1064 FuncState *fs = ls->fs;
1060 int prep, endfor; 1065 int prep, endfor;
1061 adjustlocalvars(ls, 3); /* control variables */ 1066 adjustlocalvars(ls, 3); /* control variables */
1062 check(ls, TK_DO); 1067 checknext(ls, TK_DO);
1063 prep = luaK_codeAsBx(fs, (isnum ? OP_FORPREP : OP_TFORPREP), base, NO_JUMP); 1068 prep = luaK_codeAsBx(fs, (isnum ? OP_FORPREP : OP_TFORPREP), base, NO_JUMP);
1064 enterblock(fs, &bl, 0); /* scope for declared variables */ 1069 enterblock(fs, &bl, 0); /* scope for declared variables */
1065 adjustlocalvars(ls, nvars); 1070 adjustlocalvars(ls, nvars);
@@ -1082,9 +1087,9 @@ static void fornum (LexState *ls, TString *varname, int line) {
1082 new_localvarliteral(ls, "(for limit)", 1); 1087 new_localvarliteral(ls, "(for limit)", 1);
1083 new_localvarliteral(ls, "(for step)", 2); 1088 new_localvarliteral(ls, "(for step)", 2);
1084 new_localvar(ls, varname, 3); 1089 new_localvar(ls, varname, 3);
1085 check(ls, '='); 1090 checknext(ls, '=');
1086 exp1(ls); /* initial value */ 1091 exp1(ls); /* initial value */
1087 check(ls, ','); 1092 checknext(ls, ',');
1088 exp1(ls); /* limit */ 1093 exp1(ls); /* limit */
1089 if (testnext(ls, ',')) 1094 if (testnext(ls, ','))
1090 exp1(ls); /* optional step */ 1095 exp1(ls); /* optional step */
@@ -1111,7 +1116,7 @@ static void forlist (LexState *ls, TString *indexname) {
1111 new_localvar(ls, indexname, nvars++); 1116 new_localvar(ls, indexname, nvars++);
1112 while (testnext(ls, ',')) 1117 while (testnext(ls, ','))
1113 new_localvar(ls, str_checkname(ls), nvars++); 1118 new_localvar(ls, str_checkname(ls), nvars++);
1114 check(ls, TK_IN); 1119 checknext(ls, TK_IN);
1115 line = ls->linenumber; 1120 line = ls->linenumber;
1116 adjust_assign(ls, 3, explist1(ls, &e), &e); 1121 adjust_assign(ls, 3, explist1(ls, &e), &e);
1117 luaK_checkstack(fs, 3); /* extra space to call generator */ 1122 luaK_checkstack(fs, 3); /* extra space to call generator */
@@ -1142,7 +1147,7 @@ static int test_then_block (LexState *ls) {
1142 int flist; 1147 int flist;
1143 next(ls); /* skip IF or ELSEIF */ 1148 next(ls); /* skip IF or ELSEIF */
1144 flist = cond(ls); 1149 flist = cond(ls);
1145 check(ls, TK_THEN); 1150 checknext(ls, TK_THEN);
1146 block(ls); /* `then' part */ 1151 block(ls); /* `then' part */
1147 return flist; 1152 return flist;
1148} 1153}
diff --git a/ltablib.c b/ltablib.c
index d5c3e37c..572730aa 100644
--- a/ltablib.c
+++ b/ltablib.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ltablib.c,v 1.25 2004/05/10 18:06:14 roberto Exp roberto $ 2** $Id: ltablib.c,v 1.26 2004/06/15 13:37:21 roberto Exp roberto $
3** Library for Table Manipulation 3** Library for Table Manipulation
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -19,7 +19,7 @@
19#define aux_getn(L,n) (luaL_checktype(L, n, LUA_TTABLE), luaL_getn(L, n)) 19#define aux_getn(L,n) (luaL_checktype(L, n, LUA_TTABLE), luaL_getn(L, n))
20 20
21 21
22static int luaB_foreachi (lua_State *L) { 22static int foreachi (lua_State *L) {
23 int i; 23 int i;
24 int n = aux_getn(L, 1); 24 int n = aux_getn(L, 1);
25 luaL_checktype(L, 2, LUA_TFUNCTION); 25 luaL_checktype(L, 2, LUA_TFUNCTION);
@@ -36,7 +36,7 @@ static int luaB_foreachi (lua_State *L) {
36} 36}
37 37
38 38
39static int luaB_foreach (lua_State *L) { 39static int foreach (lua_State *L) {
40 luaL_checktype(L, 1, LUA_TTABLE); 40 luaL_checktype(L, 1, LUA_TTABLE);
41 luaL_checktype(L, 2, LUA_TFUNCTION); 41 luaL_checktype(L, 2, LUA_TFUNCTION);
42 lua_pushnil(L); /* first key */ 42 lua_pushnil(L); /* first key */
@@ -54,13 +54,13 @@ static int luaB_foreach (lua_State *L) {
54} 54}
55 55
56 56
57static int luaB_getn (lua_State *L) { 57static int getn (lua_State *L) {
58 lua_pushinteger(L, aux_getn(L, 1)); 58 lua_pushinteger(L, aux_getn(L, 1));
59 return 1; 59 return 1;
60} 60}
61 61
62 62
63static int luaB_setn (lua_State *L) { 63static int setn (lua_State *L) {
64 luaL_checktype(L, 1, LUA_TTABLE); 64 luaL_checktype(L, 1, LUA_TTABLE);
65 luaL_setn(L, 1, luaL_checkint(L, 2)); 65 luaL_setn(L, 1, luaL_checkint(L, 2));
66 lua_pushvalue(L, 1); 66 lua_pushvalue(L, 1);
@@ -68,7 +68,7 @@ static int luaB_setn (lua_State *L) {
68} 68}
69 69
70 70
71static int luaB_tinsert (lua_State *L) { 71static int tinsert (lua_State *L) {
72 int v = lua_gettop(L); /* number of arguments */ 72 int v = lua_gettop(L); /* number of arguments */
73 int e = aux_getn(L, 1) + LUA_FIRSTINDEX; /* first empty element */ 73 int e = aux_getn(L, 1) + LUA_FIRSTINDEX; /* first empty element */
74 int pos; /* where to insert new element */ 74 int pos; /* where to insert new element */
@@ -90,7 +90,7 @@ static int luaB_tinsert (lua_State *L) {
90} 90}
91 91
92 92
93static int luaB_tremove (lua_State *L) { 93static int tremove (lua_State *L) {
94 int e = aux_getn(L, 1) + LUA_FIRSTINDEX - 1; 94 int e = aux_getn(L, 1) + LUA_FIRSTINDEX - 1;
95 int pos = luaL_optint(L, 2, e); 95 int pos = luaL_optint(L, 2, e);
96 if (e < LUA_FIRSTINDEX) return 0; /* table is `empty' */ 96 if (e < LUA_FIRSTINDEX) return 0; /* table is `empty' */
@@ -220,7 +220,7 @@ static void auxsort (lua_State *L, int l, int u) {
220 } /* repeat the routine for the larger one */ 220 } /* repeat the routine for the larger one */
221} 221}
222 222
223static int luaB_sort (lua_State *L) { 223static int sort (lua_State *L) {
224 int n = aux_getn(L, 1); 224 int n = aux_getn(L, 1);
225 luaL_checkstack(L, 40, ""); /* assume array is smaller than 2^40 */ 225 luaL_checkstack(L, 40, ""); /* assume array is smaller than 2^40 */
226 if (!lua_isnoneornil(L, 2)) /* is there a 2nd argument? */ 226 if (!lua_isnoneornil(L, 2)) /* is there a 2nd argument? */
@@ -235,13 +235,13 @@ static int luaB_sort (lua_State *L) {
235 235
236static const luaL_reg tab_funcs[] = { 236static const luaL_reg tab_funcs[] = {
237 {"concat", str_concat}, 237 {"concat", str_concat},
238 {"foreach", luaB_foreach}, 238 {"foreach", foreach},
239 {"foreachi", luaB_foreachi}, 239 {"foreachi", foreachi},
240 {"getn", luaB_getn}, 240 {"getn", getn},
241 {"setn", luaB_setn}, 241 {"setn", setn},
242 {"sort", luaB_sort}, 242 {"sort", sort},
243 {"insert", luaB_tinsert}, 243 {"insert", tinsert},
244 {"remove", luaB_tremove}, 244 {"remove", tremove},
245 {NULL, NULL} 245 {NULL, NULL}
246}; 246};
247 247