Mercurial Hosting > luan
annotate src/luan/LuanClosure.java @ 1506:d80395468b4e
ssl security in code
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 15 May 2020 18:29:47 -0600 |
parents | 221eedb0f54e |
children | e1a13e707bf3 |
rev | line source |
---|---|
1330 | 1 package luan; |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
2 |
1330 | 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 | 6 public abstract class LuanClosure extends LuanFunction { |
1330 | 7 public Pointer[] upValues; |
8 public boolean javaOk; | |
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 | 12 super(luan); |
1400
221eedb0f54e
fix inner class gc bug
Franklin Schmidt <fschmidt@gmail.com>
parents:
1347
diff
changeset
|
13 this.upValues = upValues; |
1133 | 14 this.javaOk = javaOk; |
1330 | 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 | 18 @Override protected void completeClone(LuanFunction dc,LuanCloner cloner) { |
19 LuanClosure clone = (LuanClosure)dc; | |
20 clone.upValues = (Pointer[])cloner.clone(upValues); | |
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 |
1400
221eedb0f54e
fix inner class gc bug
Franklin Schmidt <fschmidt@gmail.com>
parents:
1347
diff
changeset
|
24 @Override public final Object call(Object... args) throws LuanException { |
1335 | 25 Luan luan = luan(); |
1330 | 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 | 29 } catch(StackOverflowError e) { |
1347
643cf1c37723
move webserver to lib and bug fixes
Franklin Schmidt <fschmidt@gmail.com>
parents:
1335
diff
changeset
|
30 throw new LuanException( "stack overflow", e ); |
659
f1150518c467
remove tail recursion
Franklin Schmidt <fschmidt@gmail.com>
parents:
646
diff
changeset
|
31 } finally { |
1330 | 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 | 36 @Override public String toString() { |
37 return super.toString()+"="+sourceName; | |
38 } | |
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 } |