     source        = if range then @source.base else @source
     codeInBody    = @body.contains (n) -> n instanceof CodeNode
     scope         = o.scope
-    name          = (@name and @name.compile(o)) or scope.freeVariable()
+    name          = (@name and @name.compile(o)) or scope.freeVariable 'index'
     index         = @index and @index.compile o
     scope.find(name,  immediate: yes) if name and not @pattern and (range or not codeInBody)
     scope.find(index, immediate: yes) if index
-    rvar          = scope.freeVariable() unless topLevel
-    ivar          = if codeInBody then scope.freeVariable() else if range then name else index or scope.freeVariable()
+    rvar          = scope.freeVariable 'result' unless topLevel
+    ivar          = if codeInBody then scope.freeVariable 'index' else if range then name else index or scope.freeVariable 'index'
     varPart       = ''
     guardPart     = ''
     body          = Expressions.wrap([@body])

    cond     =  @condition.compile(o)
    set      =  ''
    unless top
      rvar  = o.scope.freeVariable()
      set   = "#{@tab}#{rvar} = [];\n"
      @body = PushNode.wrap(rvar, @body) if @body
    pre     = "#{set}#{@tab}while (#{cond})"

      @source = baseline
      if prop.soakNode
        if @base.containsType(CallNode) and i is 0
          temp = o.scope.freeVariable 'cache'
          complete = "(#{ baseline = temp } = (#{complete}))"
        complete = if i is 0
          "(typeof #{complete} === \"undefined\" || #{baseline} === null) ? undefined : "
