         else
           # A shorthand `{a, b, @c} = val` pattern-match.
           if obj.base instanceof Parens
-            [obj, idx] = @matchParens o, obj
+            [obj, idx] = Value.wrap(obj.unwrapAll()).cacheReference o
           else
             idx = if obj.tags.this then obj.properties[0].name else obj
       if not splat and obj instanceof Splat

  compileConditional: (o) ->
    [left, rite] = @variable.cacheReference o
    return new Op(@context.slice(0, -1), left, new Assign(rite, @value)).compile o

  matchParens: (o, obj) ->
    continue until obj is obj = obj.unwrap()
    Value.wrap(obj).cacheReference o

#### Code


        {variable: {base: idx}, value: obj} = obj
      else
        if obj.base instanceof Parens
          [obj, idx] = Value.wrap(obj.unwrapAll()).cacheReference o
        else
          idx = if isObject
            if obj.tags.this then obj.properties[0].name else obj
