         ref = new Literal o.scope.freeVariable 'ref'
         fst = new Parens new Assign ref, fst
         snd.base = ref
-      ifn = new If new Existence(fst), snd, operation: yes
-      ifn.soakNode = on
+      ifn = new If new Existence(fst), snd, soak: yes
       return ifn
     null
 
   # Unfold a node's child if soak, then tuck the node under created `If`
   @unfoldSoak: (o, parent, name) ->
-    node = parent[name]
-    if node instanceof If and node.soakNode
-      ifnode = node
-    else if node instanceof Value
-      ifnode = node.unfoldSoak o
-    return unless ifnode
-    parent[name] = ifnode.body
-    ifnode.body = new Value parent
-    ifnode
+    return unless ifn = parent[name].unfoldSoak o
+    parent[name] = ifn.body
+    ifn.body     = new Value parent
+    ifn
 
 #### Comment
 

  # operators `?.` interspersed. Then we have to take care not to accidentally
  # evaluate a anything twice when building the soak chain.
  compileNode: (o) ->
    return ex.compile o if ex = @unfoldSoak o
    props = @properties
    @base.parenthetical = yes if @parenthetical and not props.length
    code = @base.compile o


  children: ['variable', 'args']

  constructor: (variable, @args, @soakNode) ->
    super()
    @isNew    = false
    @isSuper  = variable is 'super'
