     withBlock ||= returnFirst
 
     e source,
-      (v, k, into, w) -> into.push withBlock v, k, into, w
+      (v, k, into) -> into.push withBlock v, k, into
       whenBlock
       into ? []
 


  into = source if into == undefined

  if arrayIterableTest source
    if whenBlock
      for v, k in source when w = whenBlock v, k
        break unless withBlock v, k, into, w
    else
      for v, k in source
        break unless withBlock v, k, into
  else
    if whenBlock
      for k, v of source when w = whenBlock v, k
        break unless withBlock v, k, into, w
    else
      for k, v of source
        break unless withBlock v, k, into

  into



    if source?
      if arrayIterableTest source
        if whenBlock then withBlock v, k, into for v, k in source when whenBlock v, k
        else              withBlock v, k, into for v, k in source
      else
        if whenBlock then withBlock v, k, into for k, v of source when whenBlock v, k
        else              withBlock v, k, into for k, v of source

    into

