aboutsummaryrefslogtreecommitdiff
path: root/lvm.c
diff options
context:
space:
mode:
Diffstat (limited to 'lvm.c')
-rw-r--r--lvm.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/lvm.c b/lvm.c
index a88f784d..29c27f0f 100644
--- a/lvm.c
+++ b/lvm.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lvm.c,v 1.289 2003/07/16 20:49:02 roberto Exp roberto $ 2** $Id: lvm.c,v 1.290 2003/10/27 19:14:31 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*/
@@ -151,7 +151,8 @@ void luaV_settable (lua_State *L, const TObject *t, TObject *key, StkId val) {
151 TObject *oldval = luaH_set(L, h, key); /* do a primitive set */ 151 TObject *oldval = luaH_set(L, h, key); /* do a primitive set */
152 if (!ttisnil(oldval) || /* result is no nil? */ 152 if (!ttisnil(oldval) || /* result is no nil? */
153 (tm = fasttm(L, h->metatable, TM_NEWINDEX)) == NULL) { /* or no TM? */ 153 (tm = fasttm(L, h->metatable, TM_NEWINDEX)) == NULL) { /* or no TM? */
154 setobj2t(oldval, val); /* write barrier */ 154 setobj2t(oldval, val);
155 luaC_barrier(L, h, val);
155 return; 156 return;
156 } 157 }
157 /* else will try the tag method */ 158 /* else will try the tag method */
@@ -454,8 +455,9 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
454 break; 455 break;
455 } 456 }
456 case OP_SETUPVAL: { 457 case OP_SETUPVAL: {
457 int b = GETARG_B(i); 458 UpVal *uv = cl->upvals[GETARG_B(i)];
458 setobj(cl->upvals[b]->v, ra); /* write barrier */ 459 setobj(uv->v, ra);
460 luaC_barrier(L, uv, ra);
459 break; 461 break;
460 } 462 }
461 case OP_SETTABLE: { 463 case OP_SETTABLE: {
@@ -713,8 +715,11 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
713 L->top = L->ci->top; 715 L->top = L->ci->top;
714 } 716 }
715 bc &= ~(LFIELDS_PER_FLUSH-1); /* bc = bc - bc%FPF */ 717 bc &= ~(LFIELDS_PER_FLUSH-1); /* bc = bc - bc%FPF */
716 for (; n > 0; n--) 718 for (; n > 0; n--) {
717 setobj2t(luaH_setnum(L, h, bc+n), ra+n); /* write barrier */ 719 TObject *val = ra+n;
720 setobj2t(luaH_setnum(L, h, bc+n), val);
721 luaC_barrier(L, h, val);
722 }
718 break; 723 break;
719 } 724 }
720 case OP_CLOSE: { 725 case OP_CLOSE: {