annotate src/luan/LuanClosure.java @ 1335:e0cf0d108a77

major cleanup
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 14 Feb 2019 03:10:45 -0700
parents 25746915a241
children 643cf1c37723
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
1 package luan;
21
c93d8c781853 add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
2
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
3 import luan.impl.Pointer;
21
c93d8c781853 add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
4
c93d8c781853 add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
5
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
6 public abstract class LuanClosure extends LuanFunction {
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
7 public Pointer[] upValues;
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
8 public boolean javaOk;
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
9 public final String sourceName;
21
c93d8c781853 add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
10
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
11 public LuanClosure(Luan luan,int nUpValues,boolean javaOk,String sourceName) throws LuanException {
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
12 super(luan);
670
58ebfec6178b all luan now compiles
Franklin Schmidt <fschmidt@gmail.com>
parents: 668
diff changeset
13 this.upValues = new Pointer[nUpValues];
1133
ba4daf107e07 fix security bug
Franklin Schmidt <fschmidt@gmail.com>
parents: 787
diff changeset
14 this.javaOk = javaOk;
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
15 this.sourceName = sourceName;
21
c93d8c781853 add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
16 }
c93d8c781853 add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
17
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
18 @Override protected void completeClone(LuanFunction dc,LuanCloner cloner) {
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
19 LuanClosure clone = (LuanClosure)dc;
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
20 clone.upValues = (Pointer[])cloner.clone(upValues);
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
21 super.completeClone(dc,cloner);
77
4bf3d0c0b6b9 make LuanState cloneable
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 49
diff changeset
22 }
4bf3d0c0b6b9 make LuanState cloneable
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 49
diff changeset
23
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
24 @Override public final Object call(Object[] args) throws LuanException {
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
25 Luan luan = luan();
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
26 luan.push(this);
659
f1150518c467 remove tail recursion
Franklin Schmidt <fschmidt@gmail.com>
parents: 646
diff changeset
27 try {
670
58ebfec6178b all luan now compiles
Franklin Schmidt <fschmidt@gmail.com>
parents: 668
diff changeset
28 return doCall(luan,args);
681
f1c935be546d improve stack trace
Franklin Schmidt <fschmidt@gmail.com>
parents: 672
diff changeset
29 } catch(StackOverflowError e) {
f1c935be546d improve stack trace
Franklin Schmidt <fschmidt@gmail.com>
parents: 672
diff changeset
30 throw new LuanException( "stack overflow" );
659
f1150518c467 remove tail recursion
Franklin Schmidt <fschmidt@gmail.com>
parents: 646
diff changeset
31 } finally {
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
32 luan.pop();
670
58ebfec6178b all luan now compiles
Franklin Schmidt <fschmidt@gmail.com>
parents: 668
diff changeset
33 }
21
c93d8c781853 add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
34 }
c93d8c781853 add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
35
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
36 @Override public String toString() {
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
37 return super.toString()+"="+sourceName;
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
38 }
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
39
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
40 public abstract Object doCall(Luan luan,Object[] args) throws LuanException;
21
c93d8c781853 add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
41 }