Mercurial Hosting > luan
changeset 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 | c9100f29fae0 |
files | src/luan/LuanState.java src/luan/interp/LuanCompiler.java src/luan/lib/PickleCon.java src/luan/lib/init.luan |
diffstat | 4 files changed, 7 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
diff -r f99fd64291b3 -r f35c50027985 src/luan/LuanState.java --- a/src/luan/LuanState.java Mon Jun 16 05:47:54 2014 +0000 +++ b/src/luan/LuanState.java Mon Jun 16 10:11:48 2014 +0000 @@ -152,7 +152,7 @@ public final Object eval(String cmd) { try { - LuanFunction fn = BasicLib.load(this,cmd,"eval",null,true); + LuanFunction fn = BasicLib.load(this,cmd,"eval",new LuanTable(),true); return call(fn); } catch(LuanException e) { throw new RuntimeException(e);
diff -r f99fd64291b3 -r f35c50027985 src/luan/interp/LuanCompiler.java --- 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 ) {
diff -r f99fd64291b3 -r f35c50027985 src/luan/lib/PickleCon.java --- a/src/luan/lib/PickleCon.java Mon Jun 16 05:47:54 2014 +0000 +++ b/src/luan/lib/PickleCon.java Mon Jun 16 10:11:48 2014 +0000 @@ -27,7 +27,7 @@ private final DataOutputStream out; private final List<byte[]> binaries = new ArrayList<byte[]>(); String src; - private final LuanTable env; + private final LuanTable env = new LuanTable(); PickleCon(LuanState luan,DataInputStream in,DataOutputStream out) { this.in = in; @@ -40,7 +40,6 @@ throw new RuntimeException(e); } this.ioModule = (LuanTable)luan.loaded().get("Io"); - this.env = new LuanTable(luan.global()); this.out = out; }
diff -r f99fd64291b3 -r f35c50027985 src/luan/lib/init.luan --- a/src/luan/lib/init.luan Mon Jun 16 05:47:54 2014 +0000 +++ b/src/luan/lib/init.luan Mon Jun 16 10:11:48 2014 +0000 @@ -50,20 +50,12 @@ end end -function Table.clone(tbl) - local new = {} - for k,v in _G.pairs(tbl) do - new[k] = v - end - return new -end - function Debug.debug(prompt) prompt = prompt or "luan_debug> " local function console() return Io.read_console_line(prompt) end - local env = Table.clone(_G) + local env = {} for line in console do try local fn = _G.load(line,"stdin",env,true)