Improve compiler output

This commit is contained in:
James Roseborough
2010-04-23 05:17:57 +00:00
parent 8ea8ccb776
commit efd67d91ce
3 changed files with 26 additions and 7 deletions

View File

@@ -135,6 +135,11 @@ public class Slots {
break;
case Lua.OP_SETTABLE: /* A B C R(A)[RK(B)]:= RK(C) */
s[a] |= BIT_REFER;
if (b<=0xff) s[b] |= BIT_REFER;
if (c<=0xff) s[c] |= BIT_REFER;
break;
case Lua.OP_ADD: /* A B C R(A):= RK(B) + RK(C) */
case Lua.OP_SUB: /* A B C R(A):= RK(B) - RK(C) */
case Lua.OP_MUL: /* A B C R(A):= RK(B) * RK(C) */
@@ -142,7 +147,7 @@ public class Slots {
case Lua.OP_MOD: /* A B C R(A):= RK(B) % RK(C) */
case Lua.OP_POW: /* A B C R(A):= RK(B) ^ RK(C) */
s[a] |= BIT_ASSIGN;
if (bx<=0xff) s[bx] |= BIT_REFER;
if (b<=0xff) s[b] |= BIT_REFER;
if (c<=0xff) s[c] |= BIT_REFER;
break;
@@ -273,8 +278,13 @@ public class Slots {
break;
}
case Lua.OP_VARARG: /* A B R(A), R(A+1), ..., R(A+B-1) = vararg */
while ( a<b )
s[a++] |= BIT_ASSIGN;
if ( b == 0 ) {
while ( a<m )
s[a++] |= BIT_INVALID;
} else {
for ( int i=1; i<b; ++a, ++i )
s[a] |= BIT_ASSIGN;
}
break;
}
}

View File

@@ -282,4 +282,13 @@ public class FragmentsTest extends TestCase {
"function ccc(z) return z end\n" +
"return ccc( aaa(bbb(123)), aaa(456) )\n" );
}
public void testSetUpvalueTableInitializer() {
runFragment( LuaValue.valueOf("b"),
"local aliases = {a='b'}\n" +
"local foo = function()\n" +
" return aliases\n" +
"end\n" +
"return foo().a\n" );
}
}

View File

@@ -508,8 +508,8 @@ public class TypeTest extends TestCase {
assertEquals( String.valueOf(sampledouble), stringdouble.toString() );
assertEquals( "thread: ", thread.toString().substring(0,8) );
assertEquals( "table: ", table.toString().substring(0,7) );
assertEquals( "userdata: ", userdataobj.toString().substring(0,10) );
assertEquals( "userdata: ", userdatacls.toString().substring(0,10) );
assertEquals( sampleobject.toString(), userdataobj.toString() );
assertEquals( sampledata.toString(), userdatacls.toString() );
assertEquals( "function: ", somefunc.toString().substring(0,10) );
assertEquals( "function: ", someclosure.toString().substring(0,10) );
}
@@ -868,7 +868,7 @@ public class TypeTest extends TestCase {
fail( "did not throw bad type error" );
assertTrue( o instanceof MyData );
} catch ( LuaError le ) {
assertEquals( le.getMessage(), "expected org.luaj.vm2.TypeTest$MyData got userdata" );
assertEquals( "org.luaj.vm2.TypeTest$MyData expected, got userdata", le.getMessage() );
}
}
@@ -1216,7 +1216,7 @@ public class TypeTest extends TestCase {
fail( "did not throw bad type error" );
assertTrue( o instanceof MyData );
} catch ( LuaError le ) {
assertEquals( le.getMessage(), "expected org.luaj.vm2.TypeTest$MyData got userdata" );
assertEquals( "org.luaj.vm2.TypeTest$MyData expected, got userdata", le.getMessage() );
}
}