     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()

    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('; ')};\n$o.indent" 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.

    result: o.scope.freeVariable()
    i:      o.scope.freeVariable()
    clause: "$from <= $to ?"
    pre:    "\n${idt}${result} = []; ${vars}"
    body:   "var $i = $from; $clause $i <$equals $to : $i >$equals $to; $clause $i += 1 : $i -= 1"
    post:   "{ ${result}.push($i) };\n${idt}return $result;\n$o.indent"
    "(function(){${pre}\n${idt}for ($body)$post}).call(this)"

#### SliceNode

