Mercurial Hosting > luan
comparison core/src/luan/LuanState.java @ 320:fed1893821bf
remove global namespace
git-svn-id: https://luan-java.googlecode.com/svn/trunk@321 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Fri, 06 Feb 2015 21:54:41 +0000 |
parents | f6db49c294a7 |
children | 39c4ac11a58a |
comparison
equal
deleted
inserted
replaced
319:f6db49c294a7 | 320:fed1893821bf |
---|---|
19 public abstract class LuanState implements DeepCloneable<LuanState> { | 19 public abstract class LuanState implements DeepCloneable<LuanState> { |
20 | 20 |
21 final List<StackTraceElement> stackTrace = new ArrayList<StackTraceElement>(); | 21 final List<StackTraceElement> stackTrace = new ArrayList<StackTraceElement>(); |
22 | 22 |
23 private LuanTableImpl registry; | 23 private LuanTableImpl registry; |
24 private LuanTableImpl global; | |
25 private LuanTableImpl metatable; // generic metatable | 24 private LuanTableImpl metatable; // generic metatable |
26 | 25 |
27 protected LuanState() { | 26 protected LuanState() { |
28 registry = new LuanTableImpl(); | 27 registry = new LuanTableImpl(); |
29 global = new LuanTableImpl(); | |
30 global.put("_G",global); | |
31 global.put("java",JavaLuan.javaFn); | |
32 metatable = newMetatable(); | 28 metatable = newMetatable(); |
33 } | 29 } |
34 | 30 |
35 protected LuanState(LuanState luan) {} | 31 protected LuanState(LuanState luan) {} |
36 | 32 |
37 @Override public void deepenClone(LuanState clone,DeepCloner cloner) { | 33 @Override public void deepenClone(LuanState clone,DeepCloner cloner) { |
38 clone.registry = cloner.deepClone(registry); | 34 clone.registry = cloner.deepClone(registry); |
39 clone.global = cloner.deepClone(global); | |
40 clone.metatable = cloner.deepClone(metatable); | 35 clone.metatable = cloner.deepClone(metatable); |
41 } | 36 } |
42 | 37 |
43 public abstract LuanTable currentEnvironment(); | 38 public abstract LuanTable currentEnvironment(); |
44 public abstract LuanSource currentSource(); | 39 public abstract LuanSource currentSource(); |
45 | 40 |
46 public final LuanTable registry() { | 41 public final LuanTable registry() { |
47 return registry; | 42 return registry; |
48 } | 43 } |
49 | 44 |
50 public final LuanTable global() { | |
51 return global; | |
52 } | |
53 | |
54 public static LuanState newStandard() { | 45 public static LuanState newStandard() { |
55 try { | 46 try { |
56 LuanState luan = LuanCompiler.newLuanState(); | 47 LuanState luan = LuanCompiler.newLuanState(); |
57 PackageLuan.require(luan,"luan:Luan"); | 48 PackageLuan.require(luan,"luan:Luan"); |
58 PackageLuan.require(luan,"luan:Io"); | 49 PackageLuan.require(luan,"luan:Io"); |
59 // BasicLuan.do_file(luan,"classpath:luan/init.luan"); | |
60 return luan; | 50 return luan; |
61 } catch(LuanException e) { | 51 } catch(LuanException e) { |
62 throw new RuntimeException(e); | 52 throw new RuntimeException(e); |
63 } | 53 } |
64 } | 54 } |
65 | 55 |
66 public final Object eval(String cmd) { | 56 public final Object eval(String cmd) throws LuanException { |
67 return eval(cmd,new LuanTableImpl()); | 57 return eval(cmd,new LuanTableImpl()); |
68 } | 58 } |
69 | 59 |
70 public final Object eval(String cmd,LuanTable env) { | 60 public final Object eval(String cmd,LuanTable env) throws LuanException { |
71 try { | 61 LuanFunction fn = BasicLuan.load(this,cmd,"eval",env,true); |
72 LuanFunction fn = BasicLuan.load(this,cmd,"eval",env,true); | 62 return call(fn); |
73 return call(fn); | |
74 } catch(LuanException e) { | |
75 throw new RuntimeException(e); | |
76 } | |
77 } | 63 } |
78 | 64 |
79 public final LuanTable getMetatable(Object obj) { | 65 public final LuanTable getMetatable(Object obj) { |
80 if( obj==null ) | 66 if( obj==null ) |
81 return null; | 67 return null; |