Mercurial Hosting > luan
diff 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 |
line wrap: on
line diff
--- a/core/src/luan/impl/Closure.java Wed Jul 02 04:52:25 2014 +0000 +++ b/core/src/luan/impl/Closure.java Thu Jul 03 08:19:48 2014 +0000 @@ -11,12 +11,14 @@ final class Closure extends LuanFunction implements DeepCloneable<Closure> { private final FnDef fnDef; + private MtGetterLink mtGetterLink; private UpValue[] upValues; - Closure(LuanStateImpl luan,FnDef fnDef) throws LuanException { + Closure(LuanStateImpl luan,FnDef fnDef,MtGetterLink mtGetterLink) throws LuanException { this.fnDef = fnDef; + this.mtGetterLink = mtGetterLink; UpValue.Getter[] upValueGetters = fnDef.upValueGetters; - upValues = new UpValue[upValueGetters.length]; + this.upValues = new UpValue[upValueGetters.length]; for( int i=0; i<upValues.length; i++ ) { upValues[i] = upValueGetters[i].get(luan); } @@ -31,9 +33,14 @@ } @Override public void deepenClone(Closure clone,DeepCloner cloner) { + clone.mtGetterLink = cloner.deepClone(mtGetterLink); clone.upValues = cloner.deepClone(upValues); } + MtGetterLink mtGetterLink() { + return mtGetterLink; + } + UpValue[] upValues() { return upValues; }