Fix a bug in how OP_SETLIST is handled. Includes new test case.

This commit is contained in:
Ian Farmer
2007-07-12 04:06:41 +00:00
parent f7d6a49acb
commit 2a28925f74
4 changed files with 34 additions and 2 deletions

View File

@@ -367,15 +367,16 @@ public class CallFrame {
case StackState.OP_SETLIST: {
b = StackState.GETARG_B(i);
c = StackState.GETARG_C(i);
int listBase = base + a;
if (b == 0) {
b = top - 1;
b = top - listBase - 1;
}
if (c == 0) {
c = code[pc++];
}
table = this.stack[base + a];
for (int index = 1; index <= b; index++) {
val = this.stack[base + a + index];
val = this.stack[listBase + index];
table.luaSetTable(this, this.state.avail, table,
new LInteger(index), val);
}