Mercurial Hosting > luan
comparison src/luan/LuanFunction.java @ 1335:e0cf0d108a77
major cleanup
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 14 Feb 2019 03:10:45 -0700 |
parents | 25746915a241 |
children | e1a13e707bf3 |
comparison
equal
deleted
inserted
replaced
1334:c88b486a9511 | 1335:e0cf0d108a77 |
---|---|
1 package luan; | 1 package luan; |
2 | 2 |
3 | 3 |
4 public abstract class LuanFunction { | 4 public abstract class LuanFunction implements LuanCloneable, Cloneable { |
5 private Luan luan; | |
6 private LuanCloner cloner; | |
7 private boolean clone; | |
5 | 8 |
6 public abstract Object call(Luan luan,Object[] args) throws LuanException; | 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 } | |
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 public Luan luan() { | |
62 check(); | |
63 return luan; | |
64 } | |
65 | |
66 public abstract Object call(Object... args) throws LuanException; | |
7 | 67 |
8 public static final Object[] NOTHING = new Object[0]; | 68 public static final Object[] NOTHING = new Object[0]; |
9 | |
10 public final Object call(Luan luan) throws LuanException { | |
11 return call(luan,NOTHING); | |
12 } | |
13 | 69 |
14 @Override public String toString() { | 70 @Override public String toString() { |
15 return "function: " + Integer.toHexString(hashCode()); | 71 return "function: " + Integer.toHexString(hashCode()); |
16 } | 72 } |
17 | 73 |