Mercurial Hosting > luan
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 {