diff src/luan/LuanTable.java @ 1562:b89212fd04b5

remove table.luan
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 08 Nov 2020 16:50:59 -0700
parents e1a13e707bf3
children 8fbcc4747091
line wrap: on
line diff
--- a/src/luan/LuanTable.java	Thu Nov 05 20:24:09 2020 -0700
+++ b/src/luan/LuanTable.java	Sun Nov 08 16:50:59 2020 -0700
@@ -14,51 +14,55 @@
 
 
 public final class LuanTable implements LuanCloneable {
-	private Luan luan;
 	private Map map = null;
 	private List list = null;
 	private LuanTable metatable = null;
 	public LuanClosure closure;
 	private LuanCloner cloner;
-	private String security = null;
 	private boolean immutable = false;
 
-	public LuanTable(Luan luan) {
-		this.luan = luan;
-	}
+	public LuanTable() {}
 
-	public LuanTable(Luan luan,List list) {
-		this.luan = luan;
-		list();
-		int n = list.size();
-		for( int i=0; i<n; i++ ) {
-			Object val = list.get(i);
-			if( val != null )
-				rawPut2(i+1,val);
+	public LuanTable(List list) {
+		try {
+			list();
+			int n = list.size();
+			for( int i=0; i<n; i++ ) {
+				Object val = list.get(i);
+				if( val != null )
+					rawPut(i+1,val);
+			}
+		} catch(LuanException e) {
+			throw new RuntimeException(e);
 		}
 	}
 
-	public LuanTable(Luan luan,Map map) {
-		this.luan = luan;
-		for( Object stupid : map.entrySet() ) {
-			Map.Entry entry = (Map.Entry)stupid;
-			Object key = entry.getKey();
-			Object value = entry.getValue();
-			if( key != null && value != null )
-				rawPut2(key,value);
+	public LuanTable(Map map) {
+		try {
+			for( Object stupid : map.entrySet() ) {
+				Map.Entry entry = (Map.Entry)stupid;
+				Object key = entry.getKey();
+				Object value = entry.getValue();
+				if( key != null && value != null )
+					rawPut(key,value);
+			}
+		} catch(LuanException e) {
+			throw new RuntimeException(e);
 		}
 	}
 
-	public LuanTable(Luan luan,Set set) {
-		this.luan = luan;
-		for( Object el : set ) {
-			if( el != null )
-				rawPut2(el,Boolean.TRUE);
+	public LuanTable(Set set) {
+		try {
+			for( Object el : set ) {
+				if( el != null )
+					rawPut(el,Boolean.TRUE);
+			}
+		} catch(LuanException e) {
+			throw new RuntimeException(e);
 		}
 	}
 
 	public LuanTable(LuanTable tbl) {
-		this.luan = tbl.luan;
 		if( tbl.map != null && !tbl.map.isEmpty() )
 			this.map = new LinkedHashMap<Object,Object>(tbl.map);
 		if( tbl.rawLength() > 0 )
@@ -68,13 +72,12 @@
 
 	@Override public LuanTable shallowClone() {
 		if(immutable) throw new RuntimeException();
-		return new LuanTable(luan);
+		return new LuanTable();
 	}
 
 	@Override public void deepenClone(LuanCloneable dc,LuanCloner cloner) {
 		check();
 		LuanTable clone = (LuanTable)dc;
-		clone.security = security;
 		switch( cloner.type ) {
 		case COMPLETE:
 			completeClone(clone,cloner);
@@ -96,13 +99,7 @@
 		}
 	}
 
-	public Luan luan() {
-		check();
-		return luan;
-	}
-
 	private void completeClone(LuanTable clone,LuanCloner cloner) {
-		clone.luan = (Luan)cloner.clone(luan);
 		clone.map = cloner.clone(map);
 		clone.list = (List)cloner.clone(list);
 		clone.metatable = (LuanTable)cloner.clone(metatable);
@@ -111,7 +108,6 @@
 
 	@Override public void makeImmutable(LuanImmutabler immutabler) throws LuanException {
 		check();
-		immutabler.makeImmutable(luan);
 		immutabler.makeImmutable(map);
 		immutabler.makeImmutable(list);
 		immutabler.makeImmutable(metatable);
@@ -149,7 +145,7 @@
 		return "table: " + Integer.toHexString(hashCode());
 	}
 
-	public Object get(Object key) throws LuanException {
+	public Object get(Luan luan,Object key) throws LuanException {
 		Object value = rawGet(key);
 		if( value != null )
 			return value;
@@ -182,7 +178,7 @@
 		return map.get(key);
 	}
 
-	public void put(Object key,Object value) throws LuanException {
+	public void put(Luan luan,Object key,Object value) throws LuanException {
 		Object h = getHandler("__new_index");
 		if( h==null || rawGet(key)!=null ) {
 			rawPut(key,value);
@@ -195,7 +191,7 @@
 		}
 		if( h instanceof LuanTable ) {
 			LuanTable tbl = (LuanTable)h;
-			tbl.put(key,value);
+			tbl.put(luan,key,value);
 			return;
 		}
 		throw new LuanException("invalid type "+Luan.type(h)+" for metamethod __new_index");
@@ -204,12 +200,6 @@
 	public Object rawPut(Object key,Object val) throws LuanException {
 		if( immutable )
 			throw new LuanException("table is immutable");
-		if( security != null )
-			Luan.checkSecurity(luan,"table",security,"put",key,val);
-		return rawPut2(key,val);
-	}
-
-	private Object rawPut2(Object key,Object val) {
 		check();
 		Integer iT = Luan.asInteger(key);
 		if( iT != null ) {
@@ -458,7 +448,7 @@
 
 	public LuanTable rawSubList(int from,int to) {
 		check();
-		LuanTable tbl = new LuanTable(luan);
+		LuanTable tbl = new LuanTable();
 		tbl.list = new ArrayList<Object>(list().subList(from-1,to-1));
 		return tbl;
 	}
@@ -469,15 +459,13 @@
 	}
 
 	public void setMetatable(LuanTable metatable) throws LuanException {
-		if( security != null )
-			Luan.checkSecurity(luan,"table",security,"set_metatable",metatable);
 		check();
 		this.metatable = metatable;
 	}
 
 	public Object getHandler(String op) throws LuanException {
 		check();
-		return metatable==null ? null : metatable.get(op);
+		return metatable==null ? null : metatable.rawGet(op);
 	}
 
 	private static Map<Object,Object> newMap() {
@@ -540,7 +528,7 @@
 		if( immutable )
 			throw new LuanException("table is immutable");
 		Object old = rawGet(key);
-		rawPut2(key,null);
+		rawPut(key,null);
 		return old;
 	}
 
@@ -553,12 +541,8 @@
 		super.finalize();
 	}
 
-	public LuanFunction fn(String fnName) throws LuanException {
-		return (LuanFunction)get(fnName);
-	}
-
-	public static void setSecurity(LuanTable tbl,String security) {
-		tbl.security = security;
+	public LuanFunction fn(Luan luan,String fnName) throws LuanException {
+		return (LuanFunction)get(luan,fnName);
 	}
 
 	public static void debug(LuanTable table) {