comparison core/src/luan/LuanTable.java @ 503:92c3d22745b8

make _ENV optional
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 20 May 2015 23:24:46 -0600
parents d3183a330ff5
children e3b0846dc2ef
comparison
equal deleted inserted replaced
502:d3183a330ff5 503:92c3d22745b8
20 20
21 public final class LuanTable implements DeepCloneable { 21 public final class LuanTable implements DeepCloneable {
22 private Map map = null; 22 private Map map = null;
23 private List list = null; 23 private List list = null;
24 private LuanTable metatable = null; 24 private LuanTable metatable = null;
25 private boolean hasJava = false;
26 25
27 public LuanTable() {} 26 public LuanTable() {}
28 27
29 public LuanTable(List list) { 28 public LuanTable(List list) {
30 int n = list.size(); 29 int n = list.size();
79 clone.list.add( cloner.get(obj) ); 78 clone.list.add( cloner.get(obj) );
80 } 79 }
81 } 80 }
82 if( metatable != null ) 81 if( metatable != null )
83 clone.metatable = (LuanTable)cloner.get(metatable); 82 clone.metatable = (LuanTable)cloner.get(metatable);
84 clone.hasJava = hasJava;
85 } 83 }
86 84
87 public boolean isList() { 85 public boolean isList() {
88 return map==null || map.isEmpty(); 86 return map==null || map.isEmpty();
89 } 87 }
134 } 132 }
135 if( obj instanceof String ) 133 if( obj instanceof String )
136 return StringLuan.__index(luan,(String)obj,key); 134 return StringLuan.__index(luan,(String)obj,key);
137 if( obj instanceof byte[] ) 135 if( obj instanceof byte[] )
138 return BinaryLuan.__index(luan,(byte[])obj,key); 136 return BinaryLuan.__index(luan,(byte[])obj,key);
139 if( obj != null && luan.currentEnvironment().hasJava() ) 137 if( obj != null && luan.hasJava() )
140 return JavaLuan.__index(luan,obj,key); 138 return JavaLuan.__index(luan,obj,key);
141 else if( bit.el==null ) 139 else if( bit.el==null )
142 throw bit.exception( "attempt to index a " + Luan.type(obj) + " value" ); 140 throw bit.exception( "attempt to index a " + Luan.type(obj) + " value" );
143 else 141 else
144 throw bit.exception( "attempt to index '"+bit.el.text()+"' (a " + Luan.type(obj) + " value)" ); 142 throw bit.exception( "attempt to index '"+bit.el.text()+"' (a " + Luan.type(obj) + " value)" );
432 430
433 public Object getHandler(String op) { 431 public Object getHandler(String op) {
434 return metatable==null ? null : metatable.rawGet(op); 432 return metatable==null ? null : metatable.rawGet(op);
435 } 433 }
436 434
437 public boolean hasJava() {
438 return hasJava;
439 }
440
441 public void setJava() {
442 hasJava = true;
443 }
444
445 private Map<Object,Object> newMap() { 435 private Map<Object,Object> newMap() {
446 return new LinkedHashMap<Object,Object>(); 436 return new LinkedHashMap<Object,Object>();
447 } 437 }
448 438
449 public boolean isSet(LuanState luan) throws LuanException { 439 public boolean isSet(LuanState luan) throws LuanException {