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 {