summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2007-07-04 19:26:42 +0000
committerRich Hickey <richhickey@gmail.com>2007-07-04 19:26:42 +0000
commit296da9b329a1a7f07a8a8baeed2c59439e24e889 (patch)
tree39a657806348c6ef576dde395f479f4c086741be /src
parent829f3e3fb7908c958355ccde936c62c4ddc8099c (diff)
interim checkin
Diffstat (limited to 'src')
-rw-r--r--src/jvm/clojure/lang/AFn.java13
-rw-r--r--src/jvm/clojure/lang/APersistentMap.java22
-rw-r--r--src/jvm/clojure/lang/ASeq.java15
-rw-r--r--src/jvm/clojure/lang/Compiler.java66
-rw-r--r--src/jvm/clojure/lang/LispReader.java2
-rw-r--r--src/jvm/clojure/lang/MapEntry.java13
-rw-r--r--src/jvm/clojure/lang/Obj.java29
-rw-r--r--src/jvm/clojure/lang/PersistentArrayMap.java20
-rw-r--r--src/jvm/clojure/lang/PersistentHashMap.java42
-rw-r--r--src/jvm/clojure/lang/PersistentList.java2
-rw-r--r--src/jvm/clojure/lang/PersistentTreeMap.java21
-rw-r--r--src/jvm/clojure/lang/RT.java2
-rw-r--r--src/jvm/clojure/lang/TRef.java134
-rw-r--r--src/jvm/clojure/lang/Transaction.java2
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{