diff --git a/src/jse/luajc.java b/src/jse/luajc.java index bd2bd4c1..d6fa9176 100644 --- a/src/jse/luajc.java +++ b/src/jse/luajc.java @@ -239,7 +239,9 @@ public class luajc { } } catch ( Throwable t ) { + System.err.println(" failed to load "+inf.srcfilename+": "+t ); t.printStackTrace( System.err ); + System.err.flush(); } } } diff --git a/src/jse/org/luaj/vm2/luajc/BasicBlock.java b/src/jse/org/luaj/vm2/luajc/BasicBlock.java index 92014402..8339039e 100644 --- a/src/jse/org/luaj/vm2/luajc/BasicBlock.java +++ b/src/jse/org/luaj/vm2/luajc/BasicBlock.java @@ -102,18 +102,17 @@ public class BasicBlock { } public static void visitBranches( Prototype p, BranchVisitor visitor ) { - int sbx,j; + int sbx,j,c; int[] code = p.code; int n = code.length; for ( int i=0; i0 && b0.prev == null ) { + pc = b0.pc1; + continue; + } + int pc0 = pc; // closure changes pc int ins = p.code[pc]; final int o = Lua.GET_OPCODE(ins); @@ -342,20 +351,22 @@ public class JavaGen { builder.isNil(); builder.addBranch(pc, JavaBuilder.BRANCH_IFNE, pc+2); - // a[2] = a[3] = v[1] + // a[2] = a[3] = v[1], leave varargs on stack builder.createUpvalues(pc, a+3, c); builder.loadVarresult(); - if ( c>=2 ) builder.dup(); + if (c>=2) + builder.dup(); builder.arg( 1 ); builder.dup(); builder.storeLocal(pc, a+2); builder.storeLocal(pc, a+3); - // a[a+2+i] = v[2+i], i=2..c - for ( int i=2; i<=c; i++ ) { - if ( i