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;