Remove env from LuaFunction, replace with upValiue array, and remove most occurances of setfenv and getfenv.
This commit is contained in:
@@ -60,7 +60,7 @@ public class TestLuaJC {
|
||||
} else {
|
||||
chunk = (LuaValue) Class.forName("script").newInstance();
|
||||
}
|
||||
chunk.setfenv(_G);
|
||||
//chunk.setfenv(_G); // TODO: convert to setupvalue()?
|
||||
|
||||
// call with arguments
|
||||
LuaValue[] vargs = new LuaValue[args.length];
|
||||
|
||||
@@ -71,18 +71,18 @@ public class FragmentsTest extends TestSuite {
|
||||
public void runFragment( Varargs expected, String script ) {
|
||||
try {
|
||||
String name = getName();
|
||||
LuaTable _G = org.luaj.vm2.lib.jse.JsePlatform.debugGlobals();
|
||||
org.luaj.vm2.lib.jse.JsePlatform.debugGlobals();
|
||||
InputStream is = new ByteArrayInputStream(script.getBytes("UTF-8"));
|
||||
LuaValue chunk ;
|
||||
switch ( TEST_TYPE ) {
|
||||
case TEST_TYPE_LUA2JAVA:
|
||||
chunk = Lua2Java.instance.load(is,name,_G);
|
||||
chunk = Lua2Java.instance.load(is,name,LuaValue._G);
|
||||
break;
|
||||
case TEST_TYPE_LUAJC:
|
||||
chunk = LuaJC.getInstance().load(is,name,_G);
|
||||
chunk = LuaJC.getInstance().load(is,name,LuaValue._G);
|
||||
break;
|
||||
default:
|
||||
chunk = LuaC.instance.load( is, name, _G );
|
||||
chunk = LuaC.instance.load( is, name, LuaValue._G );
|
||||
Print.print(((LuaClosure)chunk).p);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -55,9 +55,9 @@ public class LuaOperationsTest extends TestCase {
|
||||
private final LuaValue stringlong = LuaValue.valueOf(samplestringlong);
|
||||
private final LuaValue stringdouble = LuaValue.valueOf(samplestringdouble);
|
||||
private final LuaTable table = LuaValue.listOf( new LuaValue[] { LuaValue.valueOf("aaa"), LuaValue.valueOf("bbb") } );
|
||||
private final LuaValue somefunc = new ZeroArgFunction(table) { public LuaValue call() { return NONE;}};
|
||||
private final LuaThread thread = new LuaThread(somefunc,table);
|
||||
private final Prototype proto = new Prototype();
|
||||
private final LuaValue somefunc = new ZeroArgFunction() { public LuaValue call() { return NONE;}};
|
||||
private final LuaThread thread = new LuaThread(somefunc);
|
||||
private final Prototype proto = new Prototype(1);
|
||||
private final LuaClosure someclosure = new LuaClosure(proto,table);
|
||||
private final LuaUserdata userdataobj = LuaValue.userdataOf(sampleobject);
|
||||
private final LuaUserdata userdatacls = LuaValue.userdataOf(sampledata);
|
||||
@@ -127,55 +127,6 @@ public class LuaOperationsTest extends TestCase {
|
||||
throwsLuaError( "length", userdataobj );
|
||||
throwsLuaError( "length", userdatacls );
|
||||
}
|
||||
|
||||
public void testGetfenv() {
|
||||
throwsLuaError( "getfenv", somenil );
|
||||
throwsLuaError( "getfenv", sometrue );
|
||||
throwsLuaError( "getfenv", somefalse );
|
||||
throwsLuaError( "getfenv", zero );
|
||||
throwsLuaError( "getfenv", intint );
|
||||
throwsLuaError( "getfenv", longdouble );
|
||||
throwsLuaError( "getfenv", doubledouble );
|
||||
throwsLuaError( "getfenv", stringstring );
|
||||
throwsLuaError( "getfenv", stringint );
|
||||
throwsLuaError( "getfenv", stringlong );
|
||||
throwsLuaError( "getfenv", stringdouble );
|
||||
throwsLuaError( "getfenv", table );
|
||||
assertTrue( table == thread.getfenv() );
|
||||
assertTrue( table == someclosure.getfenv() );
|
||||
assertTrue( table == somefunc.getfenv() );
|
||||
throwsLuaError( "getfenv", userdataobj );
|
||||
throwsLuaError( "getfenv", userdatacls );
|
||||
}
|
||||
|
||||
public void testSetfenv() {
|
||||
LuaTable table2 = LuaValue.listOf( new LuaValue[] {
|
||||
LuaValue.valueOf("ccc"),
|
||||
LuaValue.valueOf("ddd") } );
|
||||
throwsLuaError( "setfenv", somenil, table2 );
|
||||
throwsLuaError( "setfenv", sometrue, table2 );
|
||||
throwsLuaError( "setfenv", somefalse, table2 );
|
||||
throwsLuaError( "setfenv", zero, table2 );
|
||||
throwsLuaError( "setfenv", intint, table2 );
|
||||
throwsLuaError( "setfenv", longdouble, table2 );
|
||||
throwsLuaError( "setfenv", doubledouble, table2 );
|
||||
throwsLuaError( "setfenv", stringstring, table2 );
|
||||
throwsLuaError( "setfenv", stringint, table2 );
|
||||
throwsLuaError( "setfenv", stringlong, table2 );
|
||||
throwsLuaError( "setfenv", stringdouble, table2 );
|
||||
throwsLuaError( "setfenv", table, table2 );
|
||||
thread.setfenv(table2);
|
||||
assertTrue( table2 == thread.getfenv() );
|
||||
assertTrue( table == someclosure.getfenv() );
|
||||
assertTrue( table == somefunc.getfenv() );
|
||||
someclosure.setfenv(table2);
|
||||
assertTrue( table2 == someclosure.getfenv() );
|
||||
assertTrue( table == somefunc.getfenv() );
|
||||
somefunc.setfenv(table2);
|
||||
assertTrue( table2 == somefunc.getfenv() );
|
||||
throwsLuaError( "setfenv", userdataobj, table2 );
|
||||
throwsLuaError( "setfenv", userdatacls, table2 );
|
||||
}
|
||||
|
||||
public Prototype createPrototype( String script, String name ) {
|
||||
try {
|
||||
@@ -206,56 +157,20 @@ public class LuaOperationsTest extends TestCase {
|
||||
|
||||
// function tests
|
||||
{
|
||||
LuaFunction f = new ZeroArgFunction(_G) { public LuaValue call() { return env.get("a");}};
|
||||
LuaFunction f = new ZeroArgFunction() { public LuaValue call() { return _G.get("a");}};
|
||||
assertEquals( aaa, f.call() );
|
||||
f.setfenv(newenv);
|
||||
assertEquals( newenv, f.getfenv() );
|
||||
assertEquals( eee, f.call() );
|
||||
}
|
||||
|
||||
// closure tests
|
||||
{
|
||||
Prototype p = createPrototype( "return a\n", "closuretester" );
|
||||
LuaClosure c = new LuaClosure(p, _G);
|
||||
|
||||
// Test that a clusure with a custom enviroment uses that environment.
|
||||
assertEquals( aaa, c.call() );
|
||||
c.setfenv(newenv);
|
||||
assertEquals( newenv, c.getfenv() );
|
||||
c = new LuaClosure(p, newenv);
|
||||
assertEquals( newenv, c.upValues[0].getValue() );
|
||||
assertEquals( eee, c.call() );
|
||||
}
|
||||
|
||||
// thread tests, functions created in threads inherit the thread's environment initially
|
||||
// those closures created not in any other function get the thread's enviroment
|
||||
Prototype p2 = createPrototype( "return loadstring('return a')", "threadtester" );
|
||||
{
|
||||
LuaThread t = new LuaThread(new LuaClosure(p2,_G), _G);
|
||||
Varargs v = t.resume(LuaValue.NONE);
|
||||
assertEquals(LuaValue.TRUE, v.arg(1) );
|
||||
LuaValue f = v.arg(2);
|
||||
assertEquals( LuaValue.TFUNCTION, f.type() );
|
||||
assertEquals( aaa, f.call() );
|
||||
assertEquals( _G, f.getfenv() );
|
||||
}
|
||||
{
|
||||
// change the thread environment after creation!
|
||||
LuaThread t = new LuaThread(new LuaClosure(p2,_G), _G);
|
||||
t.setfenv(newenv);
|
||||
Varargs v = t.resume(LuaValue.NONE);
|
||||
assertEquals(LuaValue.TRUE, v.arg(1) );
|
||||
LuaValue f = v.arg(2);
|
||||
assertEquals( LuaValue.TFUNCTION, f.type() );
|
||||
assertEquals( eee, f.call() );
|
||||
assertEquals( newenv, f.getfenv() );
|
||||
}
|
||||
{
|
||||
// let the closure have a different environment from the thread
|
||||
Prototype p3 = createPrototype( "return function() return a end", "envtester" );
|
||||
LuaThread t = new LuaThread(new LuaClosure(p3,newenv), _G);
|
||||
Varargs v = t.resume(LuaValue.NONE);
|
||||
assertEquals(LuaValue.TRUE, v.arg(1) );
|
||||
LuaValue f = v.arg(2);
|
||||
assertEquals( LuaValue.TFUNCTION, f.type() );
|
||||
assertEquals( eee, f.call() );
|
||||
assertEquals( newenv, f.getfenv() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,8 +38,8 @@ public class MetatableTest extends TestCase {
|
||||
private final LuaValue string = LuaValue.valueOf(samplestring);
|
||||
private final LuaTable table = LuaValue.tableOf();
|
||||
private final LuaFunction function = new ZeroArgFunction() { public LuaValue call() { return NONE;}};
|
||||
private final LuaThread thread = new LuaThread(function,table);
|
||||
private final LuaClosure closure = new LuaClosure();
|
||||
private final LuaThread thread = new LuaThread(function);
|
||||
private final LuaClosure closure = new LuaClosure(new Prototype());
|
||||
private final LuaUserdata userdata = LuaValue.userdataOf(sampleobject);
|
||||
private final LuaUserdata userdatamt = LuaValue.userdataOf(sampledata,table);
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@ public class OrphanedThreadTest extends TestCase {
|
||||
}
|
||||
|
||||
private void doTest(LuaValue status2, LuaValue value2) throws Exception {
|
||||
luathread = new LuaThread(function, env);
|
||||
luathread = new LuaThread(function);
|
||||
luathr_ref = new WeakReference(luathread);
|
||||
func_ref = new WeakReference(function);
|
||||
assertNotNull(luathr_ref.get());
|
||||
|
||||
@@ -119,7 +119,6 @@ public class ScriptDrivenTest extends TestCase {
|
||||
case LUAJIT:
|
||||
if ( nocompile ) {
|
||||
LuaValue c = (LuaValue) Class.forName(name).newInstance();
|
||||
c.setfenv(_G);
|
||||
return c;
|
||||
} else {
|
||||
script = new FileInputStream(file);
|
||||
|
||||
@@ -26,8 +26,12 @@ import java.lang.reflect.InvocationTargetException;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.luaj.vm2.lib.ZeroArgFunction;
|
||||
import org.luaj.vm2.lib.jse.JsePlatform;
|
||||
|
||||
public class TypeTest extends TestCase {
|
||||
static {
|
||||
JsePlatform.debugGlobals();
|
||||
}
|
||||
|
||||
private final int sampleint = 77;
|
||||
private final long samplelong = 123400000000L;
|
||||
@@ -52,8 +56,8 @@ public class TypeTest extends TestCase {
|
||||
private final LuaValue stringdouble = LuaValue.valueOf(samplestringdouble);
|
||||
private final LuaTable table = LuaValue.tableOf();
|
||||
private final LuaFunction somefunc = new ZeroArgFunction() { public LuaValue call() { return NONE;}};
|
||||
private final LuaThread thread = new LuaThread(somefunc,table);
|
||||
private final LuaClosure someclosure = new LuaClosure();
|
||||
private final LuaThread thread = new LuaThread(somefunc);
|
||||
private final LuaClosure someclosure = new LuaClosure(new Prototype());
|
||||
private final LuaUserdata userdataobj = LuaValue.userdataOf(sampleobject);
|
||||
private final LuaUserdata userdatacls = LuaValue.userdataOf(sampledata);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user