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

  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



  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: []
