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() {