@@ -963,13 +963,17 @@ defmodule Stream do
963963        after_fun . ( user_acc ) 
964964        :erlang . raise ( kind ,  reason ,  __STACKTRACE__ ) 
965965    else 
966-       { :suspended ,  vals ,  next }  -> 
967-         do_transform_user ( :lists . reverse ( vals ) ,  user_acc ,  :cont ,  next ,  inner_acc ,  funs ) 
966+       { :suspended ,  [ val ] ,  next }  -> 
967+         do_transform_user ( val ,  user_acc ,  :cont ,  next ,  inner_acc ,  funs ) 
968968
969-       { _ ,  vals }  -> 
969+       { _ ,  result }  -> 
970970        # Do not attempt to call the resource again, it has either done or halted 
971971        next  =  fn  _  ->  { :done ,  [ ] }  end 
972-         do_transform_user ( :lists . reverse ( vals ) ,  user_acc ,  :last ,  next ,  inner_acc ,  funs ) 
972+ 
973+         case  result  do 
974+           [ val ]  ->  do_transform_user ( val ,  user_acc ,  :last ,  next ,  inner_acc ,  funs ) 
975+           [ ]  ->  do_transform ( user_acc ,  :last ,  next ,  inner_acc ,  funs ) 
976+         end 
973977    end 
974978  end 
975979
@@ -984,7 +988,7 @@ defmodule Stream do
984988          after_fun . ( user_acc ) 
985989          :erlang . raise ( kind ,  reason ,  __STACKTRACE__ ) 
986990      else 
987-         result  ->  do_transform_result ( result ,  [ ] ,   :halt ,  next ,  inner_acc ,  funs ) 
991+         result  ->  do_transform_result ( result ,  :halt ,  next ,  inner_acc ,  funs ) 
988992      end 
989993    else 
990994      do_transform ( user_acc ,  :halt ,  next ,  inner_acc ,  funs ) 
@@ -997,11 +1001,7 @@ defmodule Stream do
9971001    { :halted ,  elem ( inner_acc ,  1 ) } 
9981002  end 
9991003
1000-   defp  do_transform_user ( [ ] ,  user_acc ,  next_op ,  next ,  inner_acc ,  funs )  do 
1001-     do_transform ( user_acc ,  next_op ,  next ,  inner_acc ,  funs ) 
1002-   end 
1003- 
1004-   defp  do_transform_user ( [ val  |  vals ] ,  user_acc ,  next_op ,  next ,  inner_acc ,  funs )  do 
1004+   defp  do_transform_user ( val ,  user_acc ,  next_op ,  next ,  inner_acc ,  funs )  do 
10051005    { user ,  _ ,  _ ,  _ ,  after_fun }  =  funs 
10061006
10071007    try  do 
@@ -1012,20 +1012,20 @@ defmodule Stream do
10121012        after_fun . ( user_acc ) 
10131013        :erlang . raise ( kind ,  reason ,  __STACKTRACE__ ) 
10141014    else 
1015-       result  ->  do_transform_result ( result ,  vals ,   next_op ,  next ,  inner_acc ,  funs ) 
1015+       result  ->  do_transform_result ( result ,  next_op ,  next ,  inner_acc ,  funs ) 
10161016    end 
10171017  end 
10181018
1019-   defp  do_transform_result ( result ,  vals ,   next_op ,  next ,  inner_acc ,  funs )  do 
1019+   defp  do_transform_result ( result ,  next_op ,  next ,  inner_acc ,  funs )  do 
10201020    { _ ,  fun ,  inner ,  _ ,  after_fun }  =  funs 
10211021
10221022    case  result  do 
10231023      { [ ] ,  user_acc }  -> 
1024-         do_transform_user ( vals ,   user_acc ,  next_op ,  next ,  inner_acc ,  funs ) 
1024+         do_transform ( user_acc ,  next_op ,  next ,  inner_acc ,  funs ) 
10251025
10261026      { list ,  user_acc }  when  is_list ( list )  -> 
10271027        reduce  =  & Enumerable.List . reduce ( list ,  & 1 ,  fun ) 
1028-         do_transform_inner_list ( vals ,   user_acc ,  next_op ,  next ,  inner_acc ,  reduce ,  funs ) 
1028+         do_transform_inner_list ( user_acc ,  next_op ,  next ,  inner_acc ,  reduce ,  funs ) 
10291029
10301030      { :halt ,  user_acc }  -> 
10311031        next . ( { :halt ,  [ ] } ) 
@@ -1034,11 +1034,11 @@ defmodule Stream do
10341034
10351035      { other ,  user_acc }  -> 
10361036        reduce  =  & Enumerable . reduce ( other ,  & 1 ,  inner ) 
1037-         do_transform_inner_enum ( vals ,   user_acc ,  next_op ,  next ,  inner_acc ,  reduce ,  funs ) 
1037+         do_transform_inner_enum ( user_acc ,  next_op ,  next ,  inner_acc ,  reduce ,  funs ) 
10381038    end 
10391039  end 
10401040
1041-   defp  do_transform_inner_list ( vals ,   user_acc ,  next_op ,  next ,  inner_acc ,  reduce ,  funs )  do 
1041+   defp  do_transform_inner_list ( user_acc ,  next_op ,  next ,  inner_acc ,  reduce ,  funs )  do 
10421042    { _ ,  _ ,  _ ,  _ ,  after_fun }  =  funs 
10431043
10441044    try  do 
@@ -1050,20 +1050,20 @@ defmodule Stream do
10501050        :erlang . raise ( kind ,  reason ,  __STACKTRACE__ ) 
10511051    else 
10521052      { :done ,  acc }  -> 
1053-         do_transform_user ( vals ,   user_acc ,  next_op ,  next ,  { :cont ,  acc } ,  funs ) 
1053+         do_transform ( user_acc ,  next_op ,  next ,  { :cont ,  acc } ,  funs ) 
10541054
10551055      { :halted ,  acc }  -> 
10561056        next . ( { :halt ,  [ ] } ) 
10571057        after_fun . ( user_acc ) 
10581058        { :halted ,  acc } 
10591059
10601060      { :suspended ,  acc ,  continuation }  -> 
1061-         resume  =  & do_transform_inner_list ( vals ,   user_acc ,  next_op ,  next ,  & 1 ,  continuation ,  funs ) 
1061+         resume  =  & do_transform_inner_list ( user_acc ,  next_op ,  next ,  & 1 ,  continuation ,  funs ) 
10621062        { :suspended ,  acc ,  resume } 
10631063    end 
10641064  end 
10651065
1066-   defp  do_transform_inner_enum ( vals ,   user_acc ,  next_op ,  next ,  { op ,  inner_acc } ,  reduce ,  funs )  do 
1066+   defp  do_transform_inner_enum ( user_acc ,  next_op ,  next ,  { op ,  inner_acc } ,  reduce ,  funs )  do 
10671067    { _ ,  _ ,  _ ,  _ ,  after_fun }  =  funs 
10681068
10691069    try  do 
@@ -1077,18 +1077,18 @@ defmodule Stream do
10771077      # The user wanted to cont/suspend but the stream halted, 
10781078      # so we continue with the user intention. 
10791079      { :halted ,  [ inner_op  |  acc ] }  when  op  !=  :halt  and  inner_op  !=  :halt  -> 
1080-         do_transform_user ( vals ,   user_acc ,  next_op ,  next ,  { inner_op ,  acc } ,  funs ) 
1080+         do_transform ( user_acc ,  next_op ,  next ,  { inner_op ,  acc } ,  funs ) 
10811081
10821082      { :halted ,  [ _  |  acc ] }  -> 
10831083        next . ( { :halt ,  [ ] } ) 
10841084        after_fun . ( user_acc ) 
10851085        { :halted ,  acc } 
10861086
10871087      { :done ,  [ _  |  acc ] }  -> 
1088-         do_transform_user ( vals ,   user_acc ,  next_op ,  next ,  { :cont ,  acc } ,  funs ) 
1088+         do_transform ( user_acc ,  next_op ,  next ,  { :cont ,  acc } ,  funs ) 
10891089
10901090      { :suspended ,  [ _  |  acc ] ,  continuation }  -> 
1091-         resume  =  & do_transform_inner_enum ( vals ,   user_acc ,  next_op ,  next ,  & 1 ,  continuation ,  funs ) 
1091+         resume  =  & do_transform_inner_enum ( user_acc ,  next_op ,  next ,  & 1 ,  continuation ,  funs ) 
10921092        { :suspended ,  acc ,  resume } 
10931093    end 
10941094  end 
0 commit comments