| var TYPE = require('../../tokenizer').TYPE; |
| |
| var IDENTIFIER = TYPE.Identifier; |
| var ASTERISK = TYPE.Asterisk; |
| var VERTICALLINE = TYPE.VerticalLine; |
| |
| function eatIdentifierOrAsterisk() { |
| if (this.scanner.tokenType !== IDENTIFIER && |
| this.scanner.tokenType !== ASTERISK) { |
| this.scanner.error('Identifier or asterisk is expected'); |
| } |
| |
| this.scanner.next(); |
| } |
| |
| // ident |
| // ident|ident |
| // ident|* |
| // * |
| // *|ident |
| // *|* |
| // |ident |
| // |* |
| module.exports = { |
| name: 'TypeSelector', |
| structure: { |
| name: String |
| }, |
| parse: function() { |
| var start = this.scanner.tokenStart; |
| |
| if (this.scanner.tokenType === VERTICALLINE) { |
| this.scanner.next(); |
| eatIdentifierOrAsterisk.call(this); |
| } else { |
| eatIdentifierOrAsterisk.call(this); |
| |
| if (this.scanner.tokenType === VERTICALLINE) { |
| this.scanner.next(); |
| eatIdentifierOrAsterisk.call(this); |
| } |
| } |
| |
| return { |
| type: 'TypeSelector', |
| loc: this.getLocation(start, this.scanner.tokenStart), |
| name: this.scanner.substrToCursor(start) |
| }; |
| }, |
| generate: function(node) { |
| this.chunk(node.name); |
| } |
| }; |