 
   fa = ->
     stackpop = _stack.pop()
-    stackpop._finally.apply null,[].slice.call(arguments)
+    stackpop._finally.apply this,[].slice.call(arguments)
 
   _finally: ->
     stackpop = _stack.pop()
-    stackpop._finally.apply null,[stackpop.next].concat([].slice.call(arguments))
+    stackpop._finally.apply this,[stackpop.next].concat([].slice.call(arguments))
 
   _throw: (_e) =>
     catchset = {}
-    _while ->(true),
+    _w ->(true),
     [],
     (_break,_next)=>
       catchset = _stack.pop()

    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

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