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