     [step, pvar] = @step.compileLoopReference o, 'step' if @step
     if @from
       [tail, tvar] = @to.compileLoopReference o, 'to'
-      vars  = "#{ivar} = #{ @from.compile o }"
-      vars += ", #{tail}" if tail isnt tvar
+      vars  = ivar + ' = ' + @from.compile o
+      vars += ', ' + tail if tail isnt tvar
       cond = if +pvar
         "#{ivar} #{ if pvar < 0 then '>' else '<' }= #{tvar}"
       else
         "#{pvar} < 0 ? #{ivar} >= #{tvar} : #{ivar} <= #{tvar}"
     else
-      if name
+      if name or @object and not @raw
         [sourcePart, svar] = @source.compileLoopReference o, 'ref'
       else
         sourcePart = svar = @source.compile o, LVL_PAREN

          lvar = scope.freeVariable 'len'
          vars = "#{ivar} = 0, #{lvar} = #{svar}.length"
          cond = "#{ivar} < #{lvar}"
    defPart = ''
    if @object
      forPart   = "#{ivar} in #{sourcePart}"
      guardPart = not @raw and
        "#{idt}if (!#{ utility 'hasProp' }.call(#{svar}, #{ivar})) continue;\n"
    else
      vars   += ", #{step}" if step isnt pvar
      defPart = "#{@tab}#{sourcePart};\n" if svar isnt sourcePart
      forPart = "#{vars}; #{cond}; " + ivar + switch +pvar
        when  1 then '++'
        when -1 then '--'
        else (if pvar < 0 then ' -= ' + pvar.slice 1 else ' += ' + pvar)
    if o.level > LVL_TOP or @returns
      rvar      = scope.freeVariable 'result'
      defPart  += "#{@tab}#{rvar} = [];\n"
      resultRet = @compileReturnValue rvar, o
      body      = Push.wrap rvar, body
    body     = Expressions.wrap [new If @guard, body] if @guard
    varPart  = "#{idt}#{namePart};\n" if namePart
    o.indent = idt
    """
    #{ defPart   or '' }#{@tab}for (#{forPart}) {
    #{ guardPart or '' }#{varPart}#{ body.compile o, LVL_TOP }
    #{@tab}}#{ resultRet or '' }
    """

#### Switch


    extend this, head
    @step  or= new Literal 1 unless @object
    @pattern = @name instanceof Value
    @returns = false

  makeReturn: ->
