aboutsummaryrefslogtreecommitdiff
path: root/lvm.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2004-10-04 16:01:53 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2004-10-04 16:01:53 -0300
commit5ee87acd6b920a6a122277cd817aea4cfd618671 (patch)
tree5e931c1db32c2be6378fde498ffcc5ee9dec0d6a /lvm.c
parent5d834bdf571ef3ee343b21fde2d49de1e4ea08b4 (diff)
downloadlua-5ee87acd6b920a6a122277cd817aea4cfd618671.tar.gz
lua-5ee87acd6b920a6a122277cd817aea4cfd618671.tar.bz2
lua-5ee87acd6b920a6a122277cd817aea4cfd618671.zip
small optimization for boolean constants + new format for SETLIST opcode
Diffstat (limited to 'lvm.c')
-rw-r--r--lvm.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/lvm.c b/lvm.c
index b8483512..65db54a8 100644
--- a/lvm.c
+++ b/lvm.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lvm.c,v 2.13 2004/08/12 14:19:51 roberto Exp roberto $ 2** $Id: lvm.c,v 2.14 2004/09/15 20:39:42 roberto Exp $
3** Lua virtual machine 3** Lua virtual machine
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -710,21 +710,19 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
710 dojump(L, pc, GETARG_sBx(i)); 710 dojump(L, pc, GETARG_sBx(i));
711 continue; 711 continue;
712 } 712 }
713 case OP_SETLIST: 713 case OP_SETLIST: {
714 case OP_SETLISTO: { 714 int n = GETARG_B(i);
715 int bc = GETARG_Bx(i); 715 int c = GETARG_C(i);
716 int n, last; 716 int last;
717 Table *h; 717 Table *h;
718 runtime_check(L, ttistable(ra)); 718 runtime_check(L, ttistable(ra));
719 h = hvalue(ra); 719 h = hvalue(ra);
720 if (GET_OPCODE(i) == OP_SETLIST) 720 if (n == 0) {
721 n = (bc&(LFIELDS_PER_FLUSH-1)) + 1;
722 else {
723 n = L->top - ra - 1; 721 n = L->top - ra - 1;
724 L->top = L->ci->top; 722 L->top = L->ci->top;
725 } 723 }
726 bc &= ~(LFIELDS_PER_FLUSH-1); /* bc = bc - bc%FPF */ 724 if (c == 0) c = cast(int, *pc++);
727 last = bc + n + LUA_FIRSTINDEX - 1; 725 last = ((c-1)*LFIELDS_PER_FLUSH) + n + LUA_FIRSTINDEX - 1;
728 if (last > h->sizearray) /* needs more space? */ 726 if (last > h->sizearray) /* needs more space? */
729 luaH_resize(L, h, last, h->lsizenode); /* pre-alloc it at once */ 727 luaH_resize(L, h, last, h->lsizenode); /* pre-alloc it at once */
730 for (; n > 0; n--) { 728 for (; n > 0; n--) {