Mercurial Hosting > luan
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) {