             interp ast, env.getGlobalEnv(), cont, errCont
         else
           if callee instanceof InterpretedFunction
-            callee.applyCps _this, args, cont, errCont
-          else
-            cont callee.apply _this, args
+            callee.applyCps thisArg, args, cont, errCont
+          else
+            cont callee.apply thisArg, args
       when 'NewExpression'
         await interp node.callee, env, defer(callee), errCont
         args =

  constructor: (@__ctor__, @__call__) ->
    @prototype = @__ctor__.prototype

  apply: (_this, args) ->
    await this.applyCps _this, args, defer(result), errCont
    return result

  applyCps: (appliedThis, args, cont, errCont) ->

      when 'CallExpression'
        callee = null
        if node.callee.type is 'MemberExpression'
          await evalMemberExpr node.callee, env, defer(thisArg, calleeName), errCont
          callee = thisArg[calleeName]
        else
          thisArg = undefined
          await interp node.callee, env, defer(callee), errCont
        args = []
        for arg in node.arguments
