code: function() {
      var node = this.member()
        , id;
      while (this.accept('[')) {
        node = new nodes.BinOp('[]', node, this.expression());
        this.expect(']');
      }
      // TODO: TernaryOp :)
      if (this.accept('=')) {
        node.op += '=';
        node.val = this.list();
        // @block support
        if (node.val.isEmpty) this.assignAtblock(node.val);
      }
      return node;
    }
docs: member ('[' expression ']')+ '='?
  | member