       body.unshift  new Literal "var #{name} = #{ivar}" if range
       body.unshift  new Literal "var #{namePart}" if namePart
       body.unshift  new Literal "var #{index} = #{ivar}" if index
+      body.push     new Assign new Literal(ivar), new Literal index if index
+      body.push     new Assign new Literal(nvar), new Literal name if nvar
       body        = Closure.wrap(body, true)
+      body.push     new Assign new Literal(index), new Literal ivar if index
+      body.push     new Assign new Literal(name), new Literal nvar or ivar if name
     else
       varPart     = "#{idt1}#{namePart};\n" if namePart
     if @object

  # object with their parent closure, to preserve the expected lexical scope.
  compileClosure: (o) ->
    o.sharedScope = o.scope
    Closure.wrap(this, no, yes).compile o

  # If the code generation wishes to use the result of a complex expression
  # in multiple places, ensure that the expression is only ever evaluated once,

  # Wrap the expressions body, unless it contains a pure statement,
  # in which case, no dice. If the body mentions `this` or `arguments`,
  # then make sure that the closure wrapper preserves the original values.
  wrap: (expressions, statement) ->
    return expressions if expressions.containsPureStatement()
    func = new Parens new Code [], Expressions.wrap [expressions]
    args = []
