diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-11-21 17:00:46 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-11-21 17:00:46 -0200 |
commit | accd7bc25355be4350db6d117515c672121a67f2 (patch) | |
tree | e351b89ca86b67a3c60874c230626a13517524b8 /lvm.c | |
parent | 6153200bc25bd99f9d3d25d7caa486b03b6535d5 (diff) | |
download | lua-accd7bc25355be4350db6d117515c672121a67f2.tar.gz lua-accd7bc25355be4350db6d117515c672121a67f2.tar.bz2 lua-accd7bc25355be4350db6d117515c672121a67f2.zip |
small modifications (format, small optimizations, etc)
Diffstat (limited to 'lvm.c')
-rw-r--r-- | lvm.c | 210 |
1 files changed, 108 insertions, 102 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lvm.c,v 1.13 1997/10/27 16:14:37 roberto Exp roberto $ | 2 | ** $Id: lvm.c,v 1.14 1997/11/19 17:29:23 roberto Exp roberto $ |
3 | ** Lua virtual machine | 3 | ** Lua virtual machine |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -79,12 +79,13 @@ int luaV_tostring (TObject *obj) | |||
79 | 79 | ||
80 | void luaV_closure (int nelems) | 80 | void luaV_closure (int nelems) |
81 | { | 81 | { |
82 | struct Stack *S = &L->stack; | ||
82 | Closure *c = luaF_newclosure(nelems); | 83 | Closure *c = luaF_newclosure(nelems); |
83 | c->consts[0] = *(L->stack.top-1); | 84 | c->consts[0] = *(S->top-1); |
84 | memcpy(&c->consts[1], L->stack.top-(nelems+1), nelems*sizeof(TObject)); | 85 | memcpy(&c->consts[1], S->top-(nelems+1), nelems*sizeof(TObject)); |
85 | L->stack.top -= nelems; | 86 | S->top -= nelems; |
86 | ttype(L->stack.top-1) = LUA_T_FUNCTION; | 87 | ttype(S->top-1) = LUA_T_FUNCTION; |
87 | (L->stack.top-1)->value.cl = c; | 88 | (S->top-1)->value.cl = c; |
88 | } | 89 | } |
89 | 90 | ||
90 | 91 | ||
@@ -94,23 +95,24 @@ void luaV_closure (int nelems) | |||
94 | */ | 95 | */ |
95 | void luaV_gettable (void) | 96 | void luaV_gettable (void) |
96 | { | 97 | { |
98 | struct Stack *S = &L->stack; | ||
97 | TObject *im; | 99 | TObject *im; |
98 | if (ttype(L->stack.top-2) != LUA_T_ARRAY) /* not a table, get "gettable" method */ | 100 | if (ttype(S->top-2) != LUA_T_ARRAY) /* not a table, get "gettable" method */ |
99 | im = luaT_getimbyObj(L->stack.top-2, IM_GETTABLE); | 101 | im = luaT_getimbyObj(S->top-2, IM_GETTABLE); |
100 | else { /* object is a table... */ | 102 | else { /* object is a table... */ |
101 | int tg = (L->stack.top-2)->value.a->htag; | 103 | int tg = (S->top-2)->value.a->htag; |
102 | im = luaT_getim(tg, IM_GETTABLE); | 104 | im = luaT_getim(tg, IM_GETTABLE); |
103 | if (ttype(im) == LUA_T_NIL) { /* and does not have a "gettable" method */ | 105 | if (ttype(im) == LUA_T_NIL) { /* and does not have a "gettable" method */ |
104 | TObject *h = luaH_get(avalue(L->stack.top-2), L->stack.top-1); | 106 | TObject *h = luaH_get(avalue(S->top-2), S->top-1); |
105 | if (h != NULL && ttype(h) != LUA_T_NIL) { | 107 | if (h != NULL && ttype(h) != LUA_T_NIL) { |
106 | --L->stack.top; | 108 | --S->top; |
107 | *(L->stack.top-1) = *h; | 109 | *(S->top-1) = *h; |
108 | } | 110 | } |
109 | else if (ttype(im=luaT_getim(tg, IM_INDEX)) != LUA_T_NIL) | 111 | else if (ttype(im=luaT_getim(tg, IM_INDEX)) != LUA_T_NIL) |
110 | luaD_callTM(im, 2, 1); | 112 | luaD_callTM(im, 2, 1); |
111 | else { | 113 | else { |
112 | --L->stack.top; | 114 | --S->top; |
113 | ttype(L->stack.top-1) = LUA_T_NIL; | 115 | ttype(S->top-1) = LUA_T_NIL; |
114 | } | 116 | } |
115 | return; | 117 | return; |
116 | } | 118 | } |
@@ -125,26 +127,27 @@ void luaV_gettable (void) | |||
125 | 127 | ||
126 | 128 | ||
127 | /* | 129 | /* |
128 | ** Function to store indexed based on values at the L->stack.top | 130 | ** Function to store indexed based on values at the stack.top |
129 | ** mode = 0: raw store (without internal methods) | 131 | ** mode = 0: raw store (without internal methods) |
130 | ** mode = 1: normal store (with internal methods) | 132 | ** mode = 1: normal store (with internal methods) |
131 | ** mode = 2: "deep L->stack.stack" store (with internal methods) | 133 | ** mode = 2: "deep L->stack.stack" store (with internal methods) |
132 | */ | 134 | */ |
133 | void luaV_settable (TObject *t, int mode) | 135 | void luaV_settable (TObject *t, int mode) |
134 | { | 136 | { |
137 | struct Stack *S = &L->stack; | ||
135 | TObject *im = (mode == 0) ? NULL : luaT_getimbyObj(t, IM_SETTABLE); | 138 | TObject *im = (mode == 0) ? NULL : luaT_getimbyObj(t, IM_SETTABLE); |
136 | if (ttype(t) == LUA_T_ARRAY && (im == NULL || ttype(im) == LUA_T_NIL)) { | 139 | if (ttype(t) == LUA_T_ARRAY && (im == NULL || ttype(im) == LUA_T_NIL)) { |
137 | TObject *h = luaH_set(avalue(t), t+1); | 140 | TObject *h = luaH_set(avalue(t), t+1); |
138 | *h = *(L->stack.top-1); | 141 | *h = *(S->top-1); |
139 | L->stack.top -= (mode == 2) ? 1 : 3; | 142 | S->top -= (mode == 2) ? 1 : 3; |
140 | } | 143 | } |
141 | else { /* object is not a table, and/or has a specific "settable" method */ | 144 | else { /* object is not a table, and/or has a specific "settable" method */ |
142 | if (im && ttype(im) != LUA_T_NIL) { | 145 | if (im && ttype(im) != LUA_T_NIL) { |
143 | if (mode == 2) { | 146 | if (mode == 2) { |
144 | *(L->stack.top+1) = *(L->stack.top-1); | 147 | *(S->top+1) = *(L->stack.top-1); |
145 | *(L->stack.top) = *(t+1); | 148 | *(S->top) = *(t+1); |
146 | *(L->stack.top-1) = *t; | 149 | *(S->top-1) = *t; |
147 | L->stack.top += 2; /* WARNING: caller must assure stack space */ | 150 | S->top += 2; /* WARNING: caller must assure stack space */ |
148 | } | 151 | } |
149 | luaD_callTM(im, 3, 0); | 152 | luaD_callTM(im, 3, 0); |
150 | } | 153 | } |
@@ -163,10 +166,11 @@ void luaV_getglobal (TaggedString *ts) | |||
163 | *L->stack.top++ = *value; | 166 | *L->stack.top++ = *value; |
164 | } | 167 | } |
165 | else { | 168 | else { |
166 | ttype(L->stack.top) = LUA_T_STRING; | 169 | struct Stack *S = &L->stack; |
167 | tsvalue(L->stack.top) = ts; | 170 | ttype(S->top) = LUA_T_STRING; |
168 | L->stack.top++; | 171 | tsvalue(S->top) = ts; |
169 | *L->stack.top++ = *value; | 172 | S->top++; |
173 | *S->top++ = *value; | ||
170 | luaD_callTM(im, 2, 1); | 174 | luaD_callTM(im, 2, 1); |
171 | } | 175 | } |
172 | } | 176 | } |
@@ -180,11 +184,12 @@ void luaV_setglobal (TaggedString *ts) | |||
180 | luaS_rawsetglobal(ts, --L->stack.top); | 184 | luaS_rawsetglobal(ts, --L->stack.top); |
181 | else { | 185 | else { |
182 | /* WARNING: caller must assure stack space */ | 186 | /* WARNING: caller must assure stack space */ |
183 | TObject newvalue = *(L->stack.top-1); | 187 | struct Stack *S = &L->stack; |
184 | ttype(L->stack.top-1) = LUA_T_STRING; | 188 | TObject newvalue = *(S->top-1); |
185 | tsvalue(L->stack.top-1) = ts; | 189 | ttype(S->top-1) = LUA_T_STRING; |
186 | *L->stack.top++ = *oldvalue; | 190 | tsvalue(S->top-1) = ts; |
187 | *L->stack.top++ = newvalue; | 191 | *S->top++ = *oldvalue; |
192 | *S->top++ = newvalue; | ||
188 | luaD_callTM(im, 3, 0); | 193 | luaD_callTM(im, 3, 0); |
189 | } | 194 | } |
190 | } | 195 | } |
@@ -215,8 +220,9 @@ static void call_arith (IMS event) | |||
215 | static void comparison (lua_Type ttype_less, lua_Type ttype_equal, | 220 | static void comparison (lua_Type ttype_less, lua_Type ttype_equal, |
216 | lua_Type ttype_great, IMS op) | 221 | lua_Type ttype_great, IMS op) |
217 | { | 222 | { |
218 | TObject *l = L->stack.top-2; | 223 | struct Stack *S = &L->stack; |
219 | TObject *r = L->stack.top-1; | 224 | TObject *l = S->top-2; |
225 | TObject *r = S->top-1; | ||
220 | int result; | 226 | int result; |
221 | if (ttype(l) == LUA_T_NUMBER && ttype(r) == LUA_T_NUMBER) | 227 | if (ttype(l) == LUA_T_NUMBER && ttype(r) == LUA_T_NUMBER) |
222 | result = (nvalue(l) < nvalue(r)) ? -1 : (nvalue(l) == nvalue(r)) ? 0 : 1; | 228 | result = (nvalue(l) < nvalue(r)) ? -1 : (nvalue(l) == nvalue(r)) ? 0 : 1; |
@@ -226,9 +232,9 @@ static void comparison (lua_Type ttype_less, lua_Type ttype_equal, | |||
226 | call_binTM(op, "unexpected type at comparison"); | 232 | call_binTM(op, "unexpected type at comparison"); |
227 | return; | 233 | return; |
228 | } | 234 | } |
229 | L->stack.top--; | 235 | S->top--; |
230 | nvalue(L->stack.top-1) = 1; | 236 | nvalue(S->top-1) = 1; |
231 | ttype(L->stack.top-1) = (result < 0) ? ttype_less : | 237 | ttype(S->top-1) = (result < 0) ? ttype_less : |
232 | (result == 0) ? ttype_equal : ttype_great; | 238 | (result == 0) ? ttype_equal : ttype_great; |
233 | } | 239 | } |
234 | 240 | ||
@@ -275,7 +281,7 @@ static void adjust_varargs (StkId first_extra_arg) | |||
275 | */ | 281 | */ |
276 | StkId luaV_execute (Closure *cl, StkId base) | 282 | StkId luaV_execute (Closure *cl, StkId base) |
277 | { | 283 | { |
278 | LState *LL = L; /* to optimize */ | 284 | struct Stack *S = &L->stack; /* to optimize */ |
279 | Byte *pc = cl->consts[0].value.tf->code; | 285 | Byte *pc = cl->consts[0].value.tf->code; |
280 | TObject *consts = cl->consts[0].value.tf->consts; | 286 | TObject *consts = cl->consts[0].value.tf->consts; |
281 | if (lua_callhook) | 287 | if (lua_callhook) |
@@ -286,13 +292,13 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
286 | switch ((OpCode)(aux = *pc++)) { | 292 | switch ((OpCode)(aux = *pc++)) { |
287 | 293 | ||
288 | case PUSHNIL0: | 294 | case PUSHNIL0: |
289 | ttype(LL->stack.top++) = LUA_T_NIL; | 295 | ttype(S->top++) = LUA_T_NIL; |
290 | break; | 296 | break; |
291 | 297 | ||
292 | case PUSHNIL: | 298 | case PUSHNIL: |
293 | aux = *pc++; | 299 | aux = *pc++; |
294 | do { | 300 | do { |
295 | ttype(LL->stack.top++) = LUA_T_NIL; | 301 | ttype(S->top++) = LUA_T_NIL; |
296 | } while (aux--); | 302 | } while (aux--); |
297 | break; | 303 | break; |
298 | 304 | ||
@@ -305,9 +311,9 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
305 | case PUSHNUMBER0: case PUSHNUMBER1: case PUSHNUMBER2: | 311 | case PUSHNUMBER0: case PUSHNUMBER1: case PUSHNUMBER2: |
306 | aux -= PUSHNUMBER0; | 312 | aux -= PUSHNUMBER0; |
307 | pushnumber: | 313 | pushnumber: |
308 | ttype(LL->stack.top) = LUA_T_NUMBER; | 314 | ttype(S->top) = LUA_T_NUMBER; |
309 | nvalue(LL->stack.top) = aux; | 315 | nvalue(S->top) = aux; |
310 | LL->stack.top++; | 316 | S->top++; |
311 | break; | 317 | break; |
312 | 318 | ||
313 | case PUSHLOCAL: | 319 | case PUSHLOCAL: |
@@ -317,7 +323,7 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
317 | case PUSHLOCAL4: case PUSHLOCAL5: case PUSHLOCAL6: case PUSHLOCAL7: | 323 | case PUSHLOCAL4: case PUSHLOCAL5: case PUSHLOCAL6: case PUSHLOCAL7: |
318 | aux -= PUSHLOCAL0; | 324 | aux -= PUSHLOCAL0; |
319 | pushlocal: | 325 | pushlocal: |
320 | *LL->stack.top++ = *((LL->stack.stack+base) + aux); | 326 | *S->top++ = *((S->stack+base) + aux); |
321 | break; | 327 | break; |
322 | 328 | ||
323 | case GETGLOBALW: | 329 | case GETGLOBALW: |
@@ -347,7 +353,7 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
347 | case GETDOTTED4: case GETDOTTED5: case GETDOTTED6: case GETDOTTED7: | 353 | case GETDOTTED4: case GETDOTTED5: case GETDOTTED6: case GETDOTTED7: |
348 | aux -= GETDOTTED0; | 354 | aux -= GETDOTTED0; |
349 | getdotted: | 355 | getdotted: |
350 | *LL->stack.top++ = consts[aux]; | 356 | *S->top++ = consts[aux]; |
351 | luaV_gettable(); | 357 | luaV_gettable(); |
352 | break; | 358 | break; |
353 | 359 | ||
@@ -357,10 +363,10 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
357 | case PUSHSELF: | 363 | case PUSHSELF: |
358 | aux = *pc++; | 364 | aux = *pc++; |
359 | pushself: { | 365 | pushself: { |
360 | TObject receiver = *(LL->stack.top-1); | 366 | TObject receiver = *(S->top-1); |
361 | *LL->stack.top++ = consts[aux]; | 367 | *S->top++ = consts[aux]; |
362 | luaV_gettable(); | 368 | luaV_gettable(); |
363 | *LL->stack.top++ = receiver; | 369 | *S->top++ = receiver; |
364 | break; | 370 | break; |
365 | } | 371 | } |
366 | 372 | ||
@@ -375,7 +381,7 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
375 | case PUSHCONSTANT6: case PUSHCONSTANT7: | 381 | case PUSHCONSTANT6: case PUSHCONSTANT7: |
376 | aux -= PUSHCONSTANT0; | 382 | aux -= PUSHCONSTANT0; |
377 | pushconstant: | 383 | pushconstant: |
378 | *LL->stack.top++ = consts[aux]; | 384 | *S->top++ = consts[aux]; |
379 | break; | 385 | break; |
380 | 386 | ||
381 | case PUSHUPVALUE: | 387 | case PUSHUPVALUE: |
@@ -384,7 +390,7 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
384 | case PUSHUPVALUE0: case PUSHUPVALUE1: | 390 | case PUSHUPVALUE0: case PUSHUPVALUE1: |
385 | aux -= PUSHUPVALUE0; | 391 | aux -= PUSHUPVALUE0; |
386 | pushupvalue: | 392 | pushupvalue: |
387 | *LL->stack.top++ = cl->consts[aux+1]; | 393 | *S->top++ = cl->consts[aux+1]; |
388 | break; | 394 | break; |
389 | 395 | ||
390 | case SETLOCAL: | 396 | case SETLOCAL: |
@@ -394,7 +400,7 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
394 | case SETLOCAL4: case SETLOCAL5: case SETLOCAL6: case SETLOCAL7: | 400 | case SETLOCAL4: case SETLOCAL5: case SETLOCAL6: case SETLOCAL7: |
395 | aux -= SETLOCAL0; | 401 | aux -= SETLOCAL0; |
396 | setlocal: | 402 | setlocal: |
397 | *((LL->stack.stack+base) + aux) = *(--LL->stack.top); | 403 | *((S->stack+base) + aux) = *(--S->top); |
398 | break; | 404 | break; |
399 | 405 | ||
400 | case SETGLOBALW: | 406 | case SETGLOBALW: |
@@ -411,11 +417,11 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
411 | break; | 417 | break; |
412 | 418 | ||
413 | case SETTABLE0: | 419 | case SETTABLE0: |
414 | luaV_settable(LL->stack.top-3, 1); | 420 | luaV_settable(S->top-3, 1); |
415 | break; | 421 | break; |
416 | 422 | ||
417 | case SETTABLE: | 423 | case SETTABLE: |
418 | luaV_settable(LL->stack.top-3-(*pc++), 2); | 424 | luaV_settable(S->top-3-(*pc++), 2); |
419 | break; | 425 | break; |
420 | 426 | ||
421 | case SETLISTW: | 427 | case SETLISTW: |
@@ -428,12 +434,12 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
428 | aux = 0; | 434 | aux = 0; |
429 | setlist: { | 435 | setlist: { |
430 | int n = *(pc++); | 436 | int n = *(pc++); |
431 | TObject *arr = LL->stack.top-n-1; | 437 | TObject *arr = S->top-n-1; |
432 | for (; n; n--) { | 438 | for (; n; n--) { |
433 | ttype(LL->stack.top) = LUA_T_NUMBER; | 439 | ttype(S->top) = LUA_T_NUMBER; |
434 | nvalue(LL->stack.top) = n+aux; | 440 | nvalue(S->top) = n+aux; |
435 | *(luaH_set (avalue(arr), LL->stack.top)) = *(LL->stack.top-1); | 441 | *(luaH_set(avalue(arr), S->top)) = *(S->top-1); |
436 | LL->stack.top--; | 442 | S->top--; |
437 | } | 443 | } |
438 | break; | 444 | break; |
439 | } | 445 | } |
@@ -444,10 +450,10 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
444 | case SETMAP: | 450 | case SETMAP: |
445 | aux = *pc++; | 451 | aux = *pc++; |
446 | setmap: { | 452 | setmap: { |
447 | TObject *arr = LL->stack.top-(2*aux)-3; | 453 | TObject *arr = S->top-(2*aux)-3; |
448 | do { | 454 | do { |
449 | *(luaH_set (avalue(arr), LL->stack.top-2)) = *(LL->stack.top-1); | 455 | *(luaH_set(avalue(arr), S->top-2)) = *(S->top-1); |
450 | LL->stack.top-=2; | 456 | S->top-=2; |
451 | } while (aux--); | 457 | } while (aux--); |
452 | break; | 458 | break; |
453 | } | 459 | } |
@@ -458,7 +464,7 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
458 | case POP0: case POP1: | 464 | case POP0: case POP1: |
459 | aux -= POP0; | 465 | aux -= POP0; |
460 | pop: | 466 | pop: |
461 | LL->stack.top -= (aux+1); | 467 | S->top -= (aux+1); |
462 | break; | 468 | break; |
463 | 469 | ||
464 | case ARGS: | 470 | case ARGS: |
@@ -480,17 +486,17 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
480 | aux = *pc++; | 486 | aux = *pc++; |
481 | createarray: | 487 | createarray: |
482 | luaC_checkGC(); | 488 | luaC_checkGC(); |
483 | avalue(LL->stack.top) = luaH_new(aux); | 489 | avalue(S->top) = luaH_new(aux); |
484 | ttype(LL->stack.top) = LUA_T_ARRAY; | 490 | ttype(S->top) = LUA_T_ARRAY; |
485 | LL->stack.top++; | 491 | S->top++; |
486 | break; | 492 | break; |
487 | 493 | ||
488 | case EQOP: case NEQOP: { | 494 | case EQOP: case NEQOP: { |
489 | int res = luaO_equalObj(LL->stack.top-2, LL->stack.top-1); | 495 | int res = luaO_equalObj(S->top-2, S->top-1); |
490 | LL->stack.top--; | 496 | S->top--; |
491 | if (aux == NEQOP) res = !res; | 497 | if (aux == NEQOP) res = !res; |
492 | ttype(LL->stack.top-1) = res ? LUA_T_NUMBER : LUA_T_NIL; | 498 | ttype(S->top-1) = res ? LUA_T_NUMBER : LUA_T_NIL; |
493 | nvalue(LL->stack.top-1) = 1; | 499 | nvalue(S->top-1) = 1; |
494 | break; | 500 | break; |
495 | } | 501 | } |
496 | 502 | ||
@@ -511,49 +517,49 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
511 | break; | 517 | break; |
512 | 518 | ||
513 | case ADDOP: { | 519 | case ADDOP: { |
514 | TObject *l = LL->stack.top-2; | 520 | TObject *l = S->top-2; |
515 | TObject *r = LL->stack.top-1; | 521 | TObject *r = S->top-1; |
516 | if (tonumber(r) || tonumber(l)) | 522 | if (tonumber(r) || tonumber(l)) |
517 | call_arith(IM_ADD); | 523 | call_arith(IM_ADD); |
518 | else { | 524 | else { |
519 | nvalue(l) += nvalue(r); | 525 | nvalue(l) += nvalue(r); |
520 | --LL->stack.top; | 526 | --S->top; |
521 | } | 527 | } |
522 | break; | 528 | break; |
523 | } | 529 | } |
524 | 530 | ||
525 | case SUBOP: { | 531 | case SUBOP: { |
526 | TObject *l = LL->stack.top-2; | 532 | TObject *l = S->top-2; |
527 | TObject *r = LL->stack.top-1; | 533 | TObject *r = S->top-1; |
528 | if (tonumber(r) || tonumber(l)) | 534 | if (tonumber(r) || tonumber(l)) |
529 | call_arith(IM_SUB); | 535 | call_arith(IM_SUB); |
530 | else { | 536 | else { |
531 | nvalue(l) -= nvalue(r); | 537 | nvalue(l) -= nvalue(r); |
532 | --LL->stack.top; | 538 | --S->top; |
533 | } | 539 | } |
534 | break; | 540 | break; |
535 | } | 541 | } |
536 | 542 | ||
537 | case MULTOP: { | 543 | case MULTOP: { |
538 | TObject *l = LL->stack.top-2; | 544 | TObject *l = S->top-2; |
539 | TObject *r = LL->stack.top-1; | 545 | TObject *r = S->top-1; |
540 | if (tonumber(r) || tonumber(l)) | 546 | if (tonumber(r) || tonumber(l)) |
541 | call_arith(IM_MUL); | 547 | call_arith(IM_MUL); |
542 | else { | 548 | else { |
543 | nvalue(l) *= nvalue(r); | 549 | nvalue(l) *= nvalue(r); |
544 | --LL->stack.top; | 550 | --S->top; |
545 | } | 551 | } |
546 | break; | 552 | break; |
547 | } | 553 | } |
548 | 554 | ||
549 | case DIVOP: { | 555 | case DIVOP: { |
550 | TObject *l = LL->stack.top-2; | 556 | TObject *l = S->top-2; |
551 | TObject *r = LL->stack.top-1; | 557 | TObject *r = S->top-1; |
552 | if (tonumber(r) || tonumber(l)) | 558 | if (tonumber(r) || tonumber(l)) |
553 | call_arith(IM_DIV); | 559 | call_arith(IM_DIV); |
554 | else { | 560 | else { |
555 | nvalue(l) /= nvalue(r); | 561 | nvalue(l) /= nvalue(r); |
556 | --LL->stack.top; | 562 | --S->top; |
557 | } | 563 | } |
558 | break; | 564 | break; |
559 | } | 565 | } |
@@ -563,32 +569,32 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
563 | break; | 569 | break; |
564 | 570 | ||
565 | case CONCOP: { | 571 | case CONCOP: { |
566 | TObject *l = LL->stack.top-2; | 572 | TObject *l = S->top-2; |
567 | TObject *r = LL->stack.top-1; | 573 | TObject *r = S->top-1; |
568 | if (tostring(l) || tostring(r)) | 574 | if (tostring(l) || tostring(r)) |
569 | call_binTM(IM_CONCAT, "unexpected type for concatenation"); | 575 | call_binTM(IM_CONCAT, "unexpected type for concatenation"); |
570 | else { | 576 | else { |
571 | tsvalue(l) = strconc(svalue(l), svalue(r)); | 577 | tsvalue(l) = strconc(svalue(l), svalue(r)); |
572 | --LL->stack.top; | 578 | --S->top; |
573 | } | 579 | } |
574 | luaC_checkGC(); | 580 | luaC_checkGC(); |
575 | break; | 581 | break; |
576 | } | 582 | } |
577 | 583 | ||
578 | case MINUSOP: | 584 | case MINUSOP: |
579 | if (tonumber(LL->stack.top-1)) { | 585 | if (tonumber(S->top-1)) { |
580 | ttype(LL->stack.top) = LUA_T_NIL; | 586 | ttype(S->top) = LUA_T_NIL; |
581 | LL->stack.top++; | 587 | S->top++; |
582 | call_arith(IM_UNM); | 588 | call_arith(IM_UNM); |
583 | } | 589 | } |
584 | else | 590 | else |
585 | nvalue(LL->stack.top-1) = - nvalue(LL->stack.top-1); | 591 | nvalue(S->top-1) = - nvalue(S->top-1); |
586 | break; | 592 | break; |
587 | 593 | ||
588 | case NOTOP: | 594 | case NOTOP: |
589 | ttype(LL->stack.top-1) = | 595 | ttype(S->top-1) = |
590 | (ttype(LL->stack.top-1) == LUA_T_NIL) ? LUA_T_NUMBER : LUA_T_NIL; | 596 | (ttype(S->top-1) == LUA_T_NIL) ? LUA_T_NUMBER : LUA_T_NIL; |
591 | nvalue(LL->stack.top-1) = 1; | 597 | nvalue(S->top-1) = 1; |
592 | break; | 598 | break; |
593 | 599 | ||
594 | case ONTJMPW: | 600 | case ONTJMPW: |
@@ -597,8 +603,8 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
597 | case ONTJMP: | 603 | case ONTJMP: |
598 | aux = *pc++; | 604 | aux = *pc++; |
599 | ontjmp: | 605 | ontjmp: |
600 | if (ttype(LL->stack.top-1) != LUA_T_NIL) pc += aux; | 606 | if (ttype(S->top-1) != LUA_T_NIL) pc += aux; |
601 | else LL->stack.top--; | 607 | else S->top--; |
602 | break; | 608 | break; |
603 | 609 | ||
604 | case ONFJMPW: | 610 | case ONFJMPW: |
@@ -607,8 +613,8 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
607 | case ONFJMP: | 613 | case ONFJMP: |
608 | aux = *pc++; | 614 | aux = *pc++; |
609 | onfjmp: | 615 | onfjmp: |
610 | if (ttype(LL->stack.top-1) == LUA_T_NIL) pc += aux; | 616 | if (ttype(S->top-1) == LUA_T_NIL) pc += aux; |
611 | else LL->stack.top--; | 617 | else S->top--; |
612 | break; | 618 | break; |
613 | 619 | ||
614 | case JMPW: | 620 | case JMPW: |
@@ -626,7 +632,7 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
626 | case IFFJMP: | 632 | case IFFJMP: |
627 | aux = *pc++; | 633 | aux = *pc++; |
628 | iffjmp: | 634 | iffjmp: |
629 | if (ttype(--LL->stack.top) == LUA_T_NIL) pc += aux; | 635 | if (ttype(--S->top) == LUA_T_NIL) pc += aux; |
630 | break; | 636 | break; |
631 | 637 | ||
632 | case IFTUPJMPW: | 638 | case IFTUPJMPW: |
@@ -635,7 +641,7 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
635 | case IFTUPJMP: | 641 | case IFTUPJMP: |
636 | aux = *pc++; | 642 | aux = *pc++; |
637 | iftupjmp: | 643 | iftupjmp: |
638 | if (ttype(--LL->stack.top) != LUA_T_NIL) pc -= aux; | 644 | if (ttype(--S->top) != LUA_T_NIL) pc -= aux; |
639 | break; | 645 | break; |
640 | 646 | ||
641 | case IFFUPJMPW: | 647 | case IFFUPJMPW: |
@@ -644,7 +650,7 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
644 | case IFFUPJMP: | 650 | case IFFUPJMP: |
645 | aux = *pc++; | 651 | aux = *pc++; |
646 | iffupjmp: | 652 | iffupjmp: |
647 | if (ttype(--LL->stack.top) == LUA_T_NIL) pc -= aux; | 653 | if (ttype(--S->top) == LUA_T_NIL) pc -= aux; |
648 | break; | 654 | break; |
649 | 655 | ||
650 | case CLOSURE: | 656 | case CLOSURE: |
@@ -663,13 +669,13 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
663 | case CALLFUNC0: case CALLFUNC1: | 669 | case CALLFUNC0: case CALLFUNC1: |
664 | aux -= CALLFUNC0; | 670 | aux -= CALLFUNC0; |
665 | callfunc: { | 671 | callfunc: { |
666 | StkId newBase = (LL->stack.top-LL->stack.stack)-(*pc++); | 672 | StkId newBase = (S->top-S->stack)-(*pc++); |
667 | luaD_call(newBase, aux); | 673 | luaD_call(newBase, aux); |
668 | break; | 674 | break; |
669 | } | 675 | } |
670 | 676 | ||
671 | case ENDCODE: | 677 | case ENDCODE: |
672 | LL->stack.top = LL->stack.stack + base; | 678 | S->top = S->stack + base; |
673 | /* goes through */ | 679 | /* goes through */ |
674 | case RETCODE: | 680 | case RETCODE: |
675 | if (lua_callhook) | 681 | if (lua_callhook) |
@@ -682,13 +688,13 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
682 | case SETLINE: | 688 | case SETLINE: |
683 | aux = *pc++; | 689 | aux = *pc++; |
684 | setline: | 690 | setline: |
685 | if ((LL->stack.stack+base-1)->ttype != LUA_T_LINE) { | 691 | if ((S->stack+base-1)->ttype != LUA_T_LINE) { |
686 | /* open space for LINE value */ | 692 | /* open space for LINE value */ |
687 | luaD_openstack((LL->stack.top-LL->stack.stack)-base); | 693 | luaD_openstack((S->top-S->stack)-base); |
688 | base++; | 694 | base++; |
689 | (LL->stack.stack+base-1)->ttype = LUA_T_LINE; | 695 | (S->stack+base-1)->ttype = LUA_T_LINE; |
690 | } | 696 | } |
691 | (LL->stack.stack+base-1)->value.i = aux; | 697 | (S->stack+base-1)->value.i = aux; |
692 | if (lua_linehook) | 698 | if (lua_linehook) |
693 | luaD_lineHook(aux); | 699 | luaD_lineHook(aux); |
694 | break; | 700 | break; |