 
   invert: -> new Op '!', this
 
+  unwrapAll: ->
+    node = this
+    continue until node is node = node.unwrap()
+    node
+
   # Default implementations of the common node properties and methods. Nodes
   # will override these with custom logic, if needed.
   children: []

        {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

        else
          # A shorthand `{a, b, @c} = val` pattern-match.
          if obj.base instanceof Parens
            [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
