     varPart:        ''
     body:           Expressions.wrap([@body])
     if range
-      sourcePart:   source.compileVariables o
+      sourcePart:   source.compileVariables(o)
+      sourcePart:   + "\n$o.indent" if sourcePart
       forPart:      source.compile merge o, {index: ivar, step: @step}
     else
       svar:         scope.freeVariable()

      body.unshift  literal "var $index = $ivar" if index
      body:         ClosureNode.wrap(body, true)
    else
      varPart:      if @pattern then namePart else "${@idt(1)}$namePart;\n"
    if @object
      forPart:      "$ivar in $svar) { if (${utility('hasProp')}.call($svar, $ivar)"
    body:           body.compile(merge(o, {indent: @idt(1), top: true}))

    parts: []
    parts.push @from.compile o if @from isnt @fromVar
    parts.push @to.compile o if @to isnt @toVar
    if parts.length then "${parts.join('; ')};" else ''

  # When compiled normally, the range returns the contents of the *for loop*
  # needed to iterate over the values in the range. Used by comprehensions.
