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());