annotate src/luan/LuanClosure.java @ 1561:e1a13e707bf3

start immutable
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 05 Nov 2020 20:24:09 -0700
parents 221eedb0f54e
children 8fbcc4747091
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
1400
221eedb0f54e fix inner class gc bug
Franklin Schmidt <fschmidt@gmail.com>
parents: 1347
diff changeset
11 public LuanClosure(Luan luan,Pointer[] upValues,boolean javaOk,String sourceName) throws LuanException {
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
12 super(luan);
1400
221eedb0f54e fix inner class gc bug
Franklin Schmidt <fschmidt@gmail.com>
parents: 1347
diff changeset
13 this.upValues = upValues;
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
1561
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 1400
diff changeset
24 @Override public void makeImmutable(LuanImmutabler immutabler) throws LuanException {
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 1400
diff changeset
25 immutabler.makeImmutable(upValues);
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 1400
diff changeset
26 super.makeImmutable(immutabler);
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 1400
diff changeset
27 }
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 1400
diff changeset
28
1400
221eedb0f54e fix inner class gc bug
Franklin Schmidt <fschmidt@gmail.com>
parents: 1347
diff changeset
29 @Override public final Object call(Object... args) throws LuanException {
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
30 Luan luan = luan();
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
31 luan.push(this);
659
f1150518c467 remove tail recursion
Franklin Schmidt <fschmidt@gmail.com>
parents: 646
diff changeset
32 try {
670
58ebfec6178b all luan now compiles
Franklin Schmidt <fschmidt@gmail.com>
parents: 668
diff changeset
33 return doCall(luan,args);
681
f1c935be546d improve stack trace
Franklin Schmidt <fschmidt@gmail.com>
parents: 672
diff changeset
34 } catch(StackOverflowError e) {
1347
643cf1c37723 move webserver to lib and bug fixes
Franklin Schmidt <fschmidt@gmail.com>
parents: 1335
diff changeset
35 throw new LuanException( "stack overflow", e );
659
f1150518c467 remove tail recursion
Franklin Schmidt <fschmidt@gmail.com>
parents: 646
diff changeset
36 } finally {
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
37 luan.pop();
670
58ebfec6178b all luan now compiles
Franklin Schmidt <fschmidt@gmail.com>
parents: 668
diff changeset
38 }
21
c93d8c781853 add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
39 }
c93d8c781853 add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
40
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
41 @Override public String toString() {
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
42 return super.toString()+"="+sourceName;
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
43 }
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
44
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
45 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
46 }