aboutsummaryrefslogtreecommitdiff
path: root/lparser.c
diff options
context:
space:
mode:
Diffstat (limited to 'lparser.c')
-rw-r--r--lparser.c37
1 files changed, 18 insertions, 19 deletions
diff --git a/lparser.c b/lparser.c
index 0e43b2ba..fe81ed1d 100644
--- a/lparser.c
+++ b/lparser.c
@@ -130,12 +130,12 @@ static TString *str_checkname (LexState *ls) {
130static void init_exp (expdesc *e, expkind k, int i) { 130static void init_exp (expdesc *e, expkind k, int i) {
131 e->f = e->t = NO_JUMP; 131 e->f = e->t = NO_JUMP;
132 e->k = k; 132 e->k = k;
133 e->u.i.info = i; 133 e->info = i;
134} 134}
135 135
136 136
137static void codestring (LexState *ls, expdesc *e, TString *s) { 137static void codestring (LexState *ls, expdesc *e, TString *s) {
138 init_exp(e, VK, luaK_stringk(ls->fs, s)); 138 init_exp(e, VK, luaK_stringK(ls->fs, s));
139} 139}
140 140
141 141
@@ -201,7 +201,7 @@ static void new_localvarstr (LexState *ls, const char *name, int n) {
201static int indexupvalue (FuncState *fs, expdesc *v) { 201static int indexupvalue (FuncState *fs, expdesc *v) {
202 int i; 202 int i;
203 for (i=0; i<fs->f->nupvalues; i++) { 203 for (i=0; i<fs->f->nupvalues; i++) {
204 if (fs->upvalues[i].k == v->k && fs->upvalues[i].u.i.info == v->u.i.info) 204 if (fs->upvalues[i].k == v->k && fs->upvalues[i].info == v->info)
205 return i; 205 return i;
206 } 206 }
207 /* new one */ 207 /* new one */
@@ -228,10 +228,10 @@ static void singlevar (FuncState *fs, TString *n, expdesc *var, int baselevel) {
228 singlevar(fs->prev, n, var, 0); 228 singlevar(fs->prev, n, var, 0);
229 if (var->k == VGLOBAL) { 229 if (var->k == VGLOBAL) {
230 if (baselevel) 230 if (baselevel)
231 var->u.i.info = luaK_stringk(fs, n); /* info points to global name */ 231 var->info = luaK_stringK(fs, n); /* info points to global name */
232 } 232 }
233 else { /* local variable in some upper level? */ 233 else { /* local variable in some upper level? */
234 var->u.i.info = indexupvalue(fs, var); 234 var->info = indexupvalue(fs, var);
235 var->k = VUPVAL; /* upvalue in this level */ 235 var->k = VUPVAL; /* upvalue in this level */
236 } 236 }
237 } 237 }
@@ -447,7 +447,7 @@ static void funcargs (LexState *ls, expdesc *f) {
447 } 447 }
448 } 448 }
449 lua_assert(f->k == VNONRELOC); 449 lua_assert(f->k == VNONRELOC);
450 base = f->u.i.info; /* base register for call */ 450 base = f->info; /* base register for call */
451 if (args.k == VCALL) 451 if (args.k == VCALL)
452 nparams = LUA_MULTRET; /* open call */ 452 nparams = LUA_MULTRET; /* open call */
453 else { 453 else {
@@ -489,7 +489,7 @@ static void recfield (LexState *ls, expdesc *t) {
489 luaK_exp2RK(fs, &key); 489 luaK_exp2RK(fs, &key);
490 expr(ls, &val); 490 expr(ls, &val);
491 luaK_exp2anyreg(fs, &val); 491 luaK_exp2anyreg(fs, &val);
492 luaK_codeABC(fs, OP_SETTABLE, val.u.i.info, t->u.i.info, 492 luaK_codeABC(fs, OP_SETTABLE, val.info, t->info,
493 luaK_exp2RK(fs, &key)); 493 luaK_exp2RK(fs, &key));
494 fs->freereg = reg; /* free registers */ 494 fs->freereg = reg; /* free registers */
495} 495}
@@ -526,7 +526,7 @@ static int listfields (LexState *ls, expdesc *t) {
526 luaK_exp2nextreg(fs, &v); 526 luaK_exp2nextreg(fs, &v);
527 luaX_checklimit(ls, n, MAXARG_Bc, "items in a constructor"); 527 luaX_checklimit(ls, n, MAXARG_Bc, "items in a constructor");
528 if (n%LFIELDS_PER_FLUSH == 0) { 528 if (n%LFIELDS_PER_FLUSH == 0) {
529 luaK_codeABc(fs, OP_SETLIST, t->u.i.info, n-1); /* flush */ 529 luaK_codeABc(fs, OP_SETLIST, t->info, n-1); /* flush */
530 fs->freereg = reg; /* free registers */ 530 fs->freereg = reg; /* free registers */
531 } 531 }
532 expr(ls, &v); 532 expr(ls, &v);
@@ -534,11 +534,11 @@ static int listfields (LexState *ls, expdesc *t) {
534 } 534 }
535 if (v.k == VCALL) { 535 if (v.k == VCALL) {
536 luaK_setcallreturns(fs, &v, LUA_MULTRET); 536 luaK_setcallreturns(fs, &v, LUA_MULTRET);
537 luaK_codeABc(fs, OP_SETLISTO, t->u.i.info, n-1); 537 luaK_codeABc(fs, OP_SETLISTO, t->info, n-1);
538 } 538 }
539 else { 539 else {
540 luaK_exp2nextreg(fs, &v); 540 luaK_exp2nextreg(fs, &v);
541 luaK_codeABc(fs, OP_SETLIST, t->u.i.info, n-1); 541 luaK_codeABc(fs, OP_SETLIST, t->info, n-1);
542 } 542 }
543 fs->freereg = reg; /* free registers */ 543 fs->freereg = reg; /* free registers */
544 return n; 544 return n;
@@ -686,8 +686,7 @@ static void simpleexp (LexState *ls, expdesc *v) {
686 | primaryexp */ 686 | primaryexp */
687 switch (ls->t.token) { 687 switch (ls->t.token) {
688 case TK_NUMBER: { 688 case TK_NUMBER: {
689 init_exp(v, VNUMBER, 0); 689 init_exp(v, VK, luaK_numberK(ls->fs, ls->t.seminfo.r));
690 v->u.n = ls->t.seminfo.r;
691 next(ls); /* must use `seminfo' before `next' */ 690 next(ls); /* must use `seminfo' before `next' */
692 break; 691 break;
693 } 692 }
@@ -859,18 +858,18 @@ static void check_conflict (LexState *ls, struct LHS_assign *lh, expdesc *v) {
859 int conflict = 0; 858 int conflict = 0;
860 for (; lh; lh = lh->prev) { 859 for (; lh; lh = lh->prev) {
861 if (lh->v.k == VINDEXED) { 860 if (lh->v.k == VINDEXED) {
862 if (lh->v.u.i.info == v->u.i.info) { /* conflict? */ 861 if (lh->v.info == v->info) { /* conflict? */
863 conflict = 1; 862 conflict = 1;
864 lh->v.u.i.info = extra; /* previous assignment will use safe copy */ 863 lh->v.info = extra; /* previous assignment will use safe copy */
865 } 864 }
866 if (lh->v.u.i.aux == v->u.i.info) { /* conflict? */ 865 if (lh->v.aux == v->info) { /* conflict? */
867 conflict = 1; 866 conflict = 1;
868 lh->v.u.i.aux = extra; /* previous assignment will use safe copy */ 867 lh->v.aux = extra; /* previous assignment will use safe copy */
869 } 868 }
870 } 869 }
871 } 870 }
872 if (conflict) { 871 if (conflict) {
873 luaK_codeABC(fs, OP_MOVE, fs->freereg, v->u.i.info, 0); /* make copy */ 872 luaK_codeABC(fs, OP_MOVE, fs->freereg, v->info, 0); /* make copy */
874 luaK_reserveregs(fs, 1); 873 luaK_reserveregs(fs, 1);
875 } 874 }
876} 875}
@@ -980,8 +979,8 @@ static void fornum (LexState *ls, TString *varname) {
980 exp1(ls); /* limit */ 979 exp1(ls); /* limit */
981 if (optional(ls, ',')) 980 if (optional(ls, ','))
982 exp1(ls); /* optional step */ 981 exp1(ls); /* optional step */
983 else { 982 else { /* default step = 1 */
984 luaK_codeAsBc(fs, OP_LOADINT, fs->freereg, 1); /* default step */ 983 luaK_codeABc(fs, OP_LOADK, fs->freereg, luaK_numberK(fs, 1));
985 luaK_reserveregs(fs, 1); 984 luaK_reserveregs(fs, 1);
986 } 985 }
987 new_localvar(ls, varname, 0); 986 new_localvar(ls, varname, 0);