     return this if not last or last instanceof ReturnNode
     @expressions[idx]: last.makeReturn()
     this
-
-  # A bound function uses a local `__this` variable instead of the real `this`.
-  rewriteThis: ->
-    @traverseChildren false, (child) ->
-      if child instanceof ValueNode and child.base.value is 'this'
-        child.base: literal '__this'
 
   # An **Expressions** is the only node that can serve as the root.
   compile: (o) ->

      i: + 1
    params: (param.compile(o) for param in params)
    @body.makeReturn()
    @body.rewriteThis() if @bound
    (o.scope.parameter(param)) for param in params
    code: if @body.expressions.length then "\n${ @body.compileWithDeclarations(o) }\n" else ''
    func: "function(${ params.join(', ') }) {$code${ code and @idt(if @bound then 1 else 0) }}"
    func: "($func)" if top and not @bound
    return func unless @bound
    "(function(__this) {\n${@idt(1)}return $func;\n$@tab})(this)"

  topSensitive: ->
    true

    top:          del o, 'top'
    o.scope:      sharedScope or new Scope(o.scope, @body, this)
    o.top:        true
    o.indent:     @idt(1)
    del o, 'noWrap'
    del o, 'globals'
    i: 0
