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;
 	}