summaryrefslogtreecommitdiff
path: root/lvm.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2002-11-07 13:37:10 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2002-11-07 13:37:10 -0200
commitdff9be4224a1cd0f338b544b9e01d42f0f4e537f (patch)
tree1dc8846da882dd37d9f420c10ea545ce92fb3b8a /lvm.c
parent118347d8c3b83ea0291918e81c5367937316fabb (diff)
downloadlua-dff9be4224a1cd0f338b544b9e01d42f0f4e537f.tar.gz
lua-dff9be4224a1cd0f338b544b9e01d42f0f4e537f.tar.bz2
lua-dff9be4224a1cd0f338b544b9e01d42f0f4e537f.zip
new macros to distinguish different types of object moves (for future GC
evolution).
Diffstat (limited to 'lvm.c')
-rw-r--r--lvm.c68
1 files changed, 34 insertions, 34 deletions
diff --git a/lvm.c b/lvm.c
index 86e1596b..93c95e43 100644
--- a/lvm.c
+++ b/lvm.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lvm.c,v 1.258 2002/10/25 20:05:28 roberto Exp roberto $ 2** $Id: lvm.c,v 1.259 2002/11/06 19:08:00 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*/
@@ -98,9 +98,9 @@ static void traceexec (lua_State *L) {
98 98
99static void callTMres (lua_State *L, const TObject *f, 99static void callTMres (lua_State *L, const TObject *f,
100 const TObject *p1, const TObject *p2) { 100 const TObject *p1, const TObject *p2) {
101 setobj(L->top, f); /* push function */ 101 setobj2s(L->top, f); /* push function */
102 setobj(L->top+1, p1); /* 1st argument */ 102 setobj2s(L->top+1, p1); /* 1st argument */
103 setobj(L->top+2, p2); /* 2nd argument */ 103 setobj2s(L->top+2, p2); /* 2nd argument */
104 luaD_checkstack(L, 3); /* cannot check before (could invalidate p1, p2) */ 104 luaD_checkstack(L, 3); /* cannot check before (could invalidate p1, p2) */
105 L->top += 3; 105 L->top += 3;
106 luaD_call(L, L->top - 3, 1); 106 luaD_call(L, L->top - 3, 1);
@@ -111,10 +111,10 @@ static void callTMres (lua_State *L, const TObject *f,
111 111
112static void callTM (lua_State *L, const TObject *f, 112static void callTM (lua_State *L, const TObject *f,
113 const TObject *p1, const TObject *p2, const TObject *p3) { 113 const TObject *p1, const TObject *p2, const TObject *p3) {
114 setobj(L->top, f); /* push function */ 114 setobj2s(L->top, f); /* push function */
115 setobj(L->top+1, p1); /* 1st argument */ 115 setobj2s(L->top+1, p1); /* 1st argument */
116 setobj(L->top+2, p2); /* 2nd argument */ 116 setobj2s(L->top+2, p2); /* 2nd argument */
117 setobj(L->top+3, p3); /* 3th argument */ 117 setobj2s(L->top+3, p3); /* 3th argument */
118 luaD_checkstack(L, 4); /* cannot check before (could invalidate p1...p3) */ 118 luaD_checkstack(L, 4); /* cannot check before (could invalidate p1...p3) */
119 L->top += 4; 119 L->top += 4;
120 luaD_call(L, L->top - 4, 0); 120 luaD_call(L, L->top - 4, 0);
@@ -176,7 +176,7 @@ void luaV_settable (lua_State *L, const TObject *t, TObject *key, StkId val) {
176 TObject *oldval = luaH_set(L, h, key); /* do a primitive set */ 176 TObject *oldval = luaH_set(L, h, key); /* do a primitive set */
177 if (!ttisnil(oldval) || /* result is no nil? */ 177 if (!ttisnil(oldval) || /* result is no nil? */
178 (tm = fasttm(L, h->metatable, TM_NEWINDEX)) == NULL) { /* or no TM? */ 178 (tm = fasttm(L, h->metatable, TM_NEWINDEX)) == NULL) { /* or no TM? */
179 setobj(oldval, val); 179 setobj2t(oldval, val);
180 return; 180 return;
181 } 181 }
182 /* else will try the tag method */ 182 /* else will try the tag method */
@@ -194,7 +194,7 @@ void luaV_settable (lua_State *L, const TObject *t, TObject *key, StkId val) {
194 194
195 195
196static int call_binTM (lua_State *L, const TObject *p1, const TObject *p2, 196static int call_binTM (lua_State *L, const TObject *p1, const TObject *p2,
197 TObject *res, TMS event) { 197 StkId res, TMS event) {
198 ptrdiff_t result = savestack(L, res); 198 ptrdiff_t result = savestack(L, res);
199 const TObject *tm = luaT_gettmbyobj(L, p1, event); /* try first operand */ 199 const TObject *tm = luaT_gettmbyobj(L, p1, event); /* try first operand */
200 if (ttisnil(tm)) 200 if (ttisnil(tm))
@@ -202,7 +202,7 @@ static int call_binTM (lua_State *L, const TObject *p1, const TObject *p2,
202 if (!ttisfunction(tm)) return 0; 202 if (!ttisfunction(tm)) return 0;
203 callTMres(L, tm, p1, p2); 203 callTMres(L, tm, p1, p2);
204 res = restorestack(L, result); /* previous call may change stack */ 204 res = restorestack(L, result); /* previous call may change stack */
205 setobj(res, L->top); 205 setobjs2s(res, L->top);
206 return 1; 206 return 1;
207} 207}
208 208
@@ -311,7 +311,7 @@ void luaV_concat (lua_State *L, int total, int last) {
311 memcpy(buffer+tl, svalue(top-i), l); 311 memcpy(buffer+tl, svalue(top-i), l);
312 tl += l; 312 tl += l;
313 } 313 }
314 setsvalue(top-n, luaS_newlstr(L, buffer, tl)); 314 setsvalue2s(top-n, luaS_newlstr(L, buffer, tl));
315 } 315 }
316 total -= n-1; /* got `n' strings to create 1 new */ 316 total -= n-1; /* got `n' strings to create 1 new */
317 last -= n-1; 317 last -= n-1;
@@ -338,7 +338,7 @@ static void Arith (lua_State *L, StkId ra,
338 luaG_runerror(L, "`pow' (for `^' operator) is not a function"); 338 luaG_runerror(L, "`pow' (for `^' operator) is not a function");
339 callTMres(L, f, b, c); 339 callTMres(L, f, b, c);
340 ra = restorestack(L, res); /* previous call may change stack */ 340 ra = restorestack(L, res); /* previous call may change stack */
341 setobj(ra, L->top); 341 setobjs2s(ra, L->top);
342 break; 342 break;
343 } 343 }
344 default: lua_assert(0); break; 344 default: lua_assert(0); break;
@@ -399,11 +399,11 @@ StkId luaV_execute (lua_State *L) {
399 GET_OPCODE(i) == OP_RETURN || GET_OPCODE(i) == OP_SETLISTO); 399 GET_OPCODE(i) == OP_RETURN || GET_OPCODE(i) == OP_SETLISTO);
400 switch (GET_OPCODE(i)) { 400 switch (GET_OPCODE(i)) {
401 case OP_MOVE: { 401 case OP_MOVE: {
402 setobj(ra, RB(i)); 402 setobjs2s(ra, RB(i));
403 break; 403 break;
404 } 404 }
405 case OP_LOADK: { 405 case OP_LOADK: {
406 setobj(ra, KBx(i)); 406 setobj2s(ra, KBx(i));
407 break; 407 break;
408 } 408 }
409 case OP_LOADBOOL: { 409 case OP_LOADBOOL: {
@@ -420,7 +420,7 @@ StkId luaV_execute (lua_State *L) {
420 } 420 }
421 case OP_GETUPVAL: { 421 case OP_GETUPVAL: {
422 int b = GETARG_B(i); 422 int b = GETARG_B(i);
423 setobj(ra, cl->upvals[b]->v); 423 setobj2s(ra, cl->upvals[b]->v);
424 break; 424 break;
425 } 425 }
426 case OP_GETGLOBAL: { 426 case OP_GETGLOBAL: {
@@ -428,9 +428,9 @@ StkId luaV_execute (lua_State *L) {
428 const TObject *v; 428 const TObject *v;
429 lua_assert(ttisstring(rb) && ttistable(&cl->g)); 429 lua_assert(ttisstring(rb) && ttistable(&cl->g));
430 v = luaH_getstr(hvalue(&cl->g), tsvalue(rb)); 430 v = luaH_getstr(hvalue(&cl->g), tsvalue(rb));
431 if (!ttisnil(v)) { setobj(ra, v); } 431 if (!ttisnil(v)) { setobj2s(ra, v); }
432 else 432 else
433 setobj(RA(i), luaV_index(L, &cl->g, rb, 0)); 433 setobj2s(RA(i), luaV_index(L, &cl->g, rb, 0));
434 break; 434 break;
435 } 435 }
436 case OP_GETTABLE: { 436 case OP_GETTABLE: {
@@ -438,12 +438,12 @@ StkId luaV_execute (lua_State *L) {
438 TObject *rc = RKC(i); 438 TObject *rc = RKC(i);
439 if (ttistable(rb)) { 439 if (ttistable(rb)) {
440 const TObject *v = luaH_get(hvalue(rb), rc); 440 const TObject *v = luaH_get(hvalue(rb), rc);
441 if (!ttisnil(v)) { setobj(ra, v); } 441 if (!ttisnil(v)) { setobj2s(ra, v); }
442 else 442 else
443 setobj(RA(i), luaV_index(L, rb, rc, 0)); 443 setobj2s(RA(i), luaV_index(L, rb, rc, 0));
444 } 444 }
445 else 445 else
446 setobj(RA(i), luaV_getnotable(L, rb, rc, 0)); 446 setobj2s(RA(i), luaV_getnotable(L, rb, rc, 0));
447 break; 447 break;
448 } 448 }
449 case OP_SETGLOBAL: { 449 case OP_SETGLOBAL: {
@@ -471,15 +471,15 @@ StkId luaV_execute (lua_State *L) {
471 StkId rb = RB(i); 471 StkId rb = RB(i);
472 TObject *rc = RKC(i); 472 TObject *rc = RKC(i);
473 runtime_check(L, ttisstring(rc)); 473 runtime_check(L, ttisstring(rc));
474 setobj(ra+1, rb); 474 setobjs2s(ra+1, rb);
475 if (ttistable(rb)) { 475 if (ttistable(rb)) {
476 const TObject *v = luaH_getstr(hvalue(rb), tsvalue(rc)); 476 const TObject *v = luaH_getstr(hvalue(rb), tsvalue(rc));
477 if (!ttisnil(v)) { setobj(ra, v); } 477 if (!ttisnil(v)) { setobj2s(ra, v); }
478 else 478 else
479 setobj(RA(i), luaV_index(L, rb, rc, 0)); 479 setobj2s(RA(i), luaV_index(L, rb, rc, 0));
480 } 480 }
481 else 481 else
482 setobj(RA(i), luaV_getnotable(L, rb, rc, 0)); 482 setobj2s(RA(i), luaV_getnotable(L, rb, rc, 0));
483 break; 483 break;
484 } 484 }
485 case OP_ADD: { 485 case OP_ADD: {
@@ -548,7 +548,7 @@ StkId luaV_execute (lua_State *L) {
548 int b = GETARG_B(i); 548 int b = GETARG_B(i);
549 int c = GETARG_C(i); 549 int c = GETARG_C(i);
550 luaV_concat(L, c-b+1, c); /* may change `base' (and `ra') */ 550 luaV_concat(L, c-b+1, c); /* may change `base' (and `ra') */
551 setobj(RA(i), base+b); 551 setobjs2s(RA(i), base+b);
552 luaV_checkGC(L, base+c+1); 552 luaV_checkGC(L, base+c+1);
553 break; 553 break;
554 } 554 }
@@ -575,7 +575,7 @@ StkId luaV_execute (lua_State *L) {
575 TObject *rb = RB(i); 575 TObject *rb = RB(i);
576 if (l_isfalse(rb) == GETARG_C(i)) pc++; 576 if (l_isfalse(rb) == GETARG_C(i)) pc++;
577 else { 577 else {
578 setobj(ra, rb); 578 setobjs2s(ra, rb);
579 dojump(pc, GETARG_sBx(*pc) + 1); 579 dojump(pc, GETARG_sBx(*pc) + 1);
580 } 580 }
581 break; 581 break;
@@ -609,7 +609,7 @@ StkId luaV_execute (lua_State *L) {
609 StkId ra1 = RA(i); /* `luaD_precall' may change the stack */ 609 StkId ra1 = RA(i); /* `luaD_precall' may change the stack */
610 if (L->openupval) luaF_close(L, base); 610 if (L->openupval) luaF_close(L, base);
611 for (aux = 0; ra1+aux < L->top; aux++) /* move frame down */ 611 for (aux = 0; ra1+aux < L->top; aux++) /* move frame down */
612 setobj(base+aux-1, ra1+aux); 612 setobjs2s(base+aux-1, ra1+aux);
613 (L->ci - 1)->top = L->top = base+aux; /* correct top */ 613 (L->ci - 1)->top = L->top = base+aux; /* correct top */
614 lua_assert(L->ci->state & CI_SAVEDPC); 614 lua_assert(L->ci->state & CI_SAVEDPC);
615 (L->ci - 1)->u.l.savedpc = L->ci->u.l.savedpc; 615 (L->ci - 1)->u.l.savedpc = L->ci->u.l.savedpc;
@@ -662,9 +662,9 @@ StkId luaV_execute (lua_State *L) {
662 break; 662 break;
663 } 663 }
664 case OP_TFORLOOP: { 664 case OP_TFORLOOP: {
665 setobj(ra+4, ra+2); 665 setobjs2s(ra+4, ra+2);
666 setobj(ra+3, ra+1); 666 setobjs2s(ra+3, ra+1);
667 setobj(ra+2, ra); 667 setobjs2s(ra+2, ra);
668 L->top = ra+5; 668 L->top = ra+5;
669 luaD_call(L, ra+2, GETARG_C(i) + 1); 669 luaD_call(L, ra+2, GETARG_C(i) + 1);
670 L->top = L->ci->top; 670 L->top = L->ci->top;
@@ -674,8 +674,8 @@ StkId luaV_execute (lua_State *L) {
674 } 674 }
675 case OP_TFORPREP: { /* for compatibility only */ 675 case OP_TFORPREP: { /* for compatibility only */
676 if (ttistable(ra)) { 676 if (ttistable(ra)) {
677 setobj(ra+1, ra); 677 setobjs2s(ra+1, ra);
678 setobj(ra, luaH_getstr(hvalue(gt(L)), luaS_new(L, "next"))); 678 setobj2s(ra, luaH_getstr(hvalue(gt(L)), luaS_new(L, "next")));
679 } 679 }
680 dojump(pc, GETARG_sBx(i)); 680 dojump(pc, GETARG_sBx(i));
681 break; 681 break;
@@ -696,7 +696,7 @@ StkId luaV_execute (lua_State *L) {
696 } 696 }
697 bc &= ~(LFIELDS_PER_FLUSH-1); /* bc = bc - bc%FPF */ 697 bc &= ~(LFIELDS_PER_FLUSH-1); /* bc = bc - bc%FPF */
698 for (; n > 0; n--) 698 for (; n > 0; n--)
699 setobj(luaH_setnum(L, h, bc+n), ra+n); 699 setobj2t(luaH_setnum(L, h, bc+n), ra+n);
700 break; 700 break;
701 } 701 }
702 case OP_CLOSE: { 702 case OP_CLOSE: {