   # It would be better not to generate them in the first place, but for now,
   # clean up obvious double-parentheses.
   compileRoot: (o) ->
-    o.indent = @tab = if o.noWrap then '' else TAB
-    o.scope = new Scope(null, this, null)
-    code = @compileWithDeclarations(o)
-    code = code.replace(TRAILING_WHITESPACE, '')
-    code = code.replace(DOUBLE_PARENS, '($1)')
-    if o.noWrap then code else "(function(){\n$code\n})();\n"
+    o.indent  = @tab = if o.noWrap then '' else TAB
+    o.scope   = new Scope(null, this, null)
+    code      = @compileWithDeclarations(o)
+    code      = code.replace(TRAILING_WHITESPACE, '')
+    code      = code.replace(DOUBLE_PARENS, '($1)')
+    if o.noWrap then code else "(function() {\n$code\n})();\n"
 
   # Compile the expressions body for the contents of a function, with
   # declarations of all inner variables pushed up to the top.

    else
      clause = "$@fromVar <= $@toVar ?"
      body   = "var $i = $@fromVar; $clause $i <$@equals $@toVar : $i >$@equals $@toVar; $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


  compileParam: (o) ->
    name = @name.compile(o)
    o.scope.find name
    end = ''
    if @trailings.length
      len = o.scope.freeVariable()
      o.scope.assign len, "arguments.length"
      variadic = o.scope.freeVariable()
      o.scope.assign variadic, "$len >= $@arglength"
      end = if @trailings.length then ", $len - ${@trailings.length}"
      for trailing, idx in @trailings
        pos = @trailings.length - idx
        o.scope.assign(trailing.compile(o), "arguments[$variadic ? $len - $pos : ${@index + idx}]")
    "$name = ${utility('slice')}.call(arguments, $@index$end)"

  # A compiling a splat as a destructuring assignment means slicing arguments
  # from the right-hand-side's corresponding array.
