diff src/luan/interp/LuanCompiler.java @ 150:f35c50027985

make load() more consistent git-svn-id: https://luan-java.googlecode.com/svn/trunk@151 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Mon, 16 Jun 2014 10:11:48 +0000
parents f99fd64291b3
children cced1c4d3575
line wrap: on
line diff
--- a/src/luan/interp/LuanCompiler.java	Mon Jun 16 05:47:54 2014 +0000
+++ b/src/luan/interp/LuanCompiler.java	Mon Jun 16 10:11:48 2014 +0000
@@ -13,8 +13,8 @@
 public final class LuanCompiler {
 	private LuanCompiler() {}  // never
 
-	private static LuanFunction compile(LuanState luan,LuanSource src,boolean allowExpr) throws LuanException {
-		UpValue.Getter envGetter = new UpValue.EnvGetter();
+	public static LuanFunction compile(LuanState luan,LuanSource src,LuanTable env,boolean allowExpr) throws LuanException {
+		UpValue.Getter envGetter = env!=null ? new UpValue.ValueGetter(env) : new UpValue.EnvGetter();
 		LuanParser parser = new LuanParser(src,envGetter);
 		for( Map.Entry<Object,Object> entry : luan.global() ) {
 			Object key = entry.getKey();
@@ -22,6 +22,8 @@
 				parser.addVar( (String)key, entry.getValue() );
 		}
 		FnDef fnDef = parse(luan,parser,allowExpr);
+		if( env != null )
+			return new Closure((LuanStateImpl)luan,fnDef);
 		final Closure c = new Closure((LuanStateImpl)luan,fnDef);
 		return new LuanFunction() {
 			@Override public Object call(LuanState luan,Object[] args) throws LuanException {
@@ -33,15 +35,6 @@
 		};
 	}
 
-	public static LuanFunction compile(LuanState luan,LuanSource src,LuanTable env,boolean allowExpr) throws LuanException {
-		if( env==null )
-			return compile(luan,src,allowExpr);
-		UpValue.Getter envGetter = new UpValue.ValueGetter(env);
-		LuanParser parser = new LuanParser(src,envGetter);
-		FnDef fnDef = parse(luan,parser,allowExpr);
-		return new Closure((LuanStateImpl)luan,fnDef);
-	}
-
 	private static FnDef parse(LuanState luan,LuanParser parser,boolean allowExpr) throws LuanException {
 		try {
 			if( allowExpr ) {