       else if prop not instanceof Assign and prop not instanceof Comment
         prop = new Assign prop, prop, 'object'
       indent + prop.compile(o) + join
-    props = props.join('')
+    props = props.join ''
     obj   = "{#{ if props then '\n' + props + '\n' + @idt() else '' }}"
     if @tags.front then "(#{obj})" else obj
 

    this

  # An **Expressions** is the only node that can serve as the root.
  compile: (o) ->
    o or= {}
    if o.scope then super(o) else @compileRoot(o)

  compileNode: (o) ->
    (@compileExpression node, merge o for node in @expressions).join '\n'

  hasProp: 'Object.prototype.hasOwnProperty'
  slice:   'Array.prototype.slice'

# Levels indicates a node's position in the AST.
LVL_TOP    = 0  # ...;
LVL_PAREN  = 1  # (...)
LVL_LIST   = 2  # [...]
LVL_ASSIGN = 3  # x = ...
LVL_COND   = 4  # ... ? a : b
LVL_OP     = 5  # +...
LVL_ACCESS = 6  # ...[0]

# Tabs are two spaces for pretty printing.
TAB = '  '

