diff core/src/luan/impl/LuanCompiler.java @ 670:58ebfec6178b

all luan now compiles
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 12 Apr 2016 01:05:57 -0600
parents 08966099aa6d
children d3e5414bdf4c
line wrap: on
line diff
--- a/core/src/luan/impl/LuanCompiler.java	Mon Apr 11 16:00:44 2016 -0600
+++ b/core/src/luan/impl/LuanCompiler.java	Tue Apr 12 01:05:57 2016 -0600
@@ -14,13 +14,15 @@
 	private LuanCompiler() {}  // never
 
 	public static LuanFunction compile(LuanState luan,String sourceName,String sourceText,LuanTable env,boolean allowExpr) throws LuanException {
-		LuanParser parser = new LuanParser(sourceName,sourceText,env);
-		parser.addVar( "java", JavaLuan.javaFn );
-		parser.addVar( "require", PackageLuan.requireFn );
+		LuanParser parser = new LuanParser(sourceName,sourceText);
+		parser.addVar( env!=null ? "_ENV" : null );
+		parser.addVar( "java" );
+		parser.addVar( "require" );
 		Class fnClass = parse(parser,allowExpr);
 		final LuanStateImpl luanImpl = (LuanStateImpl)luan;
+		Closure closure;
 		try {
-			return (LuanFunction)fnClass.getConstructor(LuanStateImpl.class).newInstance(luanImpl);
+			closure = (Closure)fnClass.getConstructor(LuanState.class).newInstance(luanImpl);
 		} catch(NoSuchMethodException e) {
 			throw new RuntimeException(e);
 		} catch(InstantiationException e) {
@@ -30,6 +32,10 @@
 		} catch(InvocationTargetException e) {
 			throw new RuntimeException(e);
 		}
+		closure.upValues[0].o = env!=null ? env : new LuanTable();
+		closure.upValues[1].o = JavaLuan.javaFn;
+		closure.upValues[2].o = PackageLuan.requireFn;
+		return closure;
 	}
 
 	private static Class parse(LuanParser parser,boolean allowExpr) throws LuanException {