Mercurial Hosting > luan
comparison core/src/luan/impl/Closure.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 | 5ba136769034 |
comparison
equal
deleted
inserted
replaced
194:08df375e2e5f | 195:24ede40ee0aa |
---|---|
9 import luan.DeepCloneable; | 9 import luan.DeepCloneable; |
10 | 10 |
11 | 11 |
12 final class Closure extends LuanFunction implements DeepCloneable<Closure> { | 12 final class Closure extends LuanFunction implements DeepCloneable<Closure> { |
13 private final FnDef fnDef; | 13 private final FnDef fnDef; |
14 private MtGetterLink mtGetterLink; | |
14 private UpValue[] upValues; | 15 private UpValue[] upValues; |
15 | 16 |
16 Closure(LuanStateImpl luan,FnDef fnDef) throws LuanException { | 17 Closure(LuanStateImpl luan,FnDef fnDef,MtGetterLink mtGetterLink) throws LuanException { |
17 this.fnDef = fnDef; | 18 this.fnDef = fnDef; |
19 this.mtGetterLink = mtGetterLink; | |
18 UpValue.Getter[] upValueGetters = fnDef.upValueGetters; | 20 UpValue.Getter[] upValueGetters = fnDef.upValueGetters; |
19 upValues = new UpValue[upValueGetters.length]; | 21 this.upValues = new UpValue[upValueGetters.length]; |
20 for( int i=0; i<upValues.length; i++ ) { | 22 for( int i=0; i<upValues.length; i++ ) { |
21 upValues[i] = upValueGetters[i].get(luan); | 23 upValues[i] = upValueGetters[i].get(luan); |
22 } | 24 } |
23 } | 25 } |
24 | 26 |
29 @Override public Closure shallowClone() { | 31 @Override public Closure shallowClone() { |
30 return new Closure(this); | 32 return new Closure(this); |
31 } | 33 } |
32 | 34 |
33 @Override public void deepenClone(Closure clone,DeepCloner cloner) { | 35 @Override public void deepenClone(Closure clone,DeepCloner cloner) { |
36 clone.mtGetterLink = cloner.deepClone(mtGetterLink); | |
34 clone.upValues = cloner.deepClone(upValues); | 37 clone.upValues = cloner.deepClone(upValues); |
38 } | |
39 | |
40 MtGetterLink mtGetterLink() { | |
41 return mtGetterLink; | |
35 } | 42 } |
36 | 43 |
37 UpValue[] upValues() { | 44 UpValue[] upValues() { |
38 return upValues; | 45 return upValues; |
39 } | 46 } |