summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/boot.clj10
-rw-r--r--src/jvm/clojure/lang/ASeq.java14
-rw-r--r--src/jvm/clojure/lang/IPersistentList.java6
-rw-r--r--src/jvm/clojure/lang/IPersistentVector.java2
-rw-r--r--src/jvm/clojure/lang/ISeq.java8
-rw-r--r--src/jvm/clojure/lang/IStack.java19
-rw-r--r--src/jvm/clojure/lang/LispReader.java3
-rw-r--r--src/jvm/clojure/lang/PersistentList.java6
-rw-r--r--src/jvm/clojure/lang/RT.java4
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){