comparison core/src/luan/impl/LuanCompiler.java @ 194:08df375e2e5f

remove EnvGetter git-svn-id: https://luan-java.googlecode.com/svn/trunk@195 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Wed, 02 Jul 2014 04:52:25 +0000
parents 3dcb0f9bee82
children 24ede40ee0aa
comparison
equal deleted inserted replaced
193:66ed8886abc0 194:08df375e2e5f
11 11
12 public final class LuanCompiler { 12 public final class LuanCompiler {
13 private LuanCompiler() {} // never 13 private LuanCompiler() {} // never
14 14
15 public static LuanFunction compile(LuanState luan,LuanSource src,LuanTable env,boolean allowExpr) throws LuanException { 15 public static LuanFunction compile(LuanState luan,LuanSource src,LuanTable env,boolean allowExpr) throws LuanException {
16 UpValue.Getter envGetter = env!=null ? new UpValue.ValueGetter(env) : new UpValue.EnvGetter(); 16 boolean passedEnv = env != null;
17 if( !passedEnv )
18 env = new LuanTable();
19 UpValue.Getter envGetter = new UpValue.ValueGetter(env);
17 LuanParser parser = new LuanParser(src,envGetter); 20 LuanParser parser = new LuanParser(src,envGetter);
18 for( Map.Entry<Object,Object> entry : luan.global() ) { 21 for( Map.Entry<Object,Object> entry : luan.global() ) {
19 Object key = entry.getKey(); 22 Object key = entry.getKey();
20 if( key instanceof String ) 23 if( key instanceof String )
21 parser.addVar( (String)key, entry.getValue() ); 24 parser.addVar( (String)key, entry.getValue() );
22 } 25 }
23 FnDef fnDef = parse(luan,parser,allowExpr); 26 FnDef fnDef = parse(luan,parser,allowExpr);
24 if( env != null ) 27 if( passedEnv )
25 return new Closure((LuanStateImpl)luan,fnDef); 28 return new Closure((LuanStateImpl)luan,fnDef);
26 final Closure c = new Closure((LuanStateImpl)luan,fnDef); 29 final Closure c = new Closure((LuanStateImpl)luan,fnDef);
27 return new LuanFunction() { 30 return new LuanFunction() {
28 @Override public Object call(LuanState luan,Object[] args) throws LuanException { 31 @Override public Object call(LuanState luan,Object[] args) throws LuanException {
29 Object rtn = c.call(luan,args); 32 Object rtn = c.call(luan,args);