From 04336bd1810836e8c7efd369e5e14320c575114d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Fri, 3 Jan 2020 21:41:29 -0500 Subject: [PATCH] address review comments --- packages/babel-parser/src/parser/base.js | 2 +- .../babel-parser/src/parser/expression.js | 30 +++++++++---------- packages/babel-parser/src/parser/index.js | 8 ++--- packages/babel-parser/src/parser/statement.js | 14 ++++----- .../src/plugins/typescript/index.js | 14 ++++----- .../babel-parser/src/tokenizer/context.js | 2 +- .../src/util/production-parameter.js | 8 ++--- packages/babel-parser/src/util/scopeflags.js | 18 +++++------ 8 files changed, 48 insertions(+), 48 deletions(-) diff --git a/packages/babel-parser/src/parser/base.js b/packages/babel-parser/src/parser/base.js index a67756d97db0..6edb7ef063ae 100644 --- a/packages/babel-parser/src/parser/base.js +++ b/packages/babel-parser/src/parser/base.js @@ -13,7 +13,7 @@ export default class BaseParser { inModule: boolean; scope: ScopeHandler<*>; classScope: ClassScopeHandler; - param: ProductionParameterHandler; + prodParam: ProductionParameterHandler; plugins: PluginsMap; filename: ?string; sawUnambiguousESM: boolean = false; diff --git a/packages/babel-parser/src/parser/expression.js b/packages/babel-parser/src/parser/expression.js index d251a6244a3d..8d26c6b57d11 100644 --- a/packages/babel-parser/src/parser/expression.js +++ b/packages/babel-parser/src/parser/expression.js @@ -43,7 +43,7 @@ import { import { ExpressionErrors } from "./util"; import { PARAM_AWAIT, - PARAM_, + PARAM, functionFlags, } from "../util/production-parameter"; @@ -110,12 +110,12 @@ export default class ExpressionParser extends LValParser { // Convenience method to parse an Expression only getExpression(): N.Expression { - let paramFlags = PARAM_; + let paramFlags = PARAM; if (this.hasPlugin("topLevelAwait") && this.inModule) { paramFlags |= PARAM_AWAIT; } this.scope.enter(SCOPE_PROGRAM); - this.param.enter(paramFlags); + this.prodParam.enter(paramFlags); this.nextToken(); const expr = this.parseExpression(); if (!this.match(tt.eof)) { @@ -178,7 +178,7 @@ export default class ExpressionParser extends LValParser { const startPos = this.state.start; const startLoc = this.state.startLoc; if (this.isContextual("yield")) { - if (this.param.hasYield) { + if (this.prodParam.hasYield) { let left = this.parseYield(noIn); if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); @@ -370,7 +370,7 @@ export default class ExpressionParser extends LValParser { if ( this.match(tt.name) && this.state.value === "await" && - this.param.hasAwait + this.prodParam.hasAwait ) { throw this.raise( this.state.start, @@ -1191,7 +1191,7 @@ export default class ExpressionParser extends LValParser { this.next(); meta = this.createIdentifier(meta, "function"); - if (this.param.hasYield && this.eat(tt.dot)) { + if (this.prodParam.hasYield && this.eat(tt.dot)) { return this.parseMetaProperty(node, meta, "sent"); } return this.parseFunction(node); @@ -1868,10 +1868,10 @@ export default class ExpressionParser extends LValParser { (inClassScope ? SCOPE_CLASS : 0) | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0), ); - this.param.enter(functionFlags(isAsync, node.generator)); + this.prodParam.enter(functionFlags(isAsync, node.generator)); this.parseFunctionParams((node: any), allowModifiers); this.parseFunctionBodyAndFinish(node, type, true); - this.param.exit(); + this.prodParam.exit(); this.scope.exit(); this.state.yieldPos = oldYieldPos; @@ -1890,7 +1890,7 @@ export default class ExpressionParser extends LValParser { trailingCommaPos: ?number, ): N.ArrowFunctionExpression { this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW); - this.param.enter(functionFlags(isAsync, false)); + this.prodParam.enter(functionFlags(isAsync, false)); this.initFunction(node, isAsync); const oldMaybeInArrowParameters = this.state.maybeInArrowParameters; @@ -1903,7 +1903,7 @@ export default class ExpressionParser extends LValParser { if (params) this.setArrowFunctionParameters(node, params, trailingCommaPos); this.parseFunctionBody(node, true); - this.param.exit(); + this.prodParam.exit(); this.scope.exit(); this.state.maybeInArrowParameters = oldMaybeInArrowParameters; this.state.yieldPos = oldYieldPos; @@ -2177,7 +2177,7 @@ export default class ExpressionParser extends LValParser { checkKeywords: boolean, isBinding: boolean, ): void { - if (this.param.hasYield && word === "yield") { + if (this.prodParam.hasYield && word === "yield") { this.raise( startLoc, "Can not use 'yield' as identifier inside a generator", @@ -2186,7 +2186,7 @@ export default class ExpressionParser extends LValParser { } if (word === "await") { - if (this.param.hasAwait) { + if (this.prodParam.hasAwait) { this.raise( startLoc, "Can not use 'await' as identifier inside an async function", @@ -2224,7 +2224,7 @@ export default class ExpressionParser extends LValParser { : isStrictReservedWord; if (reservedTest(word, this.inModule)) { - if (!this.param.hasAwait && word === "await") { + if (!this.prodParam.hasAwait && word === "await") { this.raise( startLoc, "Can not use keyword 'await' outside an async function", @@ -2236,10 +2236,10 @@ export default class ExpressionParser extends LValParser { } isAwaitAllowed(): boolean { - if (this.scope.inFunction) return this.param.hasAwait; + if (this.scope.inFunction) return this.prodParam.hasAwait; if (this.options.allowAwaitOutsideFunction) return true; if (this.hasPlugin("topLevelAwait")) { - return this.inModule && this.param.hasAwait; + return this.inModule && this.prodParam.hasAwait; } return false; } diff --git a/packages/babel-parser/src/parser/index.js b/packages/babel-parser/src/parser/index.js index 6aebaca1d0cf..0070d320c645 100644 --- a/packages/babel-parser/src/parser/index.js +++ b/packages/babel-parser/src/parser/index.js @@ -10,7 +10,7 @@ import ScopeHandler from "../util/scope"; import ClassScopeHandler from "../util/class-scope"; import ProductionParameterHandler, { PARAM_AWAIT, - PARAM_, + PARAM, } from "../util/production-parameter"; export type PluginsMap = Map; @@ -30,7 +30,7 @@ export default class Parser extends StatementParser { this.options = options; this.inModule = this.options.sourceType === "module"; this.scope = new ScopeHandler(this.raise.bind(this), this.inModule); - this.param = new ProductionParameterHandler(); + this.prodParam = new ProductionParameterHandler(); this.classScope = new ClassScopeHandler(this.raise.bind(this)); this.plugins = pluginsMap(this.options.plugins); this.filename = options.sourceFilename; @@ -42,12 +42,12 @@ export default class Parser extends StatementParser { } parse(): File { - let paramFlags = PARAM_; + let paramFlags = PARAM; if (this.hasPlugin("topLevelAwait") && this.inModule) { paramFlags |= PARAM_AWAIT; } this.scope.enter(SCOPE_PROGRAM); - this.param.enter(paramFlags); + this.prodParam.enter(paramFlags); const file = this.startNode(); const program = this.startNode(); this.nextToken(); diff --git a/packages/babel-parser/src/parser/statement.js b/packages/babel-parser/src/parser/statement.js index abdb07c173a0..67f4279fe805 100644 --- a/packages/babel-parser/src/parser/statement.js +++ b/packages/babel-parser/src/parser/statement.js @@ -28,7 +28,7 @@ import { type BindingTypes, } from "../util/scopeflags"; import { ExpressionErrors } from "./util"; -import { PARAM_, functionFlags } from "../util/production-parameter"; +import { PARAM, functionFlags } from "../util/production-parameter"; const loopLabel = { kind: "loop" }, switchLabel = { kind: "switch" }; @@ -1061,7 +1061,7 @@ export default class StatementParser extends ExpressionParser { this.state.yieldPos = -1; this.state.awaitPos = -1; this.scope.enter(SCOPE_FUNCTION); - this.param.enter(functionFlags(isAsync, node.generator)); + this.prodParam.enter(functionFlags(isAsync, node.generator)); if (!isStatement) { node.id = this.parseFunctionId(); @@ -1080,7 +1080,7 @@ export default class StatementParser extends ExpressionParser { ); }); - this.param.exit(); + this.prodParam.exit(); this.scope.exit(); if (isStatement && !isHangingStatement) { @@ -1603,11 +1603,11 @@ export default class StatementParser extends ExpressionParser { ): N.ClassPrivateProperty { this.scope.enter(SCOPE_CLASS | SCOPE_SUPER); // [In] production parameter is tracked in parseMaybeAssign - this.param.enter(PARAM_); + this.prodParam.enter(PARAM); node.value = this.eat(tt.eq) ? this.parseMaybeAssign() : null; this.semicolon(); - this.param.exit(); + this.prodParam.exit(); this.scope.exit(); @@ -1621,7 +1621,7 @@ export default class StatementParser extends ExpressionParser { this.scope.enter(SCOPE_CLASS | SCOPE_SUPER); // [In] production parameter is tracked in parseMaybeAssign - this.param.enter(PARAM_); + this.prodParam.enter(PARAM); if (this.match(tt.eq)) { this.expectPlugin("classProperties"); @@ -1632,7 +1632,7 @@ export default class StatementParser extends ExpressionParser { } this.semicolon(); - this.param.exit(); + this.prodParam.exit(); this.scope.exit(); return this.finishNode(node, "ClassProperty"); diff --git a/packages/babel-parser/src/plugins/typescript/index.js b/packages/babel-parser/src/plugins/typescript/index.js index a7498e9ec006..83771ccd0ae0 100644 --- a/packages/babel-parser/src/plugins/typescript/index.js +++ b/packages/babel-parser/src/plugins/typescript/index.js @@ -26,7 +26,7 @@ import { import TypeScriptScopeHandler from "./scope"; import * as charCodes from "charcodes"; import type { ExpressionErrors } from "../../parser/util"; -import { PARAM_ } from "../../util/production-parameter"; +import { PARAM } from "../../util/production-parameter"; type TsModifier = | "readonly" @@ -1266,9 +1266,9 @@ export default (superClass: Class): Class => node.body = inner; } else { this.scope.enter(SCOPE_TS_MODULE); - this.param.enter(PARAM_); + this.prodParam.enter(PARAM); node.body = this.tsParseModuleBlock(); - this.param.exit(); + this.prodParam.exit(); this.scope.exit(); } return this.finishNode(node, "TSModuleDeclaration"); @@ -1287,9 +1287,9 @@ export default (superClass: Class): Class => } if (this.match(tt.braceL)) { this.scope.enter(SCOPE_TS_MODULE); - this.param.enter(PARAM_); + this.prodParam.enter(PARAM); node.body = this.tsParseModuleBlock(); - this.param.exit(); + this.prodParam.exit(); this.scope.exit(); } else { this.semicolon(); @@ -1444,13 +1444,13 @@ export default (superClass: Class): Class => // Would like to use tsParseAmbientExternalModuleDeclaration here, but already ran past "global". if (this.match(tt.braceL)) { this.scope.enter(SCOPE_TS_MODULE); - this.param.enter(PARAM_); + this.prodParam.enter(PARAM); const mod: N.TsModuleDeclaration = node; mod.global = true; mod.id = expr; mod.body = this.tsParseModuleBlock(); this.scope.exit(); - this.param.exit(); + this.prodParam.exit(); return this.finishNode(mod, "TSModuleDeclaration"); } break; diff --git a/packages/babel-parser/src/tokenizer/context.js b/packages/babel-parser/src/tokenizer/context.js index 5a5a762d7b69..3f3907872c06 100644 --- a/packages/babel-parser/src/tokenizer/context.js +++ b/packages/babel-parser/src/tokenizer/context.js @@ -60,7 +60,7 @@ tt.name.updateContext = function(prevType) { if (prevType !== tt.dot) { if ( (this.state.value === "of" && !this.state.exprAllowed) || - (this.state.value === "yield" && this.param.hasYield) + (this.state.value === "yield" && this.prodParam.hasYield) ) { allowed = true; } diff --git a/packages/babel-parser/src/util/production-parameter.js b/packages/babel-parser/src/util/production-parameter.js index 5833755dd357..9f468addc3d6 100644 --- a/packages/babel-parser/src/util/production-parameter.js +++ b/packages/babel-parser/src/util/production-parameter.js @@ -1,7 +1,7 @@ // @flow -export const PARAM_ = 0b000, // Initial Parameter flags - PARAM_YIELD = 0b001, // track [Await] production parameter - PARAM_AWAIT = 0b010; // track [Yield] production parameter +export const PARAM = 0b00, // Initial Parameter flags + PARAM_YIELD = 0b01, // track [Await] production parameter + PARAM_AWAIT = 0b10; // track [Yield] production parameter // ProductionParameterHandler is a stack fashioned production parameter tracker // https://tc39.es/ecma262/#sec-grammar-notation @@ -25,7 +25,7 @@ export const PARAM_ = 0b000, // Initial Parameter flags // 6. parse function body // 7. exit current stack -export type ParamKind = typeof PARAM_ | typeof PARAM_AWAIT | typeof PARAM_YIELD; +export type ParamKind = typeof PARAM | typeof PARAM_AWAIT | typeof PARAM_YIELD; export default class ProductionParameterHandler { stacks: Array = []; diff --git a/packages/babel-parser/src/util/scopeflags.js b/packages/babel-parser/src/util/scopeflags.js index 4a2ed0994735..65c8fd4a608f 100644 --- a/packages/babel-parser/src/util/scopeflags.js +++ b/packages/babel-parser/src/util/scopeflags.js @@ -2,15 +2,15 @@ // Each scope gets a bitset that may contain these flags // prettier-ignore -export const SCOPE_OTHER = 0b0000000000, - SCOPE_PROGRAM = 0b0000000001, - SCOPE_FUNCTION = 0b0000000010, - SCOPE_ARROW = 0b0000010000, - SCOPE_SIMPLE_CATCH = 0b0000100000, - SCOPE_SUPER = 0b0001000000, - SCOPE_DIRECT_SUPER = 0b0010000000, - SCOPE_CLASS = 0b0100000000, - SCOPE_TS_MODULE = 0b1000000000, +export const SCOPE_OTHER = 0b00000000, + SCOPE_PROGRAM = 0b00000001, + SCOPE_FUNCTION = 0b00000010, + SCOPE_ARROW = 0b00000100, + SCOPE_SIMPLE_CATCH = 0b00001000, + SCOPE_SUPER = 0b00010000, + SCOPE_DIRECT_SUPER = 0b00100000, + SCOPE_CLASS = 0b01000000, + SCOPE_TS_MODULE = 0b10000000, SCOPE_VAR = SCOPE_PROGRAM | SCOPE_FUNCTION | SCOPE_TS_MODULE; export type ScopeFlags =