aboutsummaryrefslogtreecommitdiff
path: root/lvm.c
diff options
context:
space:
mode:
Diffstat (limited to 'lvm.c')
-rw-r--r--lvm.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/lvm.c b/lvm.c
index 44416b0a..ace249ed 100644
--- a/lvm.c
+++ b/lvm.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lvm.c,v 1.29 1998/05/31 22:18:24 roberto Exp roberto $ 2** $Id: lvm.c,v 1.30 1998/06/11 18:21:37 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*/
@@ -112,7 +112,7 @@ void luaV_gettable (void)
112 im = luaT_getim(tg, IM_GETTABLE); 112 im = luaT_getim(tg, IM_GETTABLE);
113 if (ttype(im) == LUA_T_NIL) { /* and does not have a "gettable" method */ 113 if (ttype(im) == LUA_T_NIL) { /* and does not have a "gettable" method */
114 TObject *h = luaH_get(avalue(S->top-2), S->top-1); 114 TObject *h = luaH_get(avalue(S->top-2), S->top-1);
115 if (h != NULL && ttype(h) != LUA_T_NIL) { 115 if (ttype(h) != LUA_T_NIL) {
116 --S->top; 116 --S->top;
117 *(S->top-1) = *h; 117 *(S->top-1) = *h;
118 } 118 }
@@ -242,8 +242,8 @@ static int strcomp (char *l, long ll, char *r, long lr)
242 } 242 }
243} 243}
244 244
245static void comparison (lua_Type ttype_less, lua_Type ttype_equal, 245void luaV_comparison (lua_Type ttype_less, lua_Type ttype_equal,
246 lua_Type ttype_great, IMS op) 246 lua_Type ttype_great, IMS op)
247{ 247{
248 struct Stack *S = &L->stack; 248 struct Stack *S = &L->stack;
249 TObject *l = S->top-2; 249 TObject *l = S->top-2;
@@ -269,22 +269,19 @@ void luaV_pack (StkId firstel, int nvararg, TObject *tab)
269{ 269{
270 TObject *firstelem = L->stack.stack+firstel; 270 TObject *firstelem = L->stack.stack+firstel;
271 int i; 271 int i;
272 Hash *htab;
272 if (nvararg < 0) nvararg = 0; 273 if (nvararg < 0) nvararg = 0;
273 avalue(tab) = luaH_new(nvararg+1); /* +1 for field 'n' */ 274 htab = avalue(tab) = luaH_new(nvararg+1); /* +1 for field 'n' */
274 ttype(tab) = LUA_T_ARRAY; 275 ttype(tab) = LUA_T_ARRAY;
275 for (i=0; i<nvararg; i++) { 276 for (i=0; i<nvararg; i++)
276 TObject index; 277 luaH_setint(htab, i+1, firstelem+i);
277 ttype(&index) = LUA_T_NUMBER;
278 nvalue(&index) = i+1;
279 *(luaH_set(avalue(tab), &index)) = *(firstelem+i);
280 }
281 /* store counter in field "n" */ { 278 /* store counter in field "n" */ {
282 TObject index, extra; 279 TObject index, extra;
283 ttype(&index) = LUA_T_STRING; 280 ttype(&index) = LUA_T_STRING;
284 tsvalue(&index) = luaS_new("n"); 281 tsvalue(&index) = luaS_new("n");
285 ttype(&extra) = LUA_T_NUMBER; 282 ttype(&extra) = LUA_T_NUMBER;
286 nvalue(&extra) = nvararg; 283 nvalue(&extra) = nvararg;
287 *(luaH_set(avalue(tab), &index)) = extra; 284 *(luaH_set(htab, &index)) = extra;
288 } 285 }
289} 286}
290 287
@@ -528,19 +525,19 @@ StkId luaV_execute (Closure *cl, TProtoFunc *tf, StkId base)
528 } 525 }
529 526
530 case LTOP: 527 case LTOP:
531 comparison(LUA_T_NUMBER, LUA_T_NIL, LUA_T_NIL, IM_LT); 528 luaV_comparison(LUA_T_NUMBER, LUA_T_NIL, LUA_T_NIL, IM_LT);
532 break; 529 break;
533 530
534 case LEOP: 531 case LEOP:
535 comparison(LUA_T_NUMBER, LUA_T_NUMBER, LUA_T_NIL, IM_LE); 532 luaV_comparison(LUA_T_NUMBER, LUA_T_NUMBER, LUA_T_NIL, IM_LE);
536 break; 533 break;
537 534
538 case GTOP: 535 case GTOP:
539 comparison(LUA_T_NIL, LUA_T_NIL, LUA_T_NUMBER, IM_GT); 536 luaV_comparison(LUA_T_NIL, LUA_T_NIL, LUA_T_NUMBER, IM_GT);
540 break; 537 break;
541 538
542 case GEOP: 539 case GEOP:
543 comparison(LUA_T_NIL, LUA_T_NUMBER, LUA_T_NUMBER, IM_GE); 540 luaV_comparison(LUA_T_NIL, LUA_T_NUMBER, LUA_T_NUMBER, IM_GE);
544 break; 541 break;
545 542
546 case ADDOP: { 543 case ADDOP: {