diff --git a/packages/babel-parser/src/plugins/flow.js b/packages/babel-parser/src/plugins/flow.js index 59dd4de0c3..8dcbdf7a54 100644 --- a/packages/babel-parser/src/plugins/flow.js +++ b/packages/babel-parser/src/plugins/flow.js @@ -1935,7 +1935,9 @@ export default (superClass: Class): Class => // ensure that inside flow types, we bypass the jsx parser plugin getTokenFromCode(code: number): void { const next = this.state.input.charCodeAt(this.state.pos + 1); - if ( + if (code === charCodes.leftCurlyBrace && next === charCodes.verticalBar) { + return this.finishOp(tt.braceBarL, 2); + } else if ( this.state.inType && (code === charCodes.greaterThan || code === charCodes.lessThan) ) { @@ -2701,6 +2703,20 @@ export default (superClass: Class): Class => super.readToken_mult_modulo(code); } + readToken_pipe_amp(code: number): void { + const next = this.state.input.charCodeAt(this.state.pos + 1); + if ( + code === charCodes.verticalBar && + next === charCodes.rightCurlyBrace + ) { + // '|}' + this.finishOp(tt.braceBarR, 2); + return; + } + + super.readToken_pipe_amp(code); + } + parseTopLevel(file: N.File, program: N.Program): N.File { const fileNode = super.parseTopLevel(file, program); if (this.state.hasFlowComment) { diff --git a/packages/babel-parser/src/tokenizer/index.js b/packages/babel-parser/src/tokenizer/index.js index 038d58948e..4b5a7adc49 100644 --- a/packages/babel-parser/src/tokenizer/index.js +++ b/packages/babel-parser/src/tokenizer/index.js @@ -482,7 +482,7 @@ export default class Tokenizer extends LocationParser { } readToken_pipe_amp(code: number): void { - // '|&' + // '||' '&&' '||=' '&&=' const next = this.state.input.charCodeAt(this.state.pos + 1); if (next === code) { @@ -504,10 +504,6 @@ export default class Tokenizer extends LocationParser { if (next === charCodes.greaterThan) { this.finishOp(tt.pipeline, 2); return; - } else if (next === charCodes.rightCurlyBrace && this.hasPlugin("flow")) { - // '|}' - this.finishOp(tt.braceBarR, 2); - return; } } @@ -688,20 +684,10 @@ export default class Tokenizer extends LocationParser { ++this.state.pos; this.finishToken(tt.bracketR); return; - case charCodes.leftCurlyBrace: - if ( - this.hasPlugin("flow") && - this.state.input.charCodeAt(this.state.pos + 1) === - charCodes.verticalBar - ) { - this.finishOp(tt.braceBarL, 2); - } else { - ++this.state.pos; - this.finishToken(tt.braceL); - } + ++this.state.pos; + this.finishToken(tt.braceL); return; - case charCodes.rightCurlyBrace: ++this.state.pos; this.finishToken(tt.braceR);