diff options
-rw-r--r-- | src/jvm/clojure/lang/IteratorSeq.java | 54 |
1 files changed, 25 insertions, 29 deletions
diff --git a/src/jvm/clojure/lang/IteratorSeq.java b/src/jvm/clojure/lang/IteratorSeq.java index dc266279..20102034 100644 --- a/src/jvm/clojure/lang/IteratorSeq.java +++ b/src/jvm/clojure/lang/IteratorSeq.java @@ -14,43 +14,39 @@ import java.util.Iterator; public class IteratorSeq extends ASeq{
Iterator iter;
-volatile Object val;
-volatile ISeq _rest;
+Object val;
+ISeq _rest;
public static IteratorSeq create(Iterator iter){
- if(iter.hasNext())
- return new IteratorSeq(iter);
- return null;
+ if(iter.hasNext())
+ return new IteratorSeq(iter);
+ return null;
}
IteratorSeq(Iterator iter){
- this.iter = iter;
- this.val = this;
- this._rest = this;
+ this.iter = iter;
+ this.val = this;
+ this._rest = this;
}
-public Object first() {
- if(val == this)
- {
- synchronized(this){
- if(val == this)
- val = iter.next();
- }
- }
- return val;
+public Object first(){
+ synchronized(this)
+ {
+ if(val == this)
+ val = iter.next();
+ return val;
+ }
}
-public ISeq rest() {
- if(_rest == this)
- {
- synchronized(this){
- if(_rest == this)
- {
- first();
- _rest = new IteratorSeq(iter);
- }
- }
- }
- return _rest;
+public ISeq rest(){
+ synchronized(this)
+ {
+ if(_rest == this)
+ {
+ first();
+ _rest = create(iter);
+ }
+ return _rest;
+ }
}
}
|