diff options
Diffstat (limited to 'src')
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 |