   compile_node: (o) ->
     if @is_statement() then @compile_statement(o) else @compile_ternary(o)
 
-  # Compile the IfNode as a regular if-else statement. Flattened chains
-  # force sub-else bodies into statement form.
+  # Compile the **IfNode** as a regular *if-else* statement. Flattened chains
+  # force inner *else* bodies into statement form.
   compile_statement: (o) ->
     @rewrite_switch(o) if @switcher
     child:        del o, 'chain_child'


# Tabs are two spaces for pretty printing.
TAB: '  '
TRAILING_WHITESPACE: /\s+$/gm

# Keep the identifier regex in sync with the Lexer.
IDENTIFIER:   /^[a-zA-Z$_](\w|\$)*$/

# Utility Functions
# -----------------

# Merge objects.
merge: (options, overrides) ->
  fresh: {}
  (fresh[key]: val) for key, val of options

    @multiple:  true if @condition instanceof Array
    @condition: new OpNode('!', new ParentheticalNode(@condition)) if @tags.invert

  # Add a new *else* clause to this **IfNode**, or push it down to the bottom
  # of the chain recursively.
  push: (else_body) ->
    eb: else_body.unwrap()
    if @else_body then @else_body.push(eb) else @else_body: eb
