@@ -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