diff --git a/packages/babel-parser/src/parser/util.js b/packages/babel-parser/src/parser/util.js index d6aa742df6..8b47a85be6 100644 --- a/packages/babel-parser/src/parser/util.js +++ b/packages/babel-parser/src/parser/util.js @@ -6,7 +6,6 @@ import State from "../tokenizer/state"; import type { Node } from "../types"; import { lineBreak } from "../util/whitespace"; import { isIdentifierChar } from "../util/identifier"; -import * as charCodes from "charcodes"; import { Errors } from "./error"; type TryParse = { @@ -35,18 +34,6 @@ export default class UtilParser extends Tokenizer { return this.match(tt.relational) && this.state.value === op; } - isLookaheadRelational(op: "<" | ">"): boolean { - const next = this.nextTokenStart(); - if (this.input.charAt(next) === op) { - if (next + 1 === this.input.length) { - return true; - } - const afterNext = this.input.charCodeAt(next + 1); - return afterNext !== op.charCodeAt(0) && afterNext !== charCodes.equalsTo; - } - return false; - } - // TODO expectRelational(op: "<" | ">"): void { diff --git a/packages/babel-parser/src/plugins/flow.js b/packages/babel-parser/src/plugins/flow.js index b532ce04f4..1887cfa68a 100644 --- a/packages/babel-parser/src/plugins/flow.js +++ b/packages/babel-parser/src/plugins/flow.js @@ -2873,7 +2873,7 @@ export default (superClass: Class): Class => noCalls: ?boolean, subscriptState: N.ParseSubscriptState, ): N.Expression { - if (this.match(tt.questionDot) && this.isLookaheadRelational("<")) { + if (this.match(tt.questionDot) && this.isLookaheadToken_lt()) { subscriptState.optionalChainMember = true; if (noCalls) { subscriptState.stop = true; @@ -3475,4 +3475,16 @@ export default (superClass: Class): Class => super.updateContext(prevType); } } + + // check if the next token is a tt.relation("<") + isLookaheadToken_lt(): boolean { + const next = this.nextTokenStart(); + if (this.input.charCodeAt(next) === charCodes.lessThan) { + const afterNext = this.input.charCodeAt(next + 1); + return ( + afterNext !== charCodes.lessThan && afterNext !== charCodes.equalsTo + ); + } + return false; + } };