diff core/src/luan/LuanJavaFunction.java @ 197:4c96cb73dd93

fix metatable cloning git-svn-id: https://luan-java.googlecode.com/svn/trunk@198 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Thu, 03 Jul 2014 18:36:46 +0000
parents 3dcb0f9bee82
children 239c8d650028
line wrap: on
line diff
--- a/core/src/luan/LuanJavaFunction.java	Thu Jul 03 18:03:53 2014 +0000
+++ b/core/src/luan/LuanJavaFunction.java	Thu Jul 03 18:36:46 2014 +0000
@@ -11,9 +11,9 @@
 import java.util.Arrays;
 
 
-public final class LuanJavaFunction extends LuanFunction {
+public final class LuanJavaFunction extends LuanFunction implements DeepCloneable<LuanJavaFunction> {
 	private final JavaMethod method;
-	private final Object obj;
+	private Object obj;
 	private final RtnConverter rtnConverter;
 	private final boolean takesLuaState;
 	private final ArgConverter[] argConverters;
@@ -41,6 +41,22 @@
 		}
 	}
 
+	private LuanJavaFunction(LuanJavaFunction f) {
+		this.method = f.method;
+		this.rtnConverter = f.rtnConverter;
+		this.takesLuaState = f.takesLuaState;
+		this.argConverters = f.argConverters;
+		this.varArgCls = f.varArgCls;
+	}
+
+	@Override public LuanJavaFunction shallowClone() {
+		return obj==null ? this : new LuanJavaFunction(this);
+	}
+
+	@Override public void deepenClone(LuanJavaFunction clone,DeepCloner cloner) {
+		clone.obj = cloner.get(obj);
+	}
+
 	@Override public String toString() {
 		return "java-function: " + method;
 	}