Mercurial Hosting > luan
diff core/src/luan/LuanState.java @ 202:75750ceb45ee
add LuanState.registry
git-svn-id: https://luan-java.googlecode.com/svn/trunk@203 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Fri, 04 Jul 2014 17:18:39 +0000 |
parents | 9fb218211763 |
children | 5ba136769034 |
line wrap: on
line diff
--- a/core/src/luan/LuanState.java Thu Jul 03 22:42:44 2014 +0000 +++ b/core/src/luan/LuanState.java Fri Jul 04 17:18:39 2014 +0000 @@ -17,72 +17,39 @@ final List<StackTraceElement> stackTrace = new ArrayList<StackTraceElement>(); + private LuanTable registry; private LuanTable global; - private LuanTable loaded; - private LuanTable preload; - private LuanTable searchers; - public final Set<String> blocked; protected LuanState() { + registry = new LuanTable(); global = new LuanTable(); global.put("_G",global); - loaded = new LuanTable(); - preload = new LuanTable(); - searchers = new LuanTable(); - blocked = new HashSet<String>(); } - protected LuanState(LuanState luan) { - blocked = new HashSet<String>(luan.blocked); - } + protected LuanState(LuanState luan) {} @Override public void deepenClone(LuanState clone,DeepCloner cloner) { + clone.registry = cloner.deepClone(registry); clone.global = cloner.deepClone(global); - clone.loaded = cloner.deepClone(loaded); - clone.preload = cloner.deepClone(preload); - clone.searchers = cloner.deepClone(searchers); } public abstract LuanTable currentEnvironment(); - public final LuanTable global() { - return global; - } - - public final LuanTable loaded() { - return loaded; - } - - public final LuanTable preload() { - return preload; - } - - public final LuanTable searchers() { - return searchers; + public final LuanTable registry() { + return registry; } - public final Object get(String name) { - String[] a = name.split("\\."); - LuanTable t = loaded; - for( int i=0; i<a.length-1; i++ ) { - Object obj = t.get(a[i]); - if( !(obj instanceof LuanTable) ) - return null; - t = (LuanTable)obj; + public final LuanTable registryTable(Object key) { + LuanTable tbl = (LuanTable)registry.get(key); + if( tbl == null ) { + tbl = new LuanTable(); + registry.put(key,tbl); } - return t.get(a[a.length-1]); + return tbl; } - public final Object set(String name,Object value) { - String[] a = name.split("\\."); - LuanTable t = loaded; - for( int i=0; i<a.length-1; i++ ) { - Object obj = t.get(a[i]); - if( !(obj instanceof LuanTable) ) - return null; - t = (LuanTable)obj; - } - return t.put(a[a.length-1],value); + public final LuanTable global() { + return global; } public static LuanState newStandard() {