diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/boot.clj | 10 | ||||
-rw-r--r-- | src/jvm/clojure/lang/ASeq.java | 14 | ||||
-rw-r--r-- | src/jvm/clojure/lang/IPersistentList.java | 6 | ||||
-rw-r--r-- | src/jvm/clojure/lang/IPersistentVector.java | 2 | ||||
-rw-r--r-- | src/jvm/clojure/lang/ISeq.java | 8 | ||||
-rw-r--r-- | src/jvm/clojure/lang/IStack.java | 19 | ||||
-rw-r--r-- | src/jvm/clojure/lang/LispReader.java | 3 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentList.java | 6 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 4 |
9 files changed, 51 insertions, 21 deletions
diff --git a/src/boot.clj b/src/boot.clj index f687c487..3e82cea8 100644 --- a/src/boot.clj +++ b/src/boot.clj @@ -202,6 +202,13 @@ (defn count [coll] (. RT (count coll))) +;;list stuff +(defn peek [list] + (. RT (peek list))) + +(defn pop [list] + (. RT (pop list))) + ;;map stuff (defn contains [coll key] @@ -225,6 +232,9 @@ (defn vals [map] (. RT (vals map))) +(defn rseq [smap] + (. smap (rseq))) + (defn andfn [& args] (if (nil? (rest args)) (first args) diff --git a/src/jvm/clojure/lang/ASeq.java b/src/jvm/clojure/lang/ASeq.java index 0a31797c..59206f1b 100644 --- a/src/jvm/clojure/lang/ASeq.java +++ b/src/jvm/clojure/lang/ASeq.java @@ -51,13 +51,13 @@ public int hashCode(){ return _hash;
}
-public Object peek(){
- return first();
-}
-
-public IPersistentList pop(){
- return rest();
-}
+//public Object peek(){
+// return first();
+//}
+//
+//public IPersistentList pop(){
+// return rest();
+//}
public int count(){
return 1 + RT.count(rest());
diff --git a/src/jvm/clojure/lang/IPersistentList.java b/src/jvm/clojure/lang/IPersistentList.java index 5a54485e..4fdf3ff9 100644 --- a/src/jvm/clojure/lang/IPersistentList.java +++ b/src/jvm/clojure/lang/IPersistentList.java @@ -11,10 +11,6 @@ package clojure.lang;
-public interface IPersistentList extends IPersistentCollection, Sequential {
-
- Object peek();
-
- IPersistentList pop();
+public interface IPersistentList extends Sequential, IStack{
}
diff --git a/src/jvm/clojure/lang/IPersistentVector.java b/src/jvm/clojure/lang/IPersistentVector.java index 971fb318..6f17f7e0 100644 --- a/src/jvm/clojure/lang/IPersistentVector.java +++ b/src/jvm/clojure/lang/IPersistentVector.java @@ -10,7 +10,7 @@ package clojure.lang; * You must not remove this notice, or any other, from this software.
*/
-public interface IPersistentVector extends Associative, Sequential{
+public interface IPersistentVector extends Associative, Sequential, IStack{
int length();
Object nth(int i);
diff --git a/src/jvm/clojure/lang/ISeq.java b/src/jvm/clojure/lang/ISeq.java index 52f0d5d2..08c66cf9 100644 --- a/src/jvm/clojure/lang/ISeq.java +++ b/src/jvm/clojure/lang/ISeq.java @@ -12,15 +12,15 @@ package clojure.lang; /**
* A persistent, functional, sequence interface
- *
+ * <p/>
* ISeqs are immutable values, i.e. neither first(), nor rest() changes
* or invalidates the ISeq
*/
-public interface ISeq extends IPersistentList{
+public interface ISeq extends IPersistentCollection{
-Object first() ;
+Object first();
-ISeq rest() ;
+ISeq rest();
ISeq cons(Object o);
diff --git a/src/jvm/clojure/lang/IStack.java b/src/jvm/clojure/lang/IStack.java new file mode 100644 index 00000000..c28b6796 --- /dev/null +++ b/src/jvm/clojure/lang/IStack.java @@ -0,0 +1,19 @@ +/** + * 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. + **/ + +/* rich Sep 19, 2007 */ + +package clojure.lang; + +public interface IStack extends IPersistentCollection{ +Object peek(); + +IStack pop(); +} diff --git a/src/jvm/clojure/lang/LispReader.java b/src/jvm/clojure/lang/LispReader.java index 578204c0..94789d00 100644 --- a/src/jvm/clojure/lang/LispReader.java +++ b/src/jvm/clojure/lang/LispReader.java @@ -493,7 +493,8 @@ static class ListReader extends AFn{ List list = readDelimitedList(')', r, true);
if(list.isEmpty())
return PersistentList.EMPTY;
- IObj s = (IObj) RT.seq(list);
+ IObj s = (IObj) PersistentList.create(list);
+// IObj s = (IObj) RT.seq(list);
if(line != -1)
return s.withMeta(RT.map(LINE_KEY, line));
else
diff --git a/src/jvm/clojure/lang/PersistentList.java b/src/jvm/clojure/lang/PersistentList.java index f1130195..1b92ff1d 100644 --- a/src/jvm/clojure/lang/PersistentList.java +++ b/src/jvm/clojure/lang/PersistentList.java @@ -13,7 +13,7 @@ package clojure.lang; import java.util.List;
import java.util.ListIterator;
-public class PersistentList extends ASeq{
+public class PersistentList extends ASeq implements IPersistentList{
private final Object _first;
private final PersistentList _rest;
@@ -52,6 +52,10 @@ public ISeq rest(){ return _rest;
}
+public Object peek(){
+ return first();
+}
+
public IPersistentList pop(){
if(_rest == null)
return EMPTY.withMeta(meta());
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java index 652c8337..8b432bc3 100644 --- a/src/jvm/clojure/lang/RT.java +++ b/src/jvm/clojure/lang/RT.java @@ -265,13 +265,13 @@ static public ISeq rrest(Object x){ static public Object peek(Object x){ if(x == null) return null; - return ((IPersistentList) x).peek(); + return ((IStack) x).peek(); } static public Object pop(Object x){ if(x == null) return null; - return ((IPersistentList) x).pop(); + return ((IStack) x).pop(); } static public Object get(Object coll, Object key){ |