Remove env from LuaFunction, replace with upValiue array, and remove most occurances of setfenv and getfenv.

This commit is contained in:
James Roseborough
2012-09-07 04:36:50 +00:00
parent 244a964af5
commit 3bacea878e
36 changed files with 130 additions and 265 deletions

View File

@@ -186,7 +186,6 @@ public class lua {
try {
// load as java class
LuaValue v = (LuaValue) Class.forName(libname).newInstance();
v.setfenv(_G);
v.call(slibname, _G);
} catch ( Exception f ) {
throw new IOException("loadLibrary("+libname+") failed: "+e+","+f );

View File

@@ -87,6 +87,7 @@ public class JsePlatform {
*/
public static LuaTable standardGlobals() {
LuaTable _G = new LuaTable();
LuaValue._G = _G;
_G.load(new JseBaseLib());
_G.load(new PackageLib());
_G.load(new TableLib());
@@ -96,7 +97,6 @@ public class JsePlatform {
_G.load(new JseIoLib());
_G.load(new JseOsLib());
_G.load(new LuajavaLib());
LuaThread.setGlobals(_G);
LuaC.install();
return _G;
}

View File

@@ -98,6 +98,7 @@ public class LuajavaLib extends VarArgFunction {
try {
switch ( opcode ) {
case INIT: {
LuaValue env = args.arg1();
LuaTable t = new LuaTable();
bind( t, LuajavaLib.class, NAMES, BINDCLASS );
env.set("luajava", t);

View File

@@ -112,7 +112,6 @@ public class Lua2Java implements LuaCompiler {
Class clazz = cl.loadClass(className);
Object instance = clazz.newInstance();
LuaFunction value = (LuaFunction) instance;
value.setfenv( env );
return value;
} else {
}

View File

@@ -30,12 +30,9 @@ import org.luaj.vm2.Prototype;
******************************************************************************/
public class JavaLoader extends ClassLoader {
private final LuaValue env;
private Map<String,byte[]> unloaded = new HashMap<String,byte[]>();
public JavaLoader( LuaValue env ) {
this.env = env;
public JavaLoader() {
}
public LuaFunction load( Prototype p, String classname, String filename ) {
@@ -49,10 +46,14 @@ public class JavaLoader extends ClassLoader {
}
public LuaFunction load(String classname) {
return load(classname, LuaValue._G);
}
public LuaFunction load(String classname, LuaValue env) {
try {
Class c = loadClass( classname );
LuaFunction v = (LuaFunction) c.newInstance();
v.setfenv(env);
v.initupvalue1(env);
return v;
} catch ( Exception e ) {
e.printStackTrace();

View File

@@ -99,7 +99,7 @@ public class LuaJC implements LuaCompiler {
Prototype p = LuaC.instance.compile(stream, name);
String classname = toStandardJavaClassName( name );
String luaname = toStandardLuaFileName( name );
JavaLoader loader = new JavaLoader(env);
JavaLoader loader = new JavaLoader();
return loader.load(p, classname, luaname);
}

View File

@@ -203,7 +203,7 @@ public class LuaScriptEngine implements ScriptEngine, Compilable {
Bindings b = context.getBindings(ScriptContext.ENGINE_SCOPE);
LuaFunction f = newFunctionInstance();
ClientBindings cb = new ClientBindings(b);
f.setfenv(cb.env);
f.initupvalue1(cb.env);
Varargs result = f.invoke(LuaValue.NONE);
cb.copyGlobalsToBindings();
return result;