From 576cf2068dcf3f6482089fe16f9530074feb320b Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Wed, 14 Apr 2010 05:36:43 +0000 Subject: [PATCH] Special processing on for loop upvalues. --- src/jse/org/luaj/vm2/luajc/JavaBuilder.java | 17 +++++++++ src/jse/org/luaj/vm2/luajc/JavaGen.java | 22 ++++++++---- src/jse/org/luaj/vm2/luajc/Slots.java | 38 +++++++++++++++++++++ 3 files changed, 70 insertions(+), 7 deletions(-) diff --git a/src/jse/org/luaj/vm2/luajc/JavaBuilder.java b/src/jse/org/luaj/vm2/luajc/JavaBuilder.java index 600edcf8..3a96a854 100644 --- a/src/jse/org/luaj/vm2/luajc/JavaBuilder.java +++ b/src/jse/org/luaj/vm2/luajc/JavaBuilder.java @@ -338,6 +338,23 @@ public class JavaBuilder { append(new ASTORE(index)); } } + + public void createUpvalues(int pc, int firstslot, int numslots) { + for ( int i=0; i=0; ) { + int i = p.code[pc1]; + if ( Lua.GET_OPCODE(i) == Lua.OP_TFORLOOP ) { + int a = Lua.GETARG_A(i); + int c = Lua.GETARG_C(i); + for ( int pc0=pc1; --pc0>=0; ) { + i = p.code[pc0]; + int o = Lua.GET_OPCODE(i); + int sbx = Lua.GETARG_sBx(i); + if ( o == Lua.OP_JMP && (pc0 + 1 + sbx == pc1) ) { + for ( int j=0; j