Mercurial Hosting > luan
comparison src/luan/LuanFunction.java @ 1563:8fbcc4747091
remove LuanFunction.luan
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 09 Nov 2020 01:37:57 -0700 |
parents | e1a13e707bf3 |
children |
comparison
equal
deleted
inserted
replaced
1562:b89212fd04b5 | 1563:8fbcc4747091 |
---|---|
1 package luan; | 1 package luan; |
2 | 2 |
3 | 3 |
4 public abstract class LuanFunction implements LuanCloneable, Cloneable { | 4 public abstract class LuanFunction { |
5 private Luan luan; | |
6 private LuanCloner cloner; | |
7 private boolean clone; | |
8 | 5 |
9 public LuanFunction(Luan luan) { | 6 public abstract Object call(Luan luan,Object... args) throws LuanException; |
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 } | |
35 | |
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 | |
61 @Override public void makeImmutable(LuanImmutabler immutabler) throws LuanException { | |
62 immutabler.makeImmutable(luan); | |
63 } | |
64 | |
65 public Luan luan() { | |
66 check(); | |
67 return luan; | |
68 } | |
69 | |
70 public abstract Object call(Object... args) throws LuanException; | |
71 | 7 |
72 public static final Object[] NOTHING = new Object[0]; | 8 public static final Object[] NOTHING = new Object[0]; |
73 | 9 |
74 @Override public String toString() { | 10 @Override public String toString() { |
75 return "function: " + Integer.toHexString(hashCode()); | 11 return "function: " + Integer.toHexString(hashCode()); |