Mercurial Hosting > luan
diff core/src/luan/impl/LuanCompiler.java @ 667:08966099aa6d
implement Closure directly
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 08 Apr 2016 07:00:17 -0600 |
parents | 37f0cf43f191 |
children | 58ebfec6178b |
line wrap: on
line diff
--- a/core/src/luan/impl/LuanCompiler.java Thu Apr 07 23:36:56 2016 -0600 +++ b/core/src/luan/impl/LuanCompiler.java Fri Apr 08 07:00:17 2016 -0600 @@ -1,12 +1,13 @@ package luan.impl; +import java.util.Map; +import java.lang.reflect.InvocationTargetException; import luan.LuanFunction; import luan.LuanState; import luan.LuanException; import luan.LuanTable; import luan.modules.JavaLuan; import luan.modules.PackageLuan; -import java.util.Map; public final class LuanCompiler { @@ -16,17 +17,27 @@ LuanParser parser = new LuanParser(sourceName,sourceText,env); parser.addVar( "java", JavaLuan.javaFn ); parser.addVar( "require", PackageLuan.requireFn ); - FnDef fnDef = parse(parser,allowExpr); + Class fnClass = parse(parser,allowExpr); final LuanStateImpl luanImpl = (LuanStateImpl)luan; - return new Closure(luanImpl,fnDef); + try { + return (LuanFunction)fnClass.getConstructor(LuanStateImpl.class).newInstance(luanImpl); + } catch(NoSuchMethodException e) { + throw new RuntimeException(e); + } catch(InstantiationException e) { + throw new RuntimeException(e); + } catch(IllegalAccessException e) { + throw new RuntimeException(e); + } catch(InvocationTargetException e) { + throw new RuntimeException(e); + } } - private static FnDef parse(LuanParser parser,boolean allowExpr) throws LuanException { + private static Class parse(LuanParser parser,boolean allowExpr) throws LuanException { try { if( allowExpr ) { - FnDef fnDef = parser.Expression(); - if( fnDef != null ) - return fnDef; + Class fnClass = parser.Expression(); + if( fnClass != null ) + return fnClass; } return parser.RequiredModule(); } catch(ParseException e) {