var TYPE = require('../../tokenizer').TYPE; 
 | 
  
 | 
var IDENT = TYPE.Ident; 
 | 
var PLUSSIGN = 0x002B;        // U+002B PLUS SIGN (+) 
 | 
var SOLIDUS = 0x002F;         // U+002F SOLIDUS (/) 
 | 
var GREATERTHANSIGN = 0x003E; // U+003E GREATER-THAN SIGN (>) 
 | 
var TILDE = 0x007E;           // U+007E TILDE (~) 
 | 
  
 | 
// + | > | ~ | /deep/ 
 | 
module.exports = { 
 | 
    name: 'Combinator', 
 | 
    structure: { 
 | 
        name: String 
 | 
    }, 
 | 
    parse: function() { 
 | 
        var start = this.scanner.tokenStart; 
 | 
        var code = this.scanner.source.charCodeAt(this.scanner.tokenStart); 
 | 
  
 | 
        switch (code) { 
 | 
            case GREATERTHANSIGN: 
 | 
            case PLUSSIGN: 
 | 
            case TILDE: 
 | 
                this.scanner.next(); 
 | 
                break; 
 | 
  
 | 
            case SOLIDUS: 
 | 
                this.scanner.next(); 
 | 
  
 | 
                if (this.scanner.tokenType !== IDENT || this.scanner.lookupValue(0, 'deep') === false) { 
 | 
                    this.error('Identifier `deep` is expected'); 
 | 
                } 
 | 
  
 | 
                this.scanner.next(); 
 | 
  
 | 
                if (!this.scanner.isDelim(SOLIDUS)) { 
 | 
                    this.error('Solidus is expected'); 
 | 
                } 
 | 
  
 | 
                this.scanner.next(); 
 | 
                break; 
 | 
  
 | 
            default: 
 | 
                this.error('Combinator is expected'); 
 | 
        } 
 | 
  
 | 
        return { 
 | 
            type: 'Combinator', 
 | 
            loc: this.getLocation(start, this.scanner.tokenStart), 
 | 
            name: this.scanner.substrToCursor(start) 
 | 
        }; 
 | 
    }, 
 | 
    generate: function(node) { 
 | 
        this.chunk(node.name); 
 | 
    } 
 | 
}; 
 |