summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2006-06-11 16:28:11 +0000
committerRich Hickey <richhickey@gmail.com>2006-06-11 16:28:11 +0000
commit6aed462896af74c4a6e692147dcf8fab6b5b6cbd (patch)
treebf428c30b7eab0ccbcb04b8173157d47d9da6f01 /src
parentd1a992e60915cf5715e7b796e340f18cfe9df0bf (diff)
renamed org.clojure to clojure
Diffstat (limited to 'src')
-rw-r--r--src/jvm/clojure/runtime/AFn.java66
-rw-r--r--src/jvm/clojure/runtime/AGenerator.java2
-rw-r--r--src/jvm/clojure/runtime/Accessor.java22
-rw-r--r--src/jvm/clojure/runtime/BigNum.java20
-rw-r--r--src/jvm/clojure/runtime/Binding.java25
-rw-r--r--src/jvm/clojure/runtime/Box.java2
-rw-r--r--src/jvm/clojure/runtime/Cons.java31
-rw-r--r--src/jvm/clojure/runtime/DoubleNum.java24
-rw-r--r--src/jvm/clojure/runtime/FixNum.java20
-rw-r--r--src/jvm/clojure/runtime/FloatNum.java2
-rw-r--r--src/jvm/clojure/runtime/FnSeq.java30
-rw-r--r--src/jvm/clojure/runtime/IFn.java20
-rw-r--r--src/jvm/clojure/runtime/IMapEntry.java2
-rw-r--r--src/jvm/clojure/runtime/IObj.java8
-rw-r--r--src/jvm/clojure/runtime/IPersistentMap.java31
-rw-r--r--src/jvm/clojure/runtime/ISeq.java24
-rw-r--r--src/jvm/clojure/runtime/ISequential.java18
-rw-r--r--src/jvm/clojure/runtime/Indexer.java2
-rw-r--r--src/jvm/clojure/runtime/IntegerNum.java2
-rw-r--r--src/jvm/clojure/runtime/Iter.java2
-rw-r--r--src/jvm/clojure/runtime/IteratorIter.java2
-rw-r--r--src/jvm/clojure/runtime/Keyword.java26
-rw-r--r--src/jvm/clojure/runtime/LineNumberingPushbackReader.java2
-rw-r--r--src/jvm/clojure/runtime/Namespace.java2
-rw-r--r--src/jvm/clojure/runtime/Num.java18
-rw-r--r--src/jvm/clojure/runtime/Obj.java8
-rw-r--r--src/jvm/clojure/runtime/PersistentArray.java42
-rw-r--r--src/jvm/clojure/runtime/PersistentArrayIdentityMap.java35
-rw-r--r--src/jvm/clojure/runtime/PersistentArrayMap.java212
-rw-r--r--src/jvm/clojure/runtime/PersistentHashtableIdentityMap.java96
-rw-r--r--src/jvm/clojure/runtime/PersistentHashtableMap.java255
-rw-r--r--src/jvm/clojure/runtime/PersistentHybridIdentityMap.java47
-rw-r--r--src/jvm/clojure/runtime/PersistentHybridMap.java104
-rw-r--r--src/jvm/clojure/runtime/PersistentListIdentityMap.java286
-rw-r--r--src/jvm/clojure/runtime/PersistentListMap.java290
-rw-r--r--src/jvm/clojure/runtime/PersistentTree.java809
-rw-r--r--src/jvm/clojure/runtime/RT.java142
-rw-r--r--src/jvm/clojure/runtime/RatioNum.java24
-rw-r--r--src/jvm/clojure/runtime/RationalNum.java2
-rw-r--r--src/jvm/clojure/runtime/RealNum.java2
-rw-r--r--src/jvm/clojure/runtime/Reflector.java8
-rw-r--r--src/jvm/clojure/runtime/RestFn0.java36
-rw-r--r--src/jvm/clojure/runtime/RestFn1.java38
-rw-r--r--src/jvm/clojure/runtime/RestFn2.java40
-rw-r--r--src/jvm/clojure/runtime/RestFn3.java44
-rw-r--r--src/jvm/clojure/runtime/RestFn4.java50
-rw-r--r--src/jvm/clojure/runtime/RestFn5.java60
-rw-r--r--src/jvm/clojure/runtime/Symbol.java2
-rw-r--r--src/jvm/clojure/runtime/TObj.java21
-rw-r--r--src/jvm/clojure/runtime/TRef.java2
-rw-r--r--src/jvm/clojure/runtime/TVal.java2
-rw-r--r--src/jvm/clojure/runtime/ThreadLocalData.java56
-rw-r--r--src/jvm/clojure/runtime/Transaction.java54
-rw-r--r--src/jvm/clojure/runtime/Var.java234
54 files changed, 2800 insertions, 604 deletions
diff --git a/src/jvm/clojure/runtime/AFn.java b/src/jvm/clojure/runtime/AFn.java
index 323fe732..6405b07a 100644
--- a/src/jvm/clojure/runtime/AFn.java
+++ b/src/jvm/clojure/runtime/AFn.java
@@ -10,87 +10,87 @@
/* rich Mar 25, 2006 4:05:37 PM */
-package org.clojure.runtime;
+package clojure.runtime;
public class AFn extends Obj implements IFn{
-public Object invoke(ThreadLocalData tld) throws Exception
+public Object invoke() throws Exception
{
return throwArity();
}
-public Object invoke(ThreadLocalData tld, Object arg1) throws Exception
+public Object invoke( Object arg1) throws Exception
{
return throwArity();
}
-public Object invoke(ThreadLocalData tld, Object arg1, Object arg2) throws Exception
+public Object invoke( Object arg1, Object arg2) throws Exception
{
return throwArity();
}
-public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3) throws Exception
+public Object invoke( Object arg1, Object arg2, Object arg3) throws Exception
{
return throwArity();
}
-public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4) throws Exception
+public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4) throws Exception
{
return throwArity();
}
-public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4, Object arg5)
+public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5)
throws Exception
{
return throwArity();
}
-public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Cons args)
+public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, ISeq args)
throws Exception
{
return throwArity();
}
-public Object applyTo(ThreadLocalData tld, Cons arglist) throws Exception {
- return applyToHelper(this, tld, arglist);
+public Object applyTo( ISeq arglist) throws Exception {
+ return applyToHelper(this, arglist);
}
-static public Object applyToHelper(IFn ifn,ThreadLocalData tld, Cons arglist) throws Exception
+static public Object applyToHelper(IFn ifn, ISeq arglist) throws Exception
{
switch(RT.boundedLength(arglist, 5))
{
case 0:
- return ifn.invoke(tld);
+ return ifn.invoke();
case 1:
- return ifn.invoke(tld, arglist.first);
+ return ifn.invoke( arglist.first());
case 2:
- return ifn.invoke(tld, arglist.first
- , (arglist = arglist.rest).first
+ return ifn.invoke( arglist.first()
+ , (arglist = arglist.rest()).first()
);
case 3:
- return ifn.invoke(tld, arglist.first
- , (arglist = arglist.rest).first
- , (arglist = arglist.rest).first
+ return ifn.invoke( arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
);
case 4:
- return ifn.invoke(tld, arglist.first
- , (arglist = arglist.rest).first
- , (arglist = arglist.rest).first
- , (arglist = arglist.rest).first
+ return ifn.invoke( arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
);
case 5:
- return ifn.invoke(tld, arglist.first
- , (arglist = arglist.rest).first
- , (arglist = arglist.rest).first
- , (arglist = arglist.rest).first
- , (arglist = arglist.rest).first
+ return ifn.invoke( arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
);
default:
- return ifn.invoke(tld, arglist.first
- , (arglist = arglist.rest).first
- , (arglist = arglist.rest).first
- , (arglist = arglist.rest).first
- , (arglist = arglist.rest).first
- , arglist.rest);
+ return ifn.invoke( arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , arglist.rest());
}
}
diff --git a/src/jvm/clojure/runtime/AGenerator.java b/src/jvm/clojure/runtime/AGenerator.java
index 03b35dac..1494f06e 100644
--- a/src/jvm/clojure/runtime/AGenerator.java
+++ b/src/jvm/clojure/runtime/AGenerator.java
@@ -10,7 +10,7 @@
/* rich Apr 3, 2006 */
-package org.clojure.runtime;
+package clojure.runtime;
public abstract class AGenerator implements Iter{
diff --git a/src/jvm/clojure/runtime/Accessor.java b/src/jvm/clojure/runtime/Accessor.java
index b69bb0bb..2367861a 100644
--- a/src/jvm/clojure/runtime/Accessor.java
+++ b/src/jvm/clojure/runtime/Accessor.java
@@ -10,7 +10,7 @@
/* rich Apr 19, 2006 */
-package org.clojure.runtime;
+package clojure.runtime;
public class Accessor extends Symbol implements IFn{
@@ -22,18 +22,17 @@ Accessor(String name)
}
-public Object invoke(ThreadLocalData tld) throws Exception {
+public Object invoke() throws Exception {
return AFn.throwArity();
}
/**
* Indexer implements IFn for attr access
* This single arg version is the getter
- * @param tld
* @param obj - must be Obj
* @return the value of the attr or nil if not found
* @throws Exception
*/
-public Object invoke(ThreadLocalData tld, Object obj) throws Exception
+public Object invoke( Object obj) throws Exception
{
return Reflector.invokeInstanceMember(memberName,obj);
@@ -42,42 +41,41 @@ public Object invoke(ThreadLocalData tld, Object obj) throws Exception
/**
* Indexer implements IFn for attr access
* This two arg version is the setter
- * @param tld
* @param obj - must be Obj
* @param val
* @return val
* @throws Exception
*/
-public Object invoke(ThreadLocalData tld, Object obj, Object val) throws Exception
+public Object invoke( Object obj, Object val) throws Exception
{
return Reflector.invokeInstanceMember(memberName,obj,val);
}
-public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3) throws Exception
+public Object invoke( Object arg1, Object arg2, Object arg3) throws Exception
{
return Reflector.invokeInstanceMember(memberName,arg1,arg2,arg3);
}
-public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4) throws Exception
+public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4) throws Exception
{
return Reflector.invokeInstanceMember(memberName,arg1,arg2,arg3,arg4);
}
-public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4, Object arg5)
+public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5)
throws Exception
{
return Reflector.invokeInstanceMember(memberName,arg1,arg2,arg3,arg4,arg5);
}
-public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Cons args)
+public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, ISeq args)
throws Exception
{
return Reflector.invokeInstanceMember(memberName,arg1,arg2,arg3,arg4,arg5,args);
}
-public Object applyTo(ThreadLocalData tld, Cons arglist) throws Exception {
- return AFn.applyToHelper(this, tld, arglist);
+public Object applyTo( ISeq arglist) throws Exception {
+ return AFn.applyToHelper(this, arglist);
}
}
diff --git a/src/jvm/clojure/runtime/BigNum.java b/src/jvm/clojure/runtime/BigNum.java
index 3955fe6a..952520e4 100644
--- a/src/jvm/clojure/runtime/BigNum.java
+++ b/src/jvm/clojure/runtime/BigNum.java
@@ -10,7 +10,7 @@
/* rich Mar 28, 2006 10:08:33 AM */
-package org.clojure.runtime;
+package clojure.runtime;
import java.math.BigInteger;
@@ -171,25 +171,25 @@ public Num divide(RatioNum x)
return Num.divide(x.numerator, x.denominator.multiply(val));
}
-public Object truncateDivide(ThreadLocalData tld, Num num)
+public Object truncateDivide( Num num)
{
- return num.truncateBy(tld, val);
+ return num.truncateBy( val);
}
-public Object truncateBy(ThreadLocalData tld, int div)
+public Object truncateBy( int div)
{
- return Num.truncateBigints(tld, val, BigInteger.valueOf(div));
+ return Num.truncateBigints( val, BigInteger.valueOf(div));
}
-public Object truncateBy(ThreadLocalData tld, BigInteger div)
+public Object truncateBy( BigInteger div)
{
- return Num.truncateBigints(tld, val, div);
+ return Num.truncateBigints( val, div);
}
-public Object truncateBy(ThreadLocalData tld, RatioNum div)
+public Object truncateBy( RatioNum div)
{
- Num q = (Num) Num.truncate(tld, div.denominator.multiply(val), div.numerator);
- return RT.setValues(tld, q, q.multiplyBy(div).subtractFrom(this));
+ Num q = (Num) Num.truncate( div.denominator.multiply(val), div.numerator);
+ return RT.setValues( q, q.multiplyBy(div).subtractFrom(this));
}
public Num negate()
diff --git a/src/jvm/clojure/runtime/Binding.java b/src/jvm/clojure/runtime/Binding.java
new file mode 100644
index 00000000..cf0e8031
--- /dev/null
+++ b/src/jvm/clojure/runtime/Binding.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) Rich Hickey. All rights reserved.
+ * The use and distribution terms for this software are covered by the
+ * Common Public License 1.0 (http://opensource.org/licenses/cpl.php)
+ * which can be found in the file CPL.TXT at the root of this distribution.
+ * By using this software in any fashion, you are agreeing to be bound by
+ * the terms of this license.
+ * You must not remove this notice, or any other, from this software.
+ **/
+
+package clojure.runtime;
+
+public class Binding {
+public Object val;
+public Binding rest;
+
+public Binding(Object val) {
+ this.val = val;
+}
+
+public Binding(Object val, Binding rest) {
+ this.val = val;
+ this.rest = rest;
+}
+}
diff --git a/src/jvm/clojure/runtime/Box.java b/src/jvm/clojure/runtime/Box.java
index e1129029..9909a667 100644
--- a/src/jvm/clojure/runtime/Box.java
+++ b/src/jvm/clojure/runtime/Box.java
@@ -10,7 +10,7 @@
/* rich Mar 27, 2006 8:40:19 PM */
-package org.clojure.runtime;
+package clojure.runtime;
public class Box{
diff --git a/src/jvm/clojure/runtime/Cons.java b/src/jvm/clojure/runtime/Cons.java
index 8cdd3bd9..5a32bd51 100644
--- a/src/jvm/clojure/runtime/Cons.java
+++ b/src/jvm/clojure/runtime/Cons.java
@@ -10,27 +10,28 @@
/* rich Mar 25, 2006 11:01:29 AM */
-package org.clojure.runtime;
+package clojure.runtime;
-public class Cons extends Obj implements Iter{
+public class Cons implements ISeq, ISequential{
-public final Object first;
-public final Cons rest;
+private final Object _first;
+private final ISeq _rest;
-public Cons(Object first, Cons rest)
+public Cons(Object first, ISeq rest)
{
- this.first = first;
- this.rest = rest;
+ this._first = first;
+ this._rest = rest;
}
-public Object get()
- {
- return first;
- }
+public Object first() {
+ return _first;
+}
-public Iter iterate()
- {
- return rest;
- }
+public ISeq rest() {
+ return _rest;
+}
+public ISeq seq() {
+ return this;
+}
}
diff --git a/src/jvm/clojure/runtime/DoubleNum.java b/src/jvm/clojure/runtime/DoubleNum.java
index 00ec7c7a..72f3a979 100644
--- a/src/jvm/clojure/runtime/DoubleNum.java
+++ b/src/jvm/clojure/runtime/DoubleNum.java
@@ -10,7 +10,7 @@
/* rich Mar 28, 2006 10:13:45 AM */
-package org.clojure.runtime;
+package clojure.runtime;
import java.math.BigInteger;
import java.math.BigDecimal;
@@ -160,40 +160,40 @@ public Num divide(RatioNum x)
return Num.from(x.doubleValue() / val);
}
-static Object truncate(ThreadLocalData tld, double n, double d)
+static Object truncate(double n, double d)
{
double q = n / d;
if(q <= Integer.MAX_VALUE && q >= Integer.MIN_VALUE)
{
- return RT.setValues(tld, Num.from((int) q),
+ return RT.setValues(Num.from((int) q),
Num.from(n - ((int) q) * d));
}
else
{ //bigint quotient
Num bq = Num.from(new BigDecimal(q).toBigInteger());
- return RT.setValues(tld, bq,
+ return RT.setValues(bq,
Num.from(n - bq.doubleValue() * d));
}
}
-public Object truncateBy(ThreadLocalData tld, BigInteger x)
+public Object truncateBy( BigInteger x)
{
- return truncate(tld, val, x.doubleValue());
+ return truncate( val, x.doubleValue());
}
-public Object truncateBy(ThreadLocalData tld, int x)
+public Object truncateBy( int x)
{
- return truncate(tld, val, x);
+ return truncate( val, x);
}
-public Object truncateBy(ThreadLocalData tld, RatioNum x)
+public Object truncateBy( RatioNum x)
{
- return truncate(tld, val, x.doubleValue());
+ return truncate( val, x.doubleValue());
}
-public Object truncateDivide(ThreadLocalData tld, Num num)
+public Object truncateDivide( Num num)
{
- return truncate(tld, num.doubleValue(), val);
+ return truncate( num.doubleValue(), val);
}
public Num negate()
diff --git a/src/jvm/clojure/runtime/FixNum.java b/src/jvm/clojure/runtime/FixNum.java
index 31ecf1cb..31de19c8 100644
--- a/src/jvm/clojure/runtime/FixNum.java
+++ b/src/jvm/clojure/runtime/FixNum.java
@@ -10,7 +10,7 @@
/* rich Mar 28, 2006 10:09:27 AM */
-package org.clojure.runtime;
+package clojure.runtime;
import java.math.BigInteger;
@@ -146,25 +146,25 @@ public Num multiply(RatioNum x)
return x.multiply(val);
}
-public Object truncateDivide(ThreadLocalData tld, Num num)
+public Object truncateDivide( Num num)
{
- return num.truncateBy(tld, val);
+ return num.truncateBy( val);
}
-public Object truncateBy(ThreadLocalData tld, int div)
+public Object truncateBy( int div)
{
- return RT.setValues(tld, Num.from(val / div), Num.from(val % div));
+ return RT.setValues( Num.from(val / div), Num.from(val % div));
}
-public Object truncateBy(ThreadLocalData tld, BigInteger div)
+public Object truncateBy( BigInteger div)
{
- return Num.truncateBigints(tld, BigInteger.valueOf(val), div);
+ return Num.truncateBigints( BigInteger.valueOf(val), div);
}
-public Object truncateBy(ThreadLocalData tld, RatioNum div)
+public Object truncateBy( RatioNum div)
{
- Num q = (Num) Num.truncate(tld, div.denominator.multiply(val), div.numerator);
- return RT.setValues(tld, q, q.multiplyBy(div).subtractFrom(this));
+ Num q = (Num) Num.truncate( div.denominator.multiply(val), div.numerator);
+ return RT.setValues( q, q.multiplyBy(div).subtractFrom(this));
}
public Num divideBy(Num rhs)
diff --git a/src/jvm/clojure/runtime/FloatNum.java b/src/jvm/clojure/runtime/FloatNum.java
index 8ea7b6de..477ddc6d 100644
--- a/src/jvm/clojure/runtime/FloatNum.java
+++ b/src/jvm/clojure/runtime/FloatNum.java
@@ -10,7 +10,7 @@
/* rich Mar 28, 2006 10:17:21 AM */
-package org.clojure.runtime;
+package clojure.runtime;
public abstract class FloatNum extends RealNum {
diff --git a/src/jvm/clojure/runtime/FnSeq.java b/src/jvm/clojure/runtime/FnSeq.java
new file mode 100644
index 00000000..430e6e8c
--- /dev/null
+++ b/src/jvm/clojure/runtime/FnSeq.java
@@ -0,0 +1,30 @@
+/**
+ * Copyright (c) Rich Hickey. All rights reserved.
+ * The use and distribution terms for this software are covered by the
+ * Common Public License 1.0 (http://opensource.org/licenses/cpl.php)
+ * which can be found in the file CPL.TXT at the root of this distribution.
+ * By using this software in any fashion, you are agreeing to be bound by
+ * the terms of this license.
+ * You must not remove this notice, or any other, from this software.
+ **/
+
+package clojure.runtime;
+
+public class FnSeq implements ISeq{
+
+Object _first;
+IFn restFn;
+
+public FnSeq(Object first, IFn restFn) {
+ this._first = first;
+ this.restFn = restFn;
+}
+
+public Object first() {
+ return _first;
+}
+
+public ISeq rest() throws Exception {
+ return (ISeq) restFn.invoke();
+}
+}
diff --git a/src/jvm/clojure/runtime/IFn.java b/src/jvm/clojure/runtime/IFn.java
index f5d1194f..3af6ea95 100644
--- a/src/jvm/clojure/runtime/IFn.java
+++ b/src/jvm/clojure/runtime/IFn.java
@@ -10,25 +10,25 @@
/* rich Mar 25, 2006 3:54:03 PM */
-package org.clojure.runtime;
+package clojure.runtime;
public interface IFn{
-public Object invoke(ThreadLocalData tld) throws Exception;
+public Object invoke() throws Exception;
-public Object invoke(ThreadLocalData tld, Object arg1) throws Exception;
+public Object invoke(Object arg1) throws Exception;
-public Object invoke(ThreadLocalData tld, Object arg1, Object arg2) throws Exception;
+public Object invoke(Object arg1, Object arg2) throws Exception;
-public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3) throws Exception;
+public Object invoke(Object arg1, Object arg2, Object arg3) throws Exception;
-public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4) throws Exception;
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4) throws Exception;
-public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4, Object arg5)
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5)
throws Exception;
-public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Object arg3, Object arg4, Object arg5,
- Cons args) throws Exception;
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5,
+ ISeq args) throws Exception;
-public Object applyTo(ThreadLocalData tld, Cons arglist) throws Exception;
+public Object applyTo(ISeq arglist) throws Exception;
}
diff --git a/src/jvm/clojure/runtime/IMapEntry.java b/src/jvm/clojure/runtime/IMapEntry.java
index fcf93a8b..9b090a82 100644
--- a/src/jvm/clojure/runtime/IMapEntry.java
+++ b/src/jvm/clojure/runtime/IMapEntry.java
@@ -8,7 +8,7 @@
* You must not remove this notice, or any other, from this software.
*/
-package org.clojure.runtime;
+package clojure.runtime;
public interface IMapEntry {
Object key();
diff --git a/src/jvm/clojure/runtime/IObj.java b/src/jvm/clojure/runtime/IObj.java
index e4284aba..cfaa25ab 100644
--- a/src/jvm/clojure/runtime/IObj.java
+++ b/src/jvm/clojure/runtime/IObj.java
@@ -8,7 +8,7 @@
* You must not remove this notice, or any other, from this software.
**/
-package org.clojure.runtime;
+package clojure.runtime;
/**
* Created by IntelliJ IDEA.
@@ -18,9 +18,9 @@ package org.clojure.runtime;
* To change this template use File | Settings | File Templates.
*/
public interface IObj {
-Object put(ThreadLocalData tld, Comparable key, Object val) throws Exception;
+Object put( Comparable key, Object val) throws Exception;
-Object get(ThreadLocalData tld, Comparable key) throws Exception;
+Object get( Comparable key) throws Exception;
-boolean has(ThreadLocalData tld, Comparable key) throws Exception;
+boolean has( Comparable key) throws Exception;
}
diff --git a/src/jvm/clojure/runtime/IPersistentMap.java b/src/jvm/clojure/runtime/IPersistentMap.java
new file mode 100644
index 00000000..444aa45b
--- /dev/null
+++ b/src/jvm/clojure/runtime/IPersistentMap.java
@@ -0,0 +1,31 @@
+/**
+ * Copyright (c) Rich Hickey. All rights reserved.
+ * The use and distribution terms for this software are covered by the
+ * Common Public License 1.0 (http://opensource.org/licenses/cpl.php)
+ * which can be found in the file CPL.TXT at the root of this distribution.
+ * By using this software in any fashion, you are agreeing to be bound by
+ * the terms of this license.
+ * You must not remove this notice, or any other, from this software.
+ */
+
+package clojure.runtime;
+
+
+public interface IPersistentMap extends Iterable, ISequential {
+
+int count();
+
+boolean contains(Object key);
+
+IMapEntry find(Object key);
+
+IPersistentMa