code: function(op, right){
      switch (op) {
        case 'is a':
          if ('string' == right.first.nodeName) {
            return nodes.Boolean(this.nodeName == right.val);
          } else {
            throw new Error('"is a" expects a string, got ' + right.toString());
          }
        case '==':
          return nodes.Boolean(this.hash == right.hash);
        case '!=':
          return nodes.Boolean(this.hash != right.hash);
        case '>=':
          return nodes.Boolean(this.hash >= right.hash);
        case '<=':
          return nodes.Boolean(this.hash <= right.hash);
        case '>':
          return nodes.Boolean(this.hash > right.hash);
        case '<':
          return nodes.Boolean(this.hash < right.hash);
        case '||':
          return this.toBoolean().isTrue
            ? this
            : right;
        case 'in':
          var vals = utils.unwrap(right).nodes
            , len = vals && vals.length
            , hash = this.hash;
          if (!vals) throw new Error('"in" given invalid right-hand operand, expecting an expression');
  
          // 'prop' in obj
          if (1 == len && 'object' == vals[0].nodeName) {
            return nodes.Boolean(vals[0].has(this.hash));
          }
  
          for (var i = 0; i < len; ++i) {
            if (hash == vals[i].hash) {
              return nodes.true;
            }
          }
          return nodes.false;
        case '&&':
          var a = this.toBoolean()
            , b = right.toBoolean();
          return a.isTrue && b.isTrue
            ? right
            : a.isFalse
              ? this
              : right;
        default:
          if ('[]' == op) {
            var msg = 'cannot perform '
              + this
              + '[' + right + ']';
          } else {
            var msg = 'cannot perform'
              + ' ' + this
              + ' ' + op
              + ' ' + right;
          }
          throw new Error(msg);
      }
    }
docs: Operate on `right` with the given `op`.
  
  @param {String} op
  @param {Node} right
  @return {Node}
  @api public