Mercurial Hosting > luan
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; } }