comparison core/src/luan/LuanTable.java @ 195:24ede40ee0aa

make MetatableGetter DeepCloneable, scoped, and secure git-svn-id: https://luan-java.googlecode.com/svn/trunk@196 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Thu, 03 Jul 2014 08:19:48 +0000
parents 3dcb0f9bee82
children be0275bda373
comparison
equal deleted inserted replaced
194:08df375e2e5f 195:24ede40ee0aa
16 16
17 public final class LuanTable implements DeepCloneable<LuanTable>, Iterable<Map.Entry<Object,Object>>, LuanRepr { 17 public final class LuanTable implements DeepCloneable<LuanTable>, Iterable<Map.Entry<Object,Object>>, LuanRepr {
18 private Map<Object,Object> map = null; 18 private Map<Object,Object> map = null;
19 private List<Object> list = null; 19 private List<Object> list = null;
20 private LuanTable metatable = null; 20 private LuanTable metatable = null;
21 public MetatableGetter metatableGetter = null; // used for modules
21 22
22 public LuanTable() {} 23 public LuanTable() {}
23 24
24 public LuanTable(LuanTable tbl) { 25 public LuanTable(LuanTable tbl) {
25 if( tbl.map != null ) 26 if( tbl.map != null )
60 @Override public LuanTable shallowClone() { 61 @Override public LuanTable shallowClone() {
61 return new LuanTable(); 62 return new LuanTable();
62 } 63 }
63 64
64 @Override public void deepenClone(LuanTable clone,DeepCloner cloner) { 65 @Override public void deepenClone(LuanTable clone,DeepCloner cloner) {
66 clone.metatableGetter = this.metatableGetter;
65 if( map != null ) { 67 if( map != null ) {
66 clone.map = new HashMap<Object,Object>(); 68 clone.map = new HashMap<Object,Object>();
67 for( Map.Entry<Object,Object> entry : map.entrySet() ) { 69 for( Map.Entry<Object,Object> entry : map.entrySet() ) {
68 clone.map.put( cloner.get(entry.getKey()), cloner.get(entry.getValue()) ); 70 clone.map.put( cloner.get(entry.getKey()), cloner.get(entry.getValue()) );
69 } 71 }