diff options
-rw-r--r-- | src/clj/clojure/core.clj | 6 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Range.java | 6 |
2 files changed, 9 insertions, 3 deletions
diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj index 41a6aab4..93cc31ad 100644 --- a/src/clj/clojure/core.clj +++ b/src/clj/clojure/core.clj @@ -1464,10 +1464,12 @@ (defn range "Returns a lazy seq of nums from start (inclusive) to end (exclusive), by step, where start defaults to 0 and step to 1." - ([end] (if (and (> end 0) (< end (. Integer MAX_VALUE))) + ([end] (if (and (> end 0) (<= end (. Integer MAX_VALUE))) (new clojure.lang.Range 0 end) (take end (iterate inc 0)))) - ([start end] (if (and (< start end) (< end (. Integer MAX_VALUE))) + ([start end] (if (and (< start end) + (>= start (. Integer MIN_VALUE)) + (<= end (. Integer MAX_VALUE))) (new clojure.lang.Range start end) (take (- end start) (iterate inc start)))) ([start end step] diff --git a/src/jvm/clojure/lang/Range.java b/src/jvm/clojure/lang/Range.java index 8785f970..226a77ba 100644 --- a/src/jvm/clojure/lang/Range.java +++ b/src/jvm/clojure/lang/Range.java @@ -59,7 +59,11 @@ public Object reduce(IFn f, Object start) throws Exception{ return ret; } -public IStream stream() throws Exception { +public int count() { + return end - n; + } + + public IStream stream() throws Exception { final AtomicInteger an = new AtomicInteger(n); return new IStream(){ public Object next() throws Exception { |