Mercurial Hosting > luan
annotate src/luan/LuanFunction.java @ 1561:e1a13e707bf3
start immutable
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 05 Nov 2020 20:24:09 -0700 |
parents | e0cf0d108a77 |
children | 8fbcc4747091 |
rev | line source |
---|---|
1
2df768b926aa
start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
1 package luan; |
2df768b926aa
start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
2 |
2df768b926aa
start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
3 |
1335 | 4 public abstract class LuanFunction implements LuanCloneable, Cloneable { |
5 private Luan luan; | |
6 private LuanCloner cloner; | |
7 private boolean clone; | |
8 | |
9 public LuanFunction(Luan luan) { | |
10 if( luan==null ) throw new NullPointerException(); | |
11 this.luan = luan; | |
12 this.clone = true; | |
13 } | |
14 | |
15 public LuanFunction(boolean clone) { | |
16 this.clone = clone; | |
17 } | |
18 | |
19 // for LuanJavaFunction | |
20 void dontClone() { | |
21 luan = null; | |
22 clone = false; | |
23 } | |
24 | |
25 @Override public LuanFunction shallowClone() { | |
26 if( !clone ) | |
27 return this; | |
28 check(); | |
29 try { | |
30 return (LuanFunction)clone(); | |
31 } catch(CloneNotSupportedException e) { | |
32 throw new RuntimeException(e); | |
33 } | |
34 } | |
1
2df768b926aa
start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
35 |
1335 | 36 private void check() { |
37 if( cloner != null ) { | |
38 completeClone(this,cloner); | |
39 cloner = null; | |
40 } | |
41 } | |
42 | |
43 @Override public void deepenClone(LuanCloneable dc,LuanCloner cloner) { | |
44 if( !clone ) | |
45 return; | |
46 LuanFunction clone = (LuanFunction)dc; | |
47 switch( cloner.type ) { | |
48 case COMPLETE: | |
49 completeClone(clone,cloner); | |
50 return; | |
51 case INCREMENTAL: | |
52 clone.cloner = cloner; | |
53 return; | |
54 } | |
55 } | |
56 | |
57 protected void completeClone(LuanFunction clone,LuanCloner cloner) { | |
58 clone.luan = (Luan)cloner.clone(luan); | |
59 } | |
60 | |
1561 | 61 @Override public void makeImmutable(LuanImmutabler immutabler) throws LuanException { |
62 immutabler.makeImmutable(luan); | |
63 } | |
64 | |
1335 | 65 public Luan luan() { |
66 check(); | |
67 return luan; | |
68 } | |
69 | |
70 public abstract Object call(Object... args) throws LuanException; | |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
1
diff
changeset
|
71 |
123
d7be9b3abf1a
minor - rename LuanFunction.EMPTY to NOTHING
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
111
diff
changeset
|
72 public static final Object[] NOTHING = new Object[0]; |
1
2df768b926aa
start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
73 |
2df768b926aa
start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
74 @Override public String toString() { |
422 | 75 return "function: " + Integer.toHexString(hashCode()); |
1
2df768b926aa
start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
76 } |
2df768b926aa
start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
77 |
2df768b926aa
start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
78 } |