You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
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); } };
|