| var TYPE = require('../../tokenizer').TYPE; | 
|   | 
| var IDENT = TYPE.Ident; | 
| var ASTERISK = 0x002A;     // U+002A ASTERISK (*) | 
| var VERTICALLINE = 0x007C; // U+007C VERTICAL LINE (|) | 
|   | 
| function eatIdentifierOrAsterisk() { | 
|     if (this.scanner.tokenType !== IDENT && | 
|         this.scanner.isDelim(ASTERISK) === false) { | 
|         this.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.isDelim(VERTICALLINE)) { | 
|             this.scanner.next(); | 
|             eatIdentifierOrAsterisk.call(this); | 
|         } else { | 
|             eatIdentifierOrAsterisk.call(this); | 
|   | 
|             if (this.scanner.isDelim(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); | 
|     } | 
| }; |