diff options
author | Rich Hickey <richhickey@gmail.com> | 2007-07-04 19:26:42 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2007-07-04 19:26:42 +0000 |
commit | 296da9b329a1a7f07a8a8baeed2c59439e24e889 (patch) | |
tree | 39a657806348c6ef576dde395f479f4c086741be /src | |
parent | 829f3e3fb7908c958355ccde936c62c4ddc8099c (diff) |
interim checkin
Diffstat (limited to 'src')
-rw-r--r-- | src/jvm/clojure/lang/AFn.java | 13 | ||||
-rw-r--r-- | src/jvm/clojure/lang/APersistentMap.java | 22 | ||||
-rw-r--r-- | src/jvm/clojure/lang/ASeq.java | 15 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 66 | ||||
-rw-r--r-- | src/jvm/clojure/lang/LispReader.java | 2 | ||||
-rw-r--r-- | src/jvm/clojure/lang/MapEntry.java | 13 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Obj.java | 29 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentArrayMap.java | 20 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentHashMap.java | 42 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentList.java | 2 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentTreeMap.java | 21 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 2 | ||||
-rw-r--r-- | src/jvm/clojure/lang/TRef.java | 134 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Transaction.java | 2 |
14 files changed, 265 insertions, 118 deletions
diff --git a/src/jvm/clojure/lang/AFn.java b/src/jvm/clojure/lang/AFn.java index 8fa5fd33..6e79f307 100644 --- a/src/jvm/clojure/lang/AFn.java +++ b/src/jvm/clojure/lang/AFn.java @@ -416,17 +416,4 @@ static public Object applyToHelper(IFn ifn, ISeq arglist) throws Exception { public static Object throwArity() { throw new IllegalArgumentException("Wrong number of args passed"); } - -public Obj withMeta(IPersistentMap meta) { - try - { - Obj ret = (Obj) clone(); - ret._meta = meta; - return ret; - } - catch (CloneNotSupportedException ignore) - { - return null; - } -} } diff --git a/src/jvm/clojure/lang/APersistentMap.java b/src/jvm/clojure/lang/APersistentMap.java index bde64c2d..b986358c 100644 --- a/src/jvm/clojure/lang/APersistentMap.java +++ b/src/jvm/clojure/lang/APersistentMap.java @@ -10,22 +10,16 @@ package clojure.lang;
-public abstract class APersistentMap extends Obj implements IPersistentMap, Cloneable{
+public abstract class APersistentMap extends Obj implements IPersistentMap{
int _hash = -1;
-public Obj withMeta(IPersistentMap meta){
- if(_meta == meta)
- return this;
- try
- {
- Obj ret = (Obj) clone();
- ret._meta = meta;
- return ret;
- }
- catch(CloneNotSupportedException ignore)
- {
- return null;
- }
+
+protected APersistentMap(IPersistentMap meta){
+ super(meta);
+}
+
+
+protected APersistentMap(){
}
public IPersistentCollection cons(Object o){
diff --git a/src/jvm/clojure/lang/ASeq.java b/src/jvm/clojure/lang/ASeq.java index 0a4b2c12..aa2893d3 100644 --- a/src/jvm/clojure/lang/ASeq.java +++ b/src/jvm/clojure/lang/ASeq.java @@ -62,19 +62,4 @@ public ISeq cons(Object o) { return new Cons(o, this);
}
-
-public Obj withMeta(IPersistentMap meta) {
- if(_meta == meta)
- return this;
- try{
- Obj ret = (Obj) clone();
- ret._meta = meta;
- return ret;
- }
- catch(CloneNotSupportedException ignore)
- {
- return null;
- }
-}
-
}
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java index d3b9c72c..d6a384ad 100644 --- a/src/jvm/clojure/lang/Compiler.java +++ b/src/jvm/clojure/lang/Compiler.java @@ -1342,11 +1342,11 @@ static class FnExpr extends AnExpr{ for(ISeq keys = RT.seq(m.keyParms); keys != null; keys = keys.rest()) { KeyParam key = (KeyParam) keys.first(); - KeywordExpr kw = registerKeyword((Keyword) Symbol.intern(":" + key.bindingExpression.b.sym.name)); - format("__valseq = RT.findKey(~A,__keys);~%", kw.emitExpressionString()); - key.bindingExpression.b.emitDeclaration( - (String) RT.format(null, "(__valseq!=null)?clojure.lang.RT.first(__valseq):~A" - , key.init.emitExpressionString())); +// KeywordExpr kw = registerKeyword((Keyword) Symbol.intern(":" + key.bindingExpression.b.sym.name)); +// format("__valseq = RT.findKey(~A,__keys);~%", kw.emitExpressionString()); +// key.bindingExpression.b.emitDeclaration( +// (String) RT.format(null, "(__valseq!=null)?clojure.lang.RT.first(__valseq):~A" +// , key.init.emitExpressionString())); } } @@ -1490,7 +1490,7 @@ private static Expr analyzeDef(C context, ISeq form) throws Exception{ throw new Exception("Too many arguments to def"); Symbol sym = (Symbol) RT.second(form); Module module = (Module) _CRT_MODULE.currentVal(); - Var var = module.intern(baseSymbol(sym)); + Var var = null;//!module.intern(baseSymbol(sym)); registerVar(var); VarExpr ve = new VarExpr(var, typeHint(sym)); Expr init = analyze(C.EXPRESSION, macroexpand(RT.third(form))); @@ -1506,7 +1506,7 @@ static Symbol baseSymbol(Symbol sym){ if(base == sym.name) //no typeHint return sym; - return Symbol.intern(base); + return new Symbol(base); } static String baseName(Symbol sym){ @@ -1524,14 +1524,14 @@ static String typeHint(Symbol sym){ } private static Expr analyzeSymbol(Symbol sym, boolean inFnPosition) throws Exception{ - if(sym instanceof Keyword) - return registerKeyword((Keyword) sym); - else if(sym instanceof ClassSymbol) - return new HostClassExpr((ClassSymbol) sym); - else if(sym instanceof StaticMemberInvoker) - return new HostStaticFieldExpr((StaticMemberInvoker) sym); - //todo have InstanceMemberSymbol yield accessor when expression - else +// if(sym instanceof Keyword) +// return registerKeyword((Keyword) sym); +// else if(sym instanceof ClassSymbol) +// return new HostClassExpr((ClassSymbol) sym); +// else if(sym instanceof StaticMemberInvoker) +// return new HostStaticFieldExpr((StaticMemberInvoker) sym); +// //todo have InstanceMemberSymbol yield accessor when expression +// else { String typeHint = typeHint(sym); sym = baseSymbol(sym); @@ -1551,16 +1551,16 @@ private static Expr analyzeSymbol(Symbol sym, boolean inFnPosition) throws Excep static Var lookupVar(Symbol sym) throws Exception{ Module module = (Module) _CRT_MODULE.currentVal(); - Var v = module.find(sym); - if(v != null) - return v; - for(ISeq seq = RT.seq(USES.currentVal()); seq != null; seq = RT.rest(seq)) - { - module = (Module) ((IMapEntry) RT.first(seq)).key(); - v = module.find(sym); - if(v != null && !v.exported) - return v; - } +// Var v = module.find(sym); +// if(v != null) +// return v; +// for(ISeq seq = RT.seq(USES.currentVal()); seq != null; seq = RT.rest(seq)) +// { +// module = (Module) ((IMapEntry) RT.first(seq)).key(); +// v = module.find(sym); +// if(v != null && !v.exported) +// return v; +// } return null; } @@ -1571,19 +1571,19 @@ static Object macroexpand(Object x){ private static KeywordExpr registerKeyword(Keyword keyword) throws Exception{ IPersistentMap keywordsMap = (IPersistentMap) KEYWORDS.currentVal(); KeywordExpr ke = (KeywordExpr) RT.get(keyword, keywordsMap); - if(ke == null) - KEYWORDS.setValue(RT.assoc(keyword, ke = new KeywordExpr(keyword), keywordsMap)); +//! if(ke == null) +//! KEYWORDS.set(RT.assoc(keyword, ke = new KeywordExpr(keyword), keywordsMap)); return ke; } private static void registerVar(Var var) throws Exception{ IPersistentMap varsMap = (IPersistentMap) VARS.currentVal(); if(RT.get(var, varsMap) == null) - VARS.setValue(RT.assoc(var, var, varsMap)); + VARS.set(RT.assoc(var, var, varsMap)); } private static void registerFn(FnExpr fn) throws Exception{ - FNS.setValue(RT.cons(fn, (IPersistentCollection) FNS.currentVal())); + FNS.set(RT.cons(fn, (IPersistentCollection) FNS.currentVal())); } static void closeOver(LocalBinding b, FnMethod method){ @@ -1606,7 +1606,7 @@ static LocalBinding referenceLocal(Symbol sym) throws Exception{ private static void registerLocal(LocalBinding b) throws Exception{ IPersistentMap localsMap = (IPersistentMap) LOCAL_ENV.currentVal(); - LOCAL_ENV.setValue(RT.assoc(b.sym, b, localsMap)); + //!LOCAL_ENV.setValue(RT.assoc(b.sym, b, localsMap)); FnMethod method = (FnMethod) METHOD.currentVal(); method.locals = (IPersistentMap) RT.assoc(b, b, method.locals); } @@ -1673,7 +1673,7 @@ static class KeyParam{ public KeyParam(LocalBindingExpr b, Expr init) throws Exception{ this.bindingExpression = b; this.init = init; - kw = registerKeyword((Keyword) Symbol.intern(":" + bindingExpression.b.sym.name)); + //! kw = registerKeyword((Keyword) Symbol.intern(":" + bindingExpression.b.sym.name)); } public KeyParam(LocalBindingExpr b) throws Exception{ @@ -1771,7 +1771,7 @@ static class CharExpr extends AnExpr{ } } - +/* static class HostClassExpr extends AHostExpr{ final ClassSymbol sym; final String resolvedClassName; @@ -1792,7 +1792,7 @@ static class HostClassExpr extends AHostExpr{ } } - +*/ static class HostStaticFieldExpr extends AHostExpr{ final StaticMemberInvoker sym; final String resolvedClassName; diff --git a/src/jvm/clojure/lang/LispReader.java b/src/jvm/clojure/lang/LispReader.java index b6800eca..4425f84d 100644 --- a/src/jvm/clojure/lang/LispReader.java +++ b/src/jvm/clojure/lang/LispReader.java @@ -222,7 +222,7 @@ static private Object interpretToken(String s) throws Exception{ if(ret != null)
return ret;
- return Symbol.intern(s);
+ return new Symbol(s);
}
/*
private static Object matchHostName(String s) {
diff --git a/src/jvm/clojure/lang/MapEntry.java b/src/jvm/clojure/lang/MapEntry.java index 6edaeafd..ffdda6b1 100644 --- a/src/jvm/clojure/lang/MapEntry.java +++ b/src/jvm/clojure/lang/MapEntry.java @@ -21,6 +21,13 @@ public MapEntry(Object key, Object val){ this._val = val;
}
+
+public MapEntry(IPersistentMap meta, Object _key, Object _val){
+ super(meta);
+ this._key = _key;
+ this._val = _val;
+}
+
public Object key(){
return _key;
}
@@ -42,9 +49,9 @@ public IPersistentMap assoc(Object key, Object val){ {
if(_val == val)
return this;
- return (MapEntry) new MapEntry(key, val).withMeta(_meta);
+ return (MapEntry) new MapEntry(meta(),key, val);
}
- return (IPersistentMap) new PersistentArrayMap(_key, _val, key, val).withMeta(_meta);
+ return new PersistentArrayMap(meta(),_key, _val, key, val);
}
public Object valAt(Object key){
@@ -59,7 +66,7 @@ public IPersistentMap assocEx(Object key, Object val) throws Exception{ public IPersistentMap without(Object key){
if(RT.equal(_key, key))
- return (IPersistentMap) PersistentArrayMap.EMPTY.withMeta(_meta);
+ return (IPersistentMap) PersistentArrayMap.EMPTY.withMeta(meta());
return this;
}
diff --git a/src/jvm/clojure/lang/Obj.java b/src/jvm/clojure/lang/Obj.java index 3e3fe570..145a6e1c 100644 --- a/src/jvm/clojure/lang/Obj.java +++ b/src/jvm/clojure/lang/Obj.java @@ -12,15 +12,34 @@ package clojure.lang; -public abstract class Obj { +public class Obj implements Cloneable{ -volatile IPersistentMap _meta = null; +private IPersistentMap _meta; +public Obj(IPersistentMap meta){ + this._meta = meta; +} -public IPersistentMap meta() { - return _meta; +public Obj(){ + _meta = null; } -abstract public Obj withMeta(IPersistentMap meta); +final public IPersistentMap meta(){ + return _meta; +} +final public Obj withMeta(IPersistentMap meta){ + if(_meta == meta) + return this; + try + { + Obj ret = (Obj) clone(); + ret._meta = meta; + return ret; + } + catch(CloneNotSupportedException ignore) + { + return null; + } +} } diff --git a/src/jvm/clojure/lang/PersistentArrayMap.java b/src/jvm/clojure/lang/PersistentArrayMap.java index a7308248..93f56de3 100644 --- a/src/jvm/clojure/lang/PersistentArrayMap.java +++ b/src/jvm/clojure/lang/PersistentArrayMap.java @@ -35,15 +35,11 @@ protected PersistentArrayMap(){ }
PersistentArrayMap create(Object... init){
- PersistentArrayMap ret = new PersistentArrayMap(init);
- ret._meta = _meta;
- return ret;
+ return new PersistentArrayMap(meta(),init);
}
IPersistentMap createHT(Object[] init){
- PersistentHashtableMap ret = new PersistentHashtableMap(init);
- ret._meta = _meta;
- return ret;
+ return PersistentHashMap.create(meta(),init);
}
/**
@@ -55,6 +51,12 @@ public PersistentArrayMap(Object... init){ this.array = init;
}
+
+public PersistentArrayMap(IPersistentMap meta, Object... init){
+ super(meta);
+ this.array = init;
+}
+
public int count(){
return array.length / 2;
}
@@ -137,11 +139,7 @@ public IPersistentMap without(Object key){ }
IPersistentMap empty(){
- if(_meta == null)
- return EMPTY;
- PersistentArrayMap ret = new PersistentArrayMap();
- ret._meta = _meta;
- return ret;
+ return (IPersistentMap) EMPTY.withMeta(meta());
}
final public Object valAt(Object key){
diff --git a/src/jvm/clojure/lang/PersistentHashMap.java b/src/jvm/clojure/lang/PersistentHashMap.java index 027eee5d..d5f010a2 100644 --- a/src/jvm/clojure/lang/PersistentHashMap.java +++ b/src/jvm/clojure/lang/PersistentHashMap.java @@ -35,11 +35,41 @@ final INode root; final public static PersistentHashMap EMPTY = new PersistentHashMap(0, new EmptyNode()); +/** + * @param init {key1,val1,key2,val2,...} + */ +public static IPersistentMap create(Object... init){ + IPersistentMap ret = EMPTY; + for(int i = 0; i < init.length; i += 2) + { + ret = ret.assoc(init[i],init[i + 1]); + } + return ret; +} + +/** + * @param init {key1,val1,key2,val2,...} + */ +public static IPersistentMap create(IPersistentMap meta,Object... init){ + IPersistentMap ret = (IPersistentMap) EMPTY.withMeta(meta); + for(int i = 0; i < init.length; i += 2) + { + ret = ret.assoc(init[i],init[i + 1]); + } + return ret; +} PersistentHashMap(int count, INode root){ this.count = count; this.root = root; } + +public PersistentHashMap(IPersistentMap meta, int count, INode root){ + super(meta); + this.count = count; + this.root = root; +} + public boolean contains(Object key){ return entryAt(key) != null; } @@ -53,9 +83,7 @@ public IPersistentMap assoc(Object key, Object val){ INode newroot = root.assoc(0, RT.hash(key), key, val, addedLeaf); if(newroot == root) return this; - PersistentHashMap ret = new PersistentHashMap(addedLeaf.val == null ? count : count + 1, newroot); - ret._meta = this._meta; - return ret; + return new PersistentHashMap(meta(),addedLeaf.val == null ? count : count + 1, newroot); } public Object valAt(Object key){ @@ -76,10 +104,8 @@ public IPersistentMap without(Object key){ if(newroot == root) return this; if(newroot == null) - return (IPersistentMap) EMPTY.withMeta(this._meta); - PersistentHashMap ret = new PersistentHashMap(count - 1, newroot); - ret._meta = this._meta; - return ret; + return (IPersistentMap) EMPTY.withMeta(meta()); + return new PersistentHashMap(meta(),count - 1, newroot); } public Iterator iterator(){ @@ -463,7 +489,7 @@ final static class HashCollisionNode implements ILeaf{ } public ISeq seq(){ - return ArraySeq.create(leaves); + return ArraySeq.create((Object[])leaves); } int findIndex(int hash, Object key){ diff --git a/src/jvm/clojure/lang/PersistentList.java b/src/jvm/clojure/lang/PersistentList.java index 923ca53e..b5c18719 100644 --- a/src/jvm/clojure/lang/PersistentList.java +++ b/src/jvm/clojure/lang/PersistentList.java @@ -28,7 +28,7 @@ PersistentList(Object first, PersistentList rest) { this._rest = rest;
this._count = 1 + rest.count();
- this._meta = rest._meta;
+ //this._meta = rest._meta;
}
public Object first() {
diff --git a/src/jvm/clojure/lang/PersistentTreeMap.java b/src/jvm/clojure/lang/PersistentTreeMap.java index 5544d69b..ed46e515 100644 --- a/src/jvm/clojure/lang/PersistentTreeMap.java +++ b/src/jvm/clojure/lang/PersistentTreeMap.java @@ -33,12 +33,17 @@ public PersistentTreeMap(){ } public PersistentTreeMap(Comparator comp){ + this(null,comp); +} + + +public PersistentTreeMap(IPersistentMap meta, Comparator comp){ + super(meta); this.comp = comp; tree = null; _count = 0; } - public boolean contains(Object key){ return entryAt(key) != null; } @@ -50,7 +55,7 @@ public PersistentTreeMap assocEx(Object key, Object val) throws Exception{ { throw new Exception("Key already present"); } - return new PersistentTreeMap(comp, t.blacken(), _count + 1, _meta); + return new PersistentTreeMap(comp, t.blacken(), _count + 1, meta()); } public PersistentTreeMap assoc(Object key, Object val){ @@ -61,9 +66,9 @@ public PersistentTreeMap assoc(Object key, Object val){ Node foundNode = (Node) found.val; if(foundNode.val() == val) //note only get same collection on identity of val, not equals() return this; - return new PersistentTreeMap(comp, replace(tree, key, val), _count, _meta); + return new PersistentTreeMap(comp, replace(tree, key, val), _count, meta()); } - return new PersistentTreeMap(comp, t.blacken(), _count + 1, _meta); + return new PersistentTreeMap(comp, t.blacken(), _count + 1, meta()); } @@ -75,11 +80,9 @@ public PersistentTreeMap without(Object key){ if(found.val == null)//null == doesn't contain key return this; //empty - PersistentTreeMap ret = new PersistentTreeMap(comp); - ret._meta = _meta; - return ret; + return new PersistentTreeMap(meta(),comp); } - return new PersistentTreeMap(comp, t.blacken(), _count - 1, _meta); + return new PersistentTreeMap(comp, t.blacken(), _count - 1, meta()); } public ISeq seq(){ @@ -332,10 +335,10 @@ Node replace(Node t, Object key, Object val){ } PersistentTreeMap(Comparator comp, Node tree, int count, IPersistentMap meta){ + super(meta); this.comp = comp; this.tree = tree; this._count = count; - this._meta = meta; } static Red red(Object key, Object val, Node left, Node right){ diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java index 55a6fbba..7a23f106 100644 --- a/src/jvm/clojure/lang/RT.java +++ b/src/jvm/clojure/lang/RT.java @@ -34,6 +34,8 @@ static chars[i] = new Character((char) i); } + + static public int nextID(){ return id.getAndIncrement(); } diff --git a/src/jvm/clojure/lang/TRef.java b/src/jvm/clojure/lang/TRef.java index 9fde0db4..b05815b0 100644 --- a/src/jvm/clojure/lang/TRef.java +++ b/src/jvm/clojure/lang/TRef.java @@ -14,7 +14,7 @@ package clojure.lang; import java.util.concurrent.atomic.AtomicReference; -public class TRef<T>{ +public class TRef<T> extends AFn{ //reference to a chain of TVals, only the head of which may be non-committed final AtomicReference<TVal> tvals; volatile InheritableThreadLocal dvals; @@ -25,7 +25,7 @@ public TRef(){ } public TRef(T initVal){ - this.tvals = new AtomicReference<TVal>(); + this(); tvals.set(new TVal(initVal, Transaction.ZERO_POINT, null)); } @@ -36,7 +36,7 @@ public T currentVal(){ TVal current = getCurrentTVal(); if(current != null) return (T) current.val; - return null; + throw new IllegalStateException(this.toString() + " is unbound."); } public T val() throws Exception{ @@ -46,7 +46,7 @@ public T val() throws Exception{ Transaction t = Transaction.get(); if(t != null) return (T) t.doGet(this); - return currentVal(); + throw new IllegalStateException(this.toString() + " is unbound."); } final Binding getThreadBinding(){ @@ -159,4 +159,130 @@ void trimHistoryPriorToTime(long msecs){ } } + +final public IFn fn(){ + return (IFn) currentVal(); +} + +public Object invoke() throws Exception{ + return fn().invoke(); +} + +public Object invoke(Object arg1) throws Exception{ + return fn().invoke(arg1); +} + +public Object invoke(Object arg1, Object arg2) throws Exception{ + return fn().invoke(arg1, arg2); +} + +public Object invoke(Object arg1, Object arg2, Object arg3) throws Exception{ + return fn().invoke(arg1, arg2, arg3); +} + +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4) throws Exception{ + return fn().invoke(arg1, arg2, arg3, arg4); +} + +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5) throws Exception{ + return fn().invoke(arg1, arg2, arg3, arg4, arg5); +} + +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6) throws Exception{ + return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6); +} + +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7) + throws Exception{ + return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7); +} + +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, + Object arg8) throws Exception{ + return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); +} + +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, + Object arg8, Object arg9) throws Exception{ + return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); +} + +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, + Object arg8, Object arg9, Object arg10) throws Exception{ + return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); +} + +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, + Object arg8, Object arg9, Object arg10, Object arg11) throws Exception{ + return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); +} + +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, + Object arg8, Object arg9, Object arg10, Object arg11, Object arg12) throws Exception{ + return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); +} + +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, + Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13) + throws Exception{ + return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); +} + +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, + Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14) + throws Exception{ + return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); +} + +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, + Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14, + Object arg15) throws Exception{ + return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); +} + +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, + Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14, + Object arg15, Object arg16) throws Exception{ + return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, + arg16); +} + +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, + Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14, + Object arg15, Object arg16, Object arg17) throws Exception{ + return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, + arg16, arg17); +} + +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, + Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14, + Object arg15, Object arg16, Object arg17, Object arg18) throws Exception{ + return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, + arg16, arg17, arg18); +} + +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, + Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14, + Object arg15, Object arg16, Object arg17, Object arg18, Object arg19) throws Exception{ + return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, + arg16, arg17, arg18, arg19); +} + +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, + Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14, + Object arg15, Object arg16, Object arg17, Object arg18, Object arg19, Object arg20) + throws Exception{ + return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, + arg16, arg17, arg18, arg19, arg20); +} + +public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, + Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14, + Object arg15, Object arg16, Object arg17, Object arg18, Object arg19, Object arg20, + Object... args) + throws Exception{ + return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, + arg16, arg17, arg18, arg19, arg20, args); +} + } diff --git a/src/jvm/clojure/lang/Transaction.java b/src/jvm/clojure/lang/Transaction.java index ed7de3a3..af65cab1 100644 --- a/src/jvm/clojure/lang/Transaction.java +++ b/src/jvm/clojure/lang/Transaction.java @@ -233,7 +233,7 @@ Object doGet(TRef tref) throws Exception{ if(ver.tstamp.tpoint <= tstamp.tpoint) return ver.val; } - return null; + throw new IllegalStateException(tref.toString() + " is unbound."); } Object doSet(TRef tref, Object val) throws Exception{ |