lib/nodes/node.js
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);
    }
  }
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);
    }
  }
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 ) ; } }
Operate on `right` with the given `op`.

@param {String} op
@param {Node} right
@return {Node}
@api public
Operate on right with the given op .