diff --git a/src/jse/org/luaj/vm2/luajc/ProtoInfo.java b/src/jse/org/luaj/vm2/luajc/ProtoInfo.java
index df0ca683..1adf41c1 100644
--- a/src/jse/org/luaj/vm2/luajc/ProtoInfo.java
+++ b/src/jse/org/luaj/vm2/luajc/ProtoInfo.java
@@ -18,6 +18,7 @@ public class ProtoInfo {
public final BasicBlock[] blocks; // basic block analysis of code branching
public final BasicBlock[] blocklist; // blocks in breadhth-first order
public final VarInfo[][] vars; // Each variable
+ public final VarInfo[] params; // Parameters and initial values of stack variables
public final UpvalInfo[] upvals; // from outer scope
public final UpvalInfo[][] openups; // per slot, upvalues allocated by this prototype
@@ -35,6 +36,15 @@ public class ProtoInfo {
// find basic blocks
this.blocks = BasicBlock.findBasicBlocks(p);
this.blocklist = BasicBlock.sortDepthFirst(blocks);
+
+
+ // params are inputs to first block
+ this.params = new VarInfo[p.maxstacksize];
+ for ( int slot=0; slot
b.pc0 )
return pi.vars[slot][v.pc-1].upvalue != this;
diff --git a/src/jse/org/luaj/vm2/luajc/VarInfo.java b/src/jse/org/luaj/vm2/luajc/VarInfo.java
index 0ab7e4c8..06078db9 100644
--- a/src/jse/org/luaj/vm2/luajc/VarInfo.java
+++ b/src/jse/org/luaj/vm2/luajc/VarInfo.java
@@ -7,14 +7,26 @@ public class VarInfo {
public static VarInfo INVALID = new VarInfo(-1,-1);
- public static VarInfo NIL(int slot) {
- return new VarInfo(slot,-1);
+ public static VarInfo PARAM(int slot) {
+ return new VarInfo(slot,-1) {
+ public String toString() {
+ return slot+".p";
+ }
+ };
}
+ public static VarInfo NIL(final int slot) {
+ return new VarInfo(slot,-1) {
+ public String toString() {
+ return "nil";
+ }
+ };
+ }
+
public static VarInfo PHI(int slot, int pc) {
return new VarInfo(slot,pc) {
public String toString() {
- return super.toString()+"p";
+ return super.toString()+"{}";
}
};
}
@@ -23,7 +35,7 @@ public class VarInfo {
public final int pc; // where assigned, or -1 if for block inputs
public UpvalInfo upvalue; // not null if this var is an upvalue
- public boolean allocupvalue; // true if this variable allocations r/w upvalue storage
+ public boolean allocupvalue; // true if this variable allocates r/w upvalue storage
public VarInfo(int slot, int pc) {
this.slot = slot;
@@ -32,7 +44,6 @@ public class VarInfo {
public String toString() {
return slot<0? "x.x":
- pc<0? "nil":
(slot+"."+pc);
}
}
\ No newline at end of file