       list.push call
       break unless (call = call.variable.base) instanceof Call
     for call in list.reverse()
-      if node
+      if ifn
         if call.variable instanceof Call
-          call.variable = node
+          call.variable = ifn
         else
-          call.variable.base = node
-      node = Value.unfoldSoak o, call, 'variable'
-    node
+          call.variable.base = ifn
+      ifn = Value.unfoldSoak o, call, 'variable'
+    ifn
 
   # Compile a vanilla function call.
   compileNode: (o) ->
-    return node.compile o if node = @unfoldSoak o
+    return ifn.compile o if ifn = @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) ->
    call = this
    list = []
    loop

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

  eachChild: (func) ->
