   # 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
+      if @variable
+        return ifn if ifn = If.unfoldSoak o, this, 'variable'
+        [left, rite] = Value.wrap(@variable).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
+      return new If left, new Value(rite), soak: yes, operation: @tags.operation
     call = this
     list = []
     loop

        ref = new Literal o.scope.freeVariable 'ref'
        fst = new Parens new Assign ref, fst
        snd.base = ref
      ifn = new If new Existence(fst), snd, soak: yes
      return ifn
    null

#### Comment


    splatargs = @compileSplatArguments o
    return "#{ @superReference o }.apply(this, #{splatargs})" if @isSuper
    unless @isNew
      base = Value.wrap @variable
      if (name = base.properties.pop()) and base.isComplex()
        ref = o.scope.freeVariable 'this'
        fun = "(#{ref} = #{ base.compile o })#{ name.compile o }"
