Skip to content

Commit 38d7572

Browse files
committed
fix tail completion
1 parent eccff11 commit 38d7572

File tree

1 file changed

+19
-12
lines changed

1 file changed

+19
-12
lines changed

src/jvm/clojure/lang/LazyTransformer.java

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,7 @@ static class Stepper implements IStepper{
9595
IFn xform;
9696
static IFn stepfn = new AFn(){
9797
public Object invoke(Object result){
98-
LazyTransformer lt = (LazyTransformer) (RT.isReduced(result)?
99-
((Reduced)result).deref():result);
98+
LazyTransformer lt = (LazyTransformer) result;
10099
lt.stepper = null;
101100
return result;
102101
}
@@ -116,11 +115,15 @@ public Object invoke(Object result, Object input){
116115

117116
public void step(LazyTransformer lt){
118117
while(lt.stepper != null && iter.hasNext()){
119-
if(RT.isReduced(xform.invoke(lt, iter.next())))
120-
{
121-
if(lt.rest != null)
122-
lt.rest.stepper = null;
123-
break;
118+
if(RT.isReduced(xform.invoke(lt, iter.next()))){
119+
lt.stepper = null;
120+
LazyTransformer et = lt;
121+
while(et.rest != null){
122+
et = et.rest;
123+
et.stepper = null;
124+
}
125+
xform.invoke(et);
126+
return;
124127
}
125128
}
126129
if(lt.stepper != null)
@@ -134,8 +137,7 @@ static class MultiStepper implements IStepper{
134137
IFn xform;
135138
static IFn stepfn = new AFn(){
136139
public Object invoke(Object result){
137-
LazyTransformer lt = (LazyTransformer) (RT.isReduced(result)?
138-
((Reduced)result).deref():result);
140+
LazyTransformer lt = (LazyTransformer)result;
139141
lt.stepper = null;
140142
return lt;
141143
}
@@ -171,9 +173,14 @@ public void step(LazyTransformer lt){
171173
while(lt.stepper != null && hasNext()){
172174
if(RT.isReduced(xform.applyTo(RT.cons(lt, next()))))
173175
{
174-
if(lt.rest != null)
175-
lt.rest.stepper = null;
176-
break;
176+
lt.stepper = null;
177+
LazyTransformer et = lt;
178+
while(et.rest != null){
179+
et = et.rest;
180+
et.stepper = null;
181+
}
182+
xform.invoke(et);
183+
return;
177184
}
178185
}
179186
if(lt.stepper != null)

0 commit comments

Comments
 (0)