     return @compile_assignment(o) if @ASSIGNMENT.indexOf(@operator) >= 0
     return @compile_unary(o)      if @is_unary()
     return @compile_existence(o)  if @operator is '?'
-    @first.compile(o) + ' ' + @operator + ' ' + @second.compile(o)
+    [@first.compile(o), @operator, @second.compile(o)].join ' '
 
   # Mimic Python's chained comparisons. See:
   # http://docs.python.org/reference/expressions.html#notin
   compile_chain: (o) ->
     shared: @first.unwrap().second
     [@first.second, shared]: shared.compile_reference(o) if shared instanceof CallNode
-    '(' + @first.compile(o) + ') && (' + shared.compile(o) + ' ' + @operator + ' ' + @second.compile(o) + ')'
+    [first, second, shared]: [@first.compile(o), @second.compile(o), shared.compile(o)]
+    "($first) && ($shared $@operator $second)"
 
   compile_assignment: (o) ->
     [first, second]: [@first.compile(o), @second.compile(o)]
     o.scope.find(first) if first.match(IDENTIFIER)
-    return first + ' = ' + ExistenceNode.compile_test(o, @first) + ' ? ' + first + ' : ' + second if @operator is '?='
-    first + ' = ' + first + ' ' + @operator.substr(0, 2) + ' ' + second
+    return "$first = ${ ExistenceNode.compile_test(o, @first) } ? $first : $second" if @operator is '?='
+    "$first = $first ${ @operator.substr(0, 2) } $second"
 
   compile_existence: (o) ->
     [first, second]: [@first.compile(o), @second.compile(o)]
-    ExistenceNode.compile_test(o, @first) + ' ? ' + first + ' : ' + second
+    test: ExistenceNode.compile_test(o, @first)
+    "$test ? $first : $second"
 
   compile_unary: (o) ->
     space: if @PREFIX_OPERATORS.indexOf(@operator) >= 0 then ' ' else ''


  toString: (idt) ->
    idt ||= ''
    '\n' + idt + @type + (child.toString(idt + TAB) for child in @real_children()).join('')


# A splat, either as a parameter to a function, an argument to a call,

    o.top:        true
    if_dent:      if child then '' else @idt()
    com_dent:     if child then @idt() else ''
    prefix:       if @comment then "${ @comment.compile(cond_o) }\n$com_dent" else ''
    body:         Expressions.wrap([@body]).compile(o)
    if_part:      "$prefix${if_dent}if (${ @compile_condition(cond_o) }) {\n$body\n${@idt()}}"
    return if_part unless @else_body
    else_part: if @is_chain()
      ' else ' + @else_body.compile(merge(o, {indent: @idt(), chain_child: true}))
    else
      " else {\n${ Expressions.wrap([@else_body]).compile(o) }\n${@idt()}}"
    "$if_part$else_part"

  # Compile the IfNode into a ternary operator.
  compile_ternary: (o) ->
    if_part:    @condition.compile(o) + ' ? ' + @body.compile(o)
    else_part:  if @else_body then @else_body.compile(o) else 'null'
    "$if_part : $else_part"
