Fix for loop processing in luajc compiler code generator for lua 5.3 bytecodes
This commit is contained in:
@@ -29,7 +29,10 @@ import java.util.Hashtable;
|
||||
|
||||
import org.luaj.vm2.LuaTable;
|
||||
import org.luaj.vm2.LuaValue;
|
||||
import org.luaj.vm2.Print;
|
||||
import org.luaj.vm2.Prototype;
|
||||
import org.luaj.vm2.Varargs;
|
||||
import org.luaj.vm2.compiler.LuaC;
|
||||
import org.luaj.vm2.lib.jse.JsePlatform;
|
||||
import org.luaj.vm2.luajc.LuaJC;
|
||||
|
||||
@@ -37,8 +40,9 @@ public class TestLuaJC {
|
||||
// create the script
|
||||
public static String name = "script";
|
||||
public static String script =
|
||||
"_ENV={}; return _ENV\n"+
|
||||
"";
|
||||
"for n,p in ipairs({77}) do\n"+
|
||||
" print('n,p',n,p)\n"+
|
||||
"end\n";
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
System.out.println(script);
|
||||
@@ -48,12 +52,16 @@ public class TestLuaJC {
|
||||
LuaTable _G = JsePlatform.standardGlobals();
|
||||
System.out.println("_G: "+_G);
|
||||
System.out.println("_G.print: "+_G.get("print"));
|
||||
|
||||
// compile into a chunk, or load as a class
|
||||
LuaValue chunk;
|
||||
|
||||
// print the chunk as a closure
|
||||
byte[] bytes = script.getBytes();
|
||||
LuaValue chunk = LuaC.instance.load(new ByteArrayInputStream(bytes), "script", _G);
|
||||
Prototype p = chunk.checkclosure().p;
|
||||
Print.print(p);
|
||||
|
||||
// compile into a luajc chunk, or load as a class
|
||||
if ( ! (args.length>0 && args[0].equals("nocompile")) ) {
|
||||
InputStream is = new ByteArrayInputStream( script.getBytes() );
|
||||
chunk = LuaJC.getInstance().load(is, "script", _G);
|
||||
chunk = LuaJC.getInstance().load(new ByteArrayInputStream(bytes), "script", _G);
|
||||
} else {
|
||||
chunk = (LuaValue) Class.forName("script").newInstance();
|
||||
}
|
||||
|
||||
@@ -94,6 +94,15 @@ public class FragmentsTest extends TestSuite {
|
||||
"return b" );
|
||||
}
|
||||
|
||||
public void testSimpleForloop() {
|
||||
runFragment( LuaValue.valueOf(77),
|
||||
"for n,p in ipairs({77}) do\n"+
|
||||
" print('n,p',n,p)\n"+
|
||||
" return p\n"+
|
||||
"end\n");
|
||||
|
||||
}
|
||||
|
||||
public void testForloopParamUpvalues() {
|
||||
runFragment( LuaValue.varargsOf(new LuaValue[] {
|
||||
LuaValue.valueOf(77),
|
||||
|
||||
@@ -216,22 +216,41 @@ tryhooks("r")
|
||||
tryhooks("l")
|
||||
tryhooks("crl")
|
||||
|
||||
print( '----- debug.getupvalueid' )
|
||||
local x=1, y=2
|
||||
function a()
|
||||
print( '----- debug.upvalueid' )
|
||||
local x,y = 100,200
|
||||
function a(b,c)
|
||||
local z,w = b,c
|
||||
return function()
|
||||
return x,y
|
||||
x,y,z,w = x+1,y+1,z+1,w+1
|
||||
return x,y,z,w
|
||||
end
|
||||
end
|
||||
a1 = a()
|
||||
a2 = a()
|
||||
a1 = a(300,400)
|
||||
a2 = a(500,600)
|
||||
print('debug.getupvalue(a1,1)', debug.getupvalue(a1,1))
|
||||
print('debug.getupvalue(a1,2)', debug.getupvalue(a1,2))
|
||||
print('debug.getupvalue(a2,1)', debug.getupvalue(a2,1))
|
||||
print('debug.getupvalue(a2,2)', debug.getupvalue(a2,2))
|
||||
print('debug.getupvalueid(a1,1) == debug.getupvalueid(a1,1)', debug.getupvalueid(a1,1) == debug.getupvalueid(a1,1))
|
||||
print('debug.getupvalueid(a1,1) == debug.getupvalueid(a2,1)', debug.getupvalueid(a1,1) == debug.getupvalueid(a2,1))
|
||||
print('debug.getupvalueid(a1,2) == debug.getupvalueid(a1,2)', debug.getupvalueid(a1,2) == debug.getupvalueid(a1,2))
|
||||
print('debug.getupvalueid(a1,2) == debug.getupvalueid(a2,2)', debug.getupvalueid(a1,2) == debug.getupvalueid(a2,2))
|
||||
print('debug.upvalueid(a1,1) == debug.upvalueid(a1,1)', debug.upvalueid(a1,1) == debug.upvalueid(a1,1))
|
||||
print('debug.upvalueid(a1,1) == debug.upvalueid(a2,1)', debug.upvalueid(a1,1) == debug.upvalueid(a2,1))
|
||||
print('debug.upvalueid(a1,1) == debug.upvalueid(a1,2)', debug.upvalueid(a1,1) == debug.upvalueid(a1,2))
|
||||
|
||||
v
|
||||
print( '----- debug.upvaluejoin' )
|
||||
print('a1',a1())
|
||||
print('a2',a2())
|
||||
print('debug.upvaluejoin(a1,1,a2,2)', debug.upvaluejoin(a1,1,a2,2))
|
||||
print('debug.upvaluejoin(a1,3,a2,4)', debug.upvaluejoin(a1,3,a2,4))
|
||||
print('a1',a1())
|
||||
print('a2',a2())
|
||||
print('a1',a1())
|
||||
print('a2',a2())
|
||||
for i = 1,4 do
|
||||
print('debug.getupvalue(a1,'..i..')', debug.getupvalue(a1,i))
|
||||
print('debug.getupvalue(a2,'..i..')', debug.getupvalue(a2,i))
|
||||
for j = 1,4 do
|
||||
print('debug.upvalueid(a1,'..i..') == debug.upvalueid(a1,'..j..')', debug.upvalueid(a1,i) == debug.upvalueid(a1,j))
|
||||
print('debug.upvalueid(a1,'..i..') == debug.upvalueid(a2,'..j..')', debug.upvalueid(a1,i) == debug.upvalueid(a2,j))
|
||||
print('debug.upvalueid(a2,'..i..') == debug.upvalueid(a1,'..j..')', debug.upvalueid(a2,i) == debug.upvalueid(a1,j))
|
||||
print('debug.upvalueid(a2,'..i..') == debug.upvalueid(a2,'..j..')', debug.upvalueid(a2,i) == debug.upvalueid(a2,j))
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user