Mercurial Hosting > luan
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 ) {