         _stack.push catchset
         result = catchset.e_array.indexOf _e
         if result != -1
-          catchset._catch.apply null,[_e].concat([].slice.call(arguments))
+          catchset._catch.apply this,[_e].concat([].slice.call(arguments))
         else
           if arguments.length <= 2
-            fa.apply null,[_next]
+            fa.apply this,[_next]
           else
-            fa.apply null,[].slice.call(arguments).shift().shift().unshift(_next)
+            fa.apply this,[].slice.call(arguments).shift().shift().unshift(_next)
       else
         _break()
     ,->

    if isarr
      for val,i in obj
        num++
        applyfunc.apply null,[val,i,->
          next.apply null,[num,endfunc].concat([].slice.call(arguments))
        ].concat(applyargs_array)
    else
      for key,val of obj
        num++
        applyfunc.apply null,[key,val,->
          next.apply null,[num,endfunc].concat([].slice.call(arguments))
        ].concat(applyargs_array)
  )(->
    count = 0


  fa = ->
    stackpop = _stack.pop()
    stackpop._finally.apply this,[].slice.call(arguments)

  _finally: ->
    stackpop = _stack.pop()
    stackpop._finally.apply this,[stackpop.next].concat([].slice.call(arguments))

  _throw: (_e) =>
    catchset = {}
    _w ->(true),
    [],
    (_break,_next)=>
      catchset = _stack.pop()
