diff core/src/luan/impl/Closure.java @ 672:d3e5414bdf4c

better java permission handling
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 12 Apr 2016 17:03:30 -0600
parents 58ebfec6178b
children f1c935be546d
line wrap: on
line diff
--- a/core/src/luan/impl/Closure.java	Tue Apr 12 14:44:10 2016 -0600
+++ b/core/src/luan/impl/Closure.java	Tue Apr 12 17:03:30 2016 -0600
@@ -6,13 +6,16 @@
 import luan.LuanException;
 import luan.DeepCloner;
 import luan.DeepCloneable;
+import luan.LuanJava;
 
 
 public abstract class Closure extends LuanFunction implements DeepCloneable, Cloneable {
 	public Pointer[] upValues;
+	public LuanJava java;
 
-	public Closure(int nUpValues) throws LuanException {
+	public Closure(int nUpValues,LuanJava java) throws LuanException {
 		this.upValues = new Pointer[nUpValues];
+		this.java = java;
 	}
 
 	@Override public Closure shallowClone() {
@@ -23,18 +26,19 @@
 		}
 	}
 
-	@Override public void deepenClone(DeepCloneable clone,DeepCloner cloner) {
-		((Closure)clone).upValues = (Pointer[])cloner.deepClone(upValues);
+	@Override public void deepenClone(DeepCloneable dc,DeepCloner cloner) {
+		Closure clone = (Closure)dc;
+		clone.upValues = (Pointer[])cloner.deepClone(upValues);
+		clone.java = (LuanJava)cloner.deepClone(java);
 	}
 
-	@Override public final Object call(LuanState ls,Object[] args) throws LuanException {
-		LuanStateImpl luan = (LuanStateImpl)ls;
-		Closure old = luan.closure;
-		luan.closure = this;
+	@Override public final Object call(LuanState luan,Object[] args) throws LuanException {
+		LuanJava old = luan.java;
+		luan.java = java;
 		try {
 			return doCall(luan,args);
 		} finally {
-			luan.closure = old;
+			luan.java = old;
 		}	
 	}