         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

        {variable: {base: idx}, value: obj} = obj
      else
        if obj.base instanceof Parens
          [obj, idx] = @matchParens o, obj
        else
          idx = if isObject
            if obj.tags.this then obj.properties[0].name else obj

  # return the result, and it's an expression, simply return it. If it's a
  # statement, ask the statement to do so.
  compileExpression: (node, o) ->
    node = node.unwrapAll()
    node = node.unfoldSoak(o) or node
    node.tags.front = on
    o.level = LEVEL_TOP
