Mercurial Hosting > luan
diff core/src/luan/impl/LuanCompiler.java @ 327:0be73ac9103d
handle circular package loading
git-svn-id: https://luan-java.googlecode.com/svn/trunk@328 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Thu, 19 Mar 2015 05:36:05 +0000 |
parents | 7f7708e8fdd4 |
children | 23b99a5039b5 |
line wrap: on
line diff
--- a/core/src/luan/impl/LuanCompiler.java Thu Mar 19 00:01:57 2015 +0000 +++ b/core/src/luan/impl/LuanCompiler.java Thu Mar 19 05:36:05 2015 +0000 @@ -16,8 +16,7 @@ private LuanCompiler() {} // never public static LuanFunction compile(LuanState luan,LuanSource src,LuanTable env,boolean allowExpr) throws LuanException { - boolean passedEnv = env != null; - if( !passedEnv ) + if( env==null ) env = Luan.newTable(); UpValue.Getter envGetter = new UpValue.ValueGetter(env); LuanParser parser = new LuanParser(src,envGetter); @@ -25,17 +24,7 @@ parser.addVar( "require", PackageLuan.requireFn ); FnDef fnDef = parse(luan,parser,allowExpr); final LuanStateImpl luanImpl = (LuanStateImpl)luan; - final Closure c = new Closure(luanImpl,fnDef); - if( passedEnv ) - return c; - return new LuanFunction() { - @Override public Object call(LuanState luan,Object[] args) throws LuanException { - Object rtn = c.call(luan,args); - if( rtn instanceof Object[] && ((Object[])rtn).length==0 ) - rtn = c.upValues()[0].get(); - return rtn; - } - }; + return new Closure(luanImpl,fnDef); } private static FnDef parse(LuanState luan,LuanParser parser,boolean allowExpr) throws LuanException {