   toString: (idt, override) ->
     idt or= ''
     children = (child.toString idt + TAB for child in @collectChildren()).join('')
-    klass = override or @constructor.name + if @soakNode or @exist then '?' else ''
+    klass = override or @constructor.name + if @soakNode then '?' else ''
     '\n' + idt + klass + children
 
   eachChild: (func) ->

      list.push call
      break unless (call = call.variable.base) instanceof Call
    for call in list.reverse()
      if node
        if call.variable instanceof Call
          call.variable = node
        else
          call.variable.base = node
      node = Value.unfoldSoak o, call, 'variable'
    node

  # Compile a vanilla function call.
  compileNode: (o) ->
    return node.compile o if node = @unfoldSoak o
    @variable?.tags.front = @tags.front
    if @exist
      if val = @variable
        val = new Value val unless val instanceof Value
        [left, rite] = val.cacheReference o
        rite = new Call rite, @args
      else
        left = new Literal @superReference o
        rite = new Call new Value(left), @args
        rite.isNew = @isNew
      left = "typeof #{ left.compile o } !== \"function\""
      rite = rite.compile o
      return "(#{left} ? undefined : #{rite})"
    for arg in @args when arg instanceof Splat
      return @compileSplat o
    args = ((arg.parenthetical = on) and arg.compile o for arg in @args).join ', '


  # Soaked chained invocations unfold into if/else ternary structures.
  unfoldSoak: (o) ->
    if @soakNode
      if val = @variable
        val = new Value val unless val instanceof Value
        [left, rite] = val.cacheReference o
      else
        left = new Literal @superReference o
        rite = new Value left
      rite = new Call rite, @args
      rite.isNew = @isNew
      left = new Literal "typeof #{ left.compile o } === \"function\""
      ifn  = new If left, new Value(rite), soak: yes
      return ifn
    call = this
    list = []
    loop
