 # the top level of a block (which would be unnecessary), and we haven't
 # already been asked to return the result.
 Node::compile: (o) ->
-  @options: dup(o or {})
+  @options: _.clone o or {}
   @indent:  o.indent
   top:      if @top_sensitive() then @options.top else del @options, 'top'
   closure:  @is_statement() and not @is_statement_only() and not top and

    memo
  memo

# Dup an array or object.
dup: (input) ->
  if input instanceof Array
    val for val in input
  else
    output: {}
    (output[key]: val) for key, val of input
    output

# Merge objects.
merge: (src, dest) ->
  fresh: {}

  # force sub-else bodies into statement form.
  compile_statement: (o) ->
    child:        del o, 'chain_child'
    cond_o:       _.clone o
    del cond_o, 'returns'
    o.indent:     @idt(1)
    o.top:        true
