diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1998-03-25 15:52:29 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1998-03-25 15:52:29 -0300 |
commit | 2a2b64d6ac2ea7839dac41cc84be1c7a5a18bee7 (patch) | |
tree | bbacd86c6e92e3614dcd48b54846de5f4252f137 | |
parent | daa937c043bb0ddb5f4bfe676f8ff13825a99651 (diff) | |
download | lua-2a2b64d6ac2ea7839dac41cc84be1c7a5a18bee7.tar.gz lua-2a2b64d6ac2ea7839dac41cc84be1c7a5a18bee7.tar.bz2 lua-2a2b64d6ac2ea7839dac41cc84be1c7a5a18bee7.zip |
opcode "CLOSURE" gets the prototipe (instead of a previous pushconstant)
-rw-r--r-- | lopcodes.h | 7 | ||||
-rw-r--r-- | lua.stx | 6 | ||||
-rw-r--r-- | lvm.c | 13 |
3 files changed, 13 insertions, 13 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lopcodes.h,v 1.16 1998/03/10 17:15:05 roberto Exp $ | 2 | ** $Id: lopcodes.h,v 1.16 1998/03/11 13:59:50 roberto Exp roberto $ |
3 | ** Opcodes for Lua virtual machine | 3 | ** Opcodes for Lua virtual machine |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -154,9 +154,8 @@ IFTUPJMPW,/* w x - (x!=nil)? PC-=w */ | |||
154 | IFFUPJMP,/* b x - (x==nil)? PC-=b */ | 154 | IFFUPJMP,/* b x - (x==nil)? PC-=b */ |
155 | IFFUPJMPW,/* w x - (x==nil)? PC-=w */ | 155 | IFFUPJMPW,/* w x - (x==nil)? PC-=w */ |
156 | 156 | ||
157 | CLOSURE,/* b proto v_b...v_1 c(proto) */ | 157 | CLOSURE,/* b c v_c...v_1 closure(CNST[b], v_c...v_1) */ |
158 | CLOSURE0,/* - proto c(proto) */ | 158 | CLOSUREW,/* w b v_b...v_1 closure(CNST[w], v_b...v_1) */ |
159 | CLOSURE1,/* - proto v_1 c(proto) */ | ||
160 | 159 | ||
161 | CALLFUNC,/* b c v_c...v_1 f r_b...r_1 f(v1,...,v_c) */ | 160 | CALLFUNC,/* b c v_c...v_1 f r_b...r_1 f(v1,...,v_c) */ |
162 | CALLFUNC0,/* b v_b...v_1 f - f(v1,...,v_b) */ | 161 | CALLFUNC0,/* b v_b...v_1 f - f(v1,...,v_b) */ |
@@ -1,6 +1,6 @@ | |||
1 | %{ | 1 | %{ |
2 | /* | 2 | /* |
3 | ** $Id: lua.stx,v 1.34 1998/02/11 20:56:46 roberto Exp roberto $ | 3 | ** $Id: lua.stx,v 1.35 1998/03/09 21:49:52 roberto Exp roberto $ |
4 | ** Syntax analizer and code generator | 4 | ** Syntax analizer and code generator |
5 | ** See Copyright Notice in lua.h | 5 | ** See Copyright Notice in lua.h |
6 | */ | 6 | */ |
@@ -554,8 +554,8 @@ static void func_onstack (TProtoFunc *f) | |||
554 | else { | 554 | else { |
555 | for (i=0; i<nupvalues; i++) | 555 | for (i=0; i<nupvalues; i++) |
556 | lua_pushvar((L->currState+1)->upvalues[i]); | 556 | lua_pushvar((L->currState+1)->upvalues[i]); |
557 | code_constant(c); | 557 | code_oparg(CLOSURE, 0, c, -nupvalues+1); |
558 | code_oparg(CLOSURE, 2, nupvalues, -nupvalues); | 558 | code_byte(nupvalues); |
559 | } | 559 | } |
560 | } | 560 | } |
561 | 561 | ||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lvm.c,v 1.25 1998/03/09 21:49:52 roberto Exp roberto $ | 2 | ** $Id: lvm.c,v 1.26 1998/03/11 13:59:50 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 | */ |
@@ -680,13 +680,14 @@ StkId luaV_execute (Closure *cl, TProtoFunc *tf, StkId base) | |||
680 | if (ttype(--S->top) == LUA_T_NIL) pc -= aux; | 680 | if (ttype(--S->top) == LUA_T_NIL) pc -= aux; |
681 | break; | 681 | break; |
682 | 682 | ||
683 | case CLOSURE: | 683 | case CLOSUREW: |
684 | aux = *pc++; goto closure; | 684 | aux = next_word(pc); goto closure; |
685 | 685 | ||
686 | case CLOSURE0: case CLOSURE1: | 686 | case CLOSURE: |
687 | aux -= CLOSURE0; | 687 | aux = *pc++; |
688 | closure: | 688 | closure: |
689 | luaV_closure(aux); | 689 | *S->top++ = consts[aux]; |
690 | luaV_closure(*pc++); | ||
690 | luaC_checkGC(); | 691 | luaC_checkGC(); |
691 | break; | 692 | break; |
692 | 693 | ||