       body.push     lastLine
       o.indent    = @idt 1
       body        = Expressions.wrap [new Literal body.compile o]
-      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
+      body.push     new Assign @index, new Literal ivar if index
+      body.push     new Assign @name, new Literal nvar or ivar if name
     else
       varPart     = "#{idt1}#{namePart};\n" if namePart
       if forPart and name is ivar

    if @guard
      body        = Expressions.wrap [new If @guard, body]
    if codeInBody
      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
      lastLine    = body.expressions.pop()

    @object = !!source.object
    [@name, @index] = [@index, @name] if @object
    throw SyntaxError 'index cannot be a pattern matching expression' if @index instanceof Value
    @range   = @source instanceof Value and @source.base instanceof Range and not @source.properties.length
    @pattern = @name instanceof Value
    throw SyntaxError 'cannot pattern match a range loop' if @range and @pattern
    @returns = false

  makeReturn: ->
