   elseBodyNode: -> @elseBody?.unwrap()
 
   # Rewrite a chain of **Ifs** to add a default case as the final *else*.
-  addElse: (elseBody, statement) ->
+  addElse: (elseBody) ->
     if @isChain
-      @elseBodyNode().addElse elseBody, statement
+      @elseBodyNode().addElse elseBody
     else
-      @isChain = elseBody instanceof If
+      @isChain  = elseBody instanceof If
       @elseBody = @ensureExpressions elseBody
     this
 
   # The **If** only compiles into a statement if either of its bodies needs
   # to be a statement. Otherwise a conditional operator is safe.
   isStatement: (o) ->
-    @statement or= !!((o and o.top) or @bodyNode().isStatement(o) or (@elseBody and @elseBodyNode().isStatement(o)))
+    @statement or= o?.top or @bodyNode().isStatement(o) or @elseBodyNode()?.isStatement(o)
 
   compileCondition: (o) ->
-    conditions = flatten [@condition]
-    conditions[0].parenthetical = yes if conditions.length is 1
-    (cond.compile(o) for cond in conditions).join(' || ')
+    @condition.parenthetical = yes
+    @condition.compile o
 
   compileNode: (o) ->
     if @isStatement o then @compileStatement o else @compileExpression o

    if isValue = @isValue()
      return @compilePatternMatch(o) if @variable.isArray() or @variable.isObject()
      return @compileSplice(o) if @variable.isSplice()
      return node.compile o if node = Value.unfoldSoak o, this, 'variable'
    top    = del o, 'top'
    stmt   = del o, 'asStatement'
    name   = @variable.compile(o)

    condO    = merge o
    o.indent = @idt 1
    o.top    = true
    ifPart   = "if (#{ @compileCondition condO }) {\n#{ @body.compile o }\n#{@tab}}"
    ifPart   = @tab + ifPart unless child
    return ifPart unless @elseBody
    ifPart + if @isChain
      ' else ' + @elseBodyNode().compile merge o, indent: @tab, chainChild: true
    else
      " else {\n#{ @elseBody.compile(o) }\n#{@tab}}"

  # Compile the If as a conditional operator.
  compileExpression: (o) ->
