   constructor: (@__ctor__, @__call__) ->
     @prototype = @__ctor__.prototype
 
-  apply: (_this, args) ->
-    await this.applyCps _this, args, defer(result), errCont
+  apply: (thisArg, args) ->
+    await this.applyCps thisArg, args, defer(result), errCont
     return result
 
   applyCps: (appliedThis, args, cont, errCont) ->

    calleeNode.env.decreaseScope()
    cont(result)

  call: (_this) -> @apply _this, Array::slice arguments, 1

  callCps: (_this, cont, errCont) ->
    applyCps _this, (Array::slice arguments, 1), cont, errCont

interp = (node, env=new Environment, cont, errCont) ->
  try

      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
