     else if this instanceof ValueNode and options.assignment
       this.cacheIndexes(o)
     else
-      reference = literal o.scope.freeVariable()
+      reference = literal o.scope.freeVariable 'cache'
       compiled  = new AssignNode reference, this
       [compiled, reference]
     return [pair[0].compile(o), pair[1].compile(o)] if options.precompile

      sourcePart  = source.compileVariables(o)
      forPart     = source.compile merge o, index: ivar, step: @step
    else
      svar        = scope.freeVariable()
      sourcePart  = "#{svar} = #{ @source.compile(o) };"
      if @pattern
        namePart  = new AssignNode(@name, literal("#{svar}[#{ivar}]")).compile(merge o, {indent: @idt(1), top: true}) + '\n'
      else
        namePart  = "#{name} = #{svar}[#{ivar}]" if name
      unless @object
        lvar      = scope.freeVariable()
        stepPart  = if @step then "#{ivar} += #{ @step.compile(o) }" else "#{ivar}++"
        forPart   = "#{ivar} = 0, #{lvar} = #{svar}.length; #{ivar} < #{lvar}; #{stepPart}"
    sourcePart    = (if rvar then "#{rvar} = []; " else '') + sourcePart

  # equivalent syntax tree and compile that, in pieces. You can see the
  # constructor, property assignments, and inheritance getting built out below.
  compileNode: (o) ->
    @variable  = literal o.scope.freeVariable 'klass' if @variable is '__temp__'
    extension  = @parent and new ExtendsNode(@variable, @parent)
    props      = new Expressions
    o.top      = true
