diff --git a/packages/babel-parser/src/plugins/flow.js b/packages/babel-parser/src/plugins/flow.js index 50e4e7fa3c..49370d4549 100644 --- a/packages/babel-parser/src/plugins/flow.js +++ b/packages/babel-parser/src/plugins/flow.js @@ -1933,7 +1933,7 @@ export default (superClass: Class): Class => } // ensure that inside flow types, we bypass the jsx parser plugin - readToken(code: number): void { + getTokenFromCode(code: number): void { const next = this.state.input.charCodeAt(this.state.pos + 1); if ( this.state.inType && @@ -1944,7 +1944,7 @@ export default (superClass: Class): Class => this.state.isIterator = true; return super.readWord(); } else { - return super.readToken(code); + return super.getTokenFromCode(code); } } diff --git a/packages/babel-parser/src/plugins/jsx/index.js b/packages/babel-parser/src/plugins/jsx/index.js index 7a814cfbce..a129c6d27a 100644 --- a/packages/babel-parser/src/plugins/jsx/index.js +++ b/packages/babel-parser/src/plugins/jsx/index.js @@ -93,7 +93,7 @@ export default (superClass: Class): Class => ++this.state.pos; return this.finishToken(tt.jsxTagStart); } - return this.getTokenFromCode(ch); + return super.getTokenFromCode(ch); } out += this.state.input.slice(chunkStart, this.state.pos); return this.finishToken(tt.jsxText, out); @@ -520,8 +520,8 @@ export default (superClass: Class): Class => } } - readToken(code: number): void { - if (this.state.inPropertyName) return super.readToken(code); + getTokenFromCode(code: number): void { + if (this.state.inPropertyName) return super.getTokenFromCode(code); const context = this.curContext(); @@ -557,7 +557,7 @@ export default (superClass: Class): Class => return this.finishToken(tt.jsxTagStart); } - return super.readToken(code); + return super.getTokenFromCode(code); } updateContext(prevType: TokenType): void { diff --git a/packages/babel-parser/src/plugins/typescript.js b/packages/babel-parser/src/plugins/typescript.js index c73bc6fe9d..9758ac1569 100644 --- a/packages/babel-parser/src/plugins/typescript.js +++ b/packages/babel-parser/src/plugins/typescript.js @@ -2213,11 +2213,11 @@ export default (superClass: Class): Class => } // ensure that inside types, we bypass the jsx parser plugin - readToken(code: number): void { + getTokenFromCode(code: number): void { if (this.state.inType && (code === 62 || code === 60)) { return this.finishOp(tt.relational, 1); } else { - return super.readToken(code); + return super.getTokenFromCode(code); } } diff --git a/packages/babel-parser/src/tokenizer/index.js b/packages/babel-parser/src/tokenizer/index.js index b940da2c97..038d58948e 100644 --- a/packages/babel-parser/src/tokenizer/index.js +++ b/packages/babel-parser/src/tokenizer/index.js @@ -214,17 +214,7 @@ export default class Tokenizer extends LocationParser { if (curContext.override) { curContext.override(this); } else { - this.readToken(this.state.input.codePointAt(this.state.pos)); - } - } - - readToken(code: number): void { - // Identifier or keyword. '\uXXXX' sequences are allowed in - // identifiers, so '\' also dispatches to that. - if (isIdentifierStart(code) || code === charCodes.backslash) { - this.readWord(); - } else { - this.getTokenFromCode(code); + this.getTokenFromCode(this.state.input.codePointAt(this.state.pos)); } } @@ -826,6 +816,16 @@ export default class Tokenizer extends LocationParser { case charCodes.numberSign: this.readToken_numberSign(); return; + + case charCodes.backslash: + this.readWord(); + return; + + default: + if (isIdentifierStart(code)) { + this.readWord(); + return; + } } this.raise(