@galadrim/galadmin 0.1.33 → 0.1.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api.js +5 -1
- package/dist/api.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/api.ts +5 -1
- package/src/front/node_modules/.cache/.eslintcache +1 -1
- package/src/front/node_modules/.cache/terser-webpack-plugin/index-v5/6c/19/fe86ba5d7c4062f185480ad22dd3b9fae9b30149827224339f9a633a9a94 +1 -1
- package/src/front/node_modules/.cache/terser-webpack-plugin/index-v5/87/08/421190bfe6e50816e059da6c33526c9943732ef856ebd2752d0cbfb4a852 +1 -1
- package/src/front/node_modules/.cache/terser-webpack-plugin/index-v5/c2/e5/5451dd89bb0fd48f988bf27c7ee614c66eb91f7085c5b5c8cb33048d0c32 +1 -1
- package/src/front/node_modules/.package-lock.json +115 -74
- package/src/front/node_modules/@babel/code-frame/README.md +1 -1
- package/src/front/node_modules/@babel/code-frame/lib/index.js +15 -1
- package/src/front/node_modules/@babel/code-frame/lib/index.js.map +1 -1
- package/src/front/node_modules/@babel/code-frame/node_modules/ansi-styles/index.js +165 -0
- package/src/front/node_modules/@babel/code-frame/node_modules/ansi-styles/license +9 -0
- package/src/front/node_modules/@babel/code-frame/node_modules/ansi-styles/package.json +56 -0
- package/src/front/node_modules/@babel/code-frame/node_modules/ansi-styles/readme.md +147 -0
- package/src/front/node_modules/@babel/code-frame/node_modules/chalk/index.js +228 -0
- package/src/front/node_modules/@babel/code-frame/node_modules/chalk/index.js.flow +93 -0
- package/src/front/node_modules/@babel/code-frame/node_modules/chalk/license +9 -0
- package/src/front/node_modules/@babel/code-frame/node_modules/chalk/package.json +71 -0
- package/src/front/node_modules/@babel/code-frame/node_modules/chalk/readme.md +314 -0
- package/src/front/node_modules/@babel/code-frame/node_modules/chalk/templates.js +128 -0
- package/src/front/node_modules/@babel/code-frame/node_modules/chalk/types/index.d.ts +97 -0
- package/src/front/node_modules/@babel/code-frame/node_modules/supports-color/browser.js +5 -0
- package/src/front/node_modules/@babel/code-frame/node_modules/supports-color/index.js +131 -0
- package/src/front/node_modules/@babel/code-frame/node_modules/supports-color/license +9 -0
- package/src/front/node_modules/@babel/code-frame/node_modules/supports-color/package.json +53 -0
- package/src/front/node_modules/@babel/code-frame/node_modules/supports-color/readme.md +66 -0
- package/src/front/node_modules/@babel/code-frame/package.json +3 -2
- package/src/front/node_modules/@babel/compat-data/data/plugin-bugfixes.json +2 -0
- package/src/front/node_modules/@babel/compat-data/data/plugins.json +8 -0
- package/src/front/node_modules/@babel/compat-data/package.json +1 -1
- package/src/front/node_modules/@babel/core/cjs-proxy.cjs +3 -1
- package/src/front/node_modules/@babel/core/lib/config/config-chain.js +7 -4
- package/src/front/node_modules/@babel/core/lib/config/config-chain.js.map +1 -1
- package/src/front/node_modules/@babel/core/lib/config/config-descriptors.js +2 -1
- package/src/front/node_modules/@babel/core/lib/config/config-descriptors.js.map +1 -1
- package/src/front/node_modules/@babel/core/lib/config/files/module-types.js +5 -5
- package/src/front/node_modules/@babel/core/lib/config/files/module-types.js.map +1 -1
- package/src/front/node_modules/@babel/core/lib/config/full.js.map +1 -1
- package/src/front/node_modules/@babel/core/lib/config/helpers/config-api.js +4 -4
- package/src/front/node_modules/@babel/core/lib/config/helpers/config-api.js.map +1 -1
- package/src/front/node_modules/@babel/core/lib/config/index.js.map +1 -1
- package/src/front/node_modules/@babel/core/lib/config/item.js.map +1 -1
- package/src/front/node_modules/@babel/core/lib/config/printer.js.map +1 -1
- package/src/front/node_modules/@babel/core/lib/config/validation/options.js.map +1 -1
- package/src/front/node_modules/@babel/core/lib/config/validation/plugins.js.map +1 -1
- package/src/front/node_modules/@babel/core/lib/index.js +2 -1
- package/src/front/node_modules/@babel/core/lib/index.js.map +1 -1
- package/src/front/node_modules/@babel/core/lib/transformation/file/file.js +5 -5
- package/src/front/node_modules/@babel/core/lib/transformation/file/file.js.map +1 -1
- package/src/front/node_modules/@babel/core/lib/transformation/file/generate.js.map +1 -1
- package/src/front/node_modules/@babel/core/lib/transformation/index.js +3 -1
- package/src/front/node_modules/@babel/core/lib/transformation/index.js.map +1 -1
- package/src/front/node_modules/@babel/core/lib/transformation/plugin-pass.js.map +1 -1
- package/src/front/node_modules/{@nicolo-ribaudo/semver-v6 → @babel/core/node_modules/semver}/README.md +2 -13
- package/src/front/node_modules/@babel/core/node_modules/semver/package.json +38 -0
- package/src/front/node_modules/{@nicolo-ribaudo/semver-v6 → @babel/core/node_modules/semver}/semver.js +54 -20
- package/src/front/node_modules/@babel/core/package.json +13 -13
- package/src/front/node_modules/@babel/generator/lib/buffer.js.map +1 -1
- package/src/front/node_modules/@babel/generator/lib/generators/classes.js +6 -6
- package/src/front/node_modules/@babel/generator/lib/generators/classes.js.map +1 -1
- package/src/front/node_modules/@babel/generator/lib/generators/methods.js.map +1 -1
- package/src/front/node_modules/@babel/generator/lib/generators/types.js.map +1 -1
- package/src/front/node_modules/@babel/generator/lib/index.js +2 -1
- package/src/front/node_modules/@babel/generator/lib/index.js.map +1 -1
- package/src/front/node_modules/@babel/generator/lib/printer.js +2 -2
- package/src/front/node_modules/@babel/generator/lib/printer.js.map +1 -1
- package/src/front/node_modules/@babel/generator/lib/source-map.js.map +1 -1
- package/src/front/node_modules/@babel/generator/package.json +4 -4
- package/src/front/node_modules/@babel/helper-compilation-targets/lib/debug.js +2 -2
- package/src/front/node_modules/@babel/helper-compilation-targets/lib/debug.js.map +1 -1
- package/src/front/node_modules/@babel/helper-compilation-targets/lib/filter-items.js +3 -3
- package/src/front/node_modules/@babel/helper-compilation-targets/lib/filter-items.js.map +1 -1
- package/src/front/node_modules/@babel/helper-compilation-targets/lib/pretty.js +2 -2
- package/src/front/node_modules/@babel/helper-compilation-targets/lib/pretty.js.map +1 -1
- package/src/front/node_modules/@babel/helper-compilation-targets/lib/utils.js +3 -3
- package/src/front/node_modules/@babel/helper-compilation-targets/lib/utils.js.map +1 -1
- package/src/front/node_modules/@babel/helper-compilation-targets/node_modules/semver/LICENSE +15 -0
- package/src/front/node_modules/@babel/helper-compilation-targets/node_modules/semver/README.md +443 -0
- package/src/front/node_modules/@babel/helper-compilation-targets/node_modules/semver/bin/semver.js +174 -0
- package/src/front/node_modules/@babel/helper-compilation-targets/node_modules/semver/package.json +38 -0
- package/src/front/node_modules/@babel/helper-compilation-targets/node_modules/semver/range.bnf +16 -0
- package/src/front/node_modules/@babel/helper-compilation-targets/node_modules/semver/semver.js +1643 -0
- package/src/front/node_modules/@babel/helper-compilation-targets/package.json +4 -8
- package/src/front/node_modules/@babel/helper-module-transforms/README.md +1 -1
- package/src/front/node_modules/@babel/helper-module-transforms/lib/dynamic-import.js +11 -12
- package/src/front/node_modules/@babel/helper-module-transforms/lib/dynamic-import.js.map +1 -1
- package/src/front/node_modules/@babel/helper-module-transforms/lib/index.js +15 -16
- package/src/front/node_modules/@babel/helper-module-transforms/lib/index.js.map +1 -1
- package/src/front/node_modules/@babel/helper-module-transforms/lib/rewrite-live-references.js +3 -4
- package/src/front/node_modules/@babel/helper-module-transforms/lib/rewrite-live-references.js.map +1 -1
- package/src/front/node_modules/@babel/helper-module-transforms/lib/rewrite-this.js +4 -5
- package/src/front/node_modules/@babel/helper-module-transforms/lib/rewrite-this.js.map +1 -1
- package/src/front/node_modules/@babel/helper-module-transforms/package.json +10 -6
- package/src/front/node_modules/@babel/helpers/lib/helpers/regeneratorRuntime.js +2 -4
- package/src/front/node_modules/@babel/helpers/lib/helpers/regeneratorRuntime.js.map +1 -1
- package/src/front/node_modules/@babel/helpers/lib/helpers-generated.js +1 -1
- package/src/front/node_modules/@babel/helpers/lib/helpers-generated.js.map +1 -1
- package/src/front/node_modules/@babel/helpers/package.json +6 -6
- package/src/front/node_modules/@babel/highlight/README.md +1 -1
- package/src/front/node_modules/@babel/highlight/lib/index.js +20 -10
- package/src/front/node_modules/@babel/highlight/lib/index.js.map +1 -1
- package/src/front/node_modules/@babel/highlight/package.json +2 -3
- package/src/front/node_modules/@babel/parser/lib/index.js +115 -160
- package/src/front/node_modules/@babel/parser/lib/index.js.map +1 -1
- package/src/front/node_modules/@babel/parser/lib/options.js +6 -2
- package/src/front/node_modules/@babel/parser/lib/options.js.map +1 -1
- package/src/front/node_modules/@babel/parser/lib/parser/expression.js +4 -4
- package/src/front/node_modules/@babel/parser/lib/parser/expression.js.map +1 -1
- package/src/front/node_modules/@babel/parser/lib/parser/lval.js +6 -6
- package/src/front/node_modules/@babel/parser/lib/parser/lval.js.map +1 -1
- package/src/front/node_modules/@babel/parser/lib/parser/statement.js +20 -19
- package/src/front/node_modules/@babel/parser/lib/parser/statement.js.map +1 -1
- package/src/front/node_modules/@babel/parser/lib/parser/util.js +1 -1
- package/src/front/node_modules/@babel/parser/lib/parser/util.js.map +1 -1
- package/src/front/node_modules/@babel/parser/lib/plugins/flow/index.js +7 -7
- package/src/front/node_modules/@babel/parser/lib/plugins/flow/index.js.map +1 -1
- package/src/front/node_modules/@babel/parser/lib/plugins/flow/scope.js +2 -2
- package/src/front/node_modules/@babel/parser/lib/plugins/flow/scope.js.map +1 -1
- package/src/front/node_modules/@babel/parser/lib/plugins/placeholders.js +2 -1
- package/src/front/node_modules/@babel/parser/lib/plugins/placeholders.js.map +1 -1
- package/src/front/node_modules/@babel/parser/lib/plugins/typescript/index.js +16 -16
- package/src/front/node_modules/@babel/parser/lib/plugins/typescript/index.js.map +1 -1
- package/src/front/node_modules/@babel/parser/lib/plugins/typescript/scope.js +16 -14
- package/src/front/node_modules/@babel/parser/lib/plugins/typescript/scope.js.map +1 -1
- package/src/front/node_modules/@babel/parser/lib/util/class-scope.js +5 -5
- package/src/front/node_modules/@babel/parser/lib/util/class-scope.js.map +1 -1
- package/src/front/node_modules/@babel/parser/lib/util/expression-scope.js +7 -12
- package/src/front/node_modules/@babel/parser/lib/util/expression-scope.js.map +1 -1
- package/src/front/node_modules/@babel/parser/lib/util/scope.js +23 -23
- package/src/front/node_modules/@babel/parser/lib/util/scope.js.map +1 -1
- package/src/front/node_modules/@babel/parser/lib/util/scopeflags.js +60 -99
- package/src/front/node_modules/@babel/parser/lib/util/scopeflags.js.map +1 -1
- package/src/front/node_modules/@babel/parser/package.json +3 -3
- package/src/front/node_modules/@babel/traverse/lib/cache.js +24 -3
- package/src/front/node_modules/@babel/traverse/lib/cache.js.map +1 -1
- package/src/front/node_modules/@babel/traverse/lib/index.js +5 -3
- package/src/front/node_modules/@babel/traverse/lib/index.js.map +1 -1
- package/src/front/node_modules/@babel/traverse/lib/path/context.js.map +1 -1
- package/src/front/node_modules/@babel/traverse/lib/path/conversion.js +1 -4
- package/src/front/node_modules/@babel/traverse/lib/path/conversion.js.map +1 -1
- package/src/front/node_modules/@babel/traverse/lib/path/index.js +2 -6
- package/src/front/node_modules/@babel/traverse/lib/path/index.js.map +1 -1
- package/src/front/node_modules/@babel/traverse/lib/path/lib/hoister.js.map +1 -1
- package/src/front/node_modules/@babel/traverse/lib/path/lib/virtual-types-validator.js +9 -7
- package/src/front/node_modules/@babel/traverse/lib/path/lib/virtual-types-validator.js.map +1 -1
- package/src/front/node_modules/@babel/traverse/lib/path/modification.js +3 -2
- package/src/front/node_modules/@babel/traverse/lib/path/modification.js.map +1 -1
- package/src/front/node_modules/@babel/traverse/lib/path/removal.js +3 -1
- package/src/front/node_modules/@babel/traverse/lib/path/removal.js.map +1 -1
- package/src/front/node_modules/@babel/traverse/lib/path/replacement.js +4 -4
- package/src/front/node_modules/@babel/traverse/lib/path/replacement.js.map +1 -1
- package/src/front/node_modules/@babel/traverse/lib/scope/index.js +2 -1
- package/src/front/node_modules/@babel/traverse/lib/scope/index.js.map +1 -1
- package/src/front/node_modules/@babel/traverse/lib/traverse-node.js +6 -2
- package/src/front/node_modules/@babel/traverse/lib/traverse-node.js.map +1 -1
- package/src/front/node_modules/@babel/traverse/lib/visitors.js.map +1 -1
- package/src/front/node_modules/@babel/traverse/package.json +6 -5
- package/src/front/node_modules/@babel/types/README.md +1 -1
- package/src/front/node_modules/@babel/types/lib/ast-types/generated/index.js.map +1 -1
- package/src/front/node_modules/@babel/types/lib/converters/toStatement.js.map +1 -1
- package/src/front/node_modules/@babel/types/lib/definitions/core.js +8 -1
- package/src/front/node_modules/@babel/types/lib/definitions/core.js.map +1 -1
- package/src/front/node_modules/@babel/types/lib/index.d.ts +11 -10
- package/src/front/node_modules/@babel/types/lib/validators/generated/index.js.map +1 -1
- package/src/front/node_modules/@babel/types/lib/validators/isType.js +1 -0
- package/src/front/node_modules/@babel/types/lib/validators/isType.js.map +1 -1
- package/src/front/node_modules/@babel/types/package.json +3 -4
- package/src/front/node_modules/react-scripts/node_modules/@babel/core/node_modules/semver/package.json +19 -9
- package/src/front/node_modules/react-scripts/node_modules/@babel/core/node_modules/semver/semver.js +68 -26
- package/src/front/package-lock.json +216 -142
- package/src/front/node_modules/@nicolo-ribaudo/semver-v6/CHANGELOG.md +0 -70
- package/src/front/node_modules/@nicolo-ribaudo/semver-v6/package.json +0 -28
- package/src/front/node_modules/react-scripts/node_modules/@babel/core/node_modules/semver/CHANGELOG.md +0 -39
- /package/src/front/node_modules/{@nicolo-ribaudo/semver-v6 → @babel/core/node_modules/semver}/LICENSE +0 -0
- /package/src/front/node_modules/{@nicolo-ribaudo/semver-v6 → @babel/core/node_modules/semver}/bin/semver.js +0 -0
- /package/src/front/node_modules/{@nicolo-ribaudo/semver-v6 → @babel/core/node_modules/semver}/range.bnf +0 -0
|
@@ -27,14 +27,14 @@ class TypeScriptScopeHandler extends _scope.default {
|
|
|
27
27
|
return new TypeScriptScope(flags);
|
|
28
28
|
}
|
|
29
29
|
enter(flags) {
|
|
30
|
-
if (flags == _scopeflags.
|
|
30
|
+
if (flags == _scopeflags.ScopeFlag.TS_MODULE) {
|
|
31
31
|
this.importsStack.push(new Set());
|
|
32
32
|
}
|
|
33
33
|
super.enter(flags);
|
|
34
34
|
}
|
|
35
35
|
exit() {
|
|
36
36
|
const flags = super.exit();
|
|
37
|
-
if (flags == _scopeflags.
|
|
37
|
+
if (flags == _scopeflags.ScopeFlag.TS_MODULE) {
|
|
38
38
|
this.importsStack.pop();
|
|
39
39
|
}
|
|
40
40
|
return flags;
|
|
@@ -52,7 +52,7 @@ class TypeScriptScopeHandler extends _scope.default {
|
|
|
52
52
|
return false;
|
|
53
53
|
}
|
|
54
54
|
declareName(name, bindingType, loc) {
|
|
55
|
-
if (bindingType & _scopeflags.
|
|
55
|
+
if (bindingType & _scopeflags.BindingFlag.FLAG_TS_IMPORT) {
|
|
56
56
|
if (this.hasImport(name, true)) {
|
|
57
57
|
this.parser.raise(_parseError.Errors.VarRedeclaration, {
|
|
58
58
|
at: loc,
|
|
@@ -63,40 +63,42 @@ class TypeScriptScopeHandler extends _scope.default {
|
|
|
63
63
|
return;
|
|
64
64
|
}
|
|
65
65
|
const scope = this.currentScope();
|
|
66
|
-
if (bindingType & _scopeflags.
|
|
66
|
+
if (bindingType & _scopeflags.BindingFlag.FLAG_TS_EXPORT_ONLY) {
|
|
67
67
|
this.maybeExportDefined(scope, name);
|
|
68
68
|
scope.exportOnlyBindings.add(name);
|
|
69
69
|
return;
|
|
70
70
|
}
|
|
71
71
|
super.declareName(name, bindingType, loc);
|
|
72
|
-
if (bindingType & _scopeflags.
|
|
73
|
-
if (!(bindingType & _scopeflags.
|
|
72
|
+
if (bindingType & _scopeflags.BindingFlag.KIND_TYPE) {
|
|
73
|
+
if (!(bindingType & _scopeflags.BindingFlag.KIND_VALUE)) {
|
|
74
74
|
this.checkRedeclarationInScope(scope, name, bindingType, loc);
|
|
75
75
|
this.maybeExportDefined(scope, name);
|
|
76
76
|
}
|
|
77
77
|
scope.types.add(name);
|
|
78
78
|
}
|
|
79
|
-
if (bindingType & _scopeflags.
|
|
80
|
-
if (bindingType & _scopeflags.
|
|
81
|
-
|
|
79
|
+
if (bindingType & _scopeflags.BindingFlag.FLAG_TS_ENUM) scope.enums.add(name);
|
|
80
|
+
if (bindingType & _scopeflags.BindingFlag.FLAG_TS_CONST_ENUM) {
|
|
81
|
+
scope.constEnums.add(name);
|
|
82
|
+
}
|
|
83
|
+
if (bindingType & _scopeflags.BindingFlag.FLAG_CLASS) scope.classes.add(name);
|
|
82
84
|
}
|
|
83
85
|
isRedeclaredInScope(scope, name, bindingType) {
|
|
84
86
|
if (scope.enums.has(name)) {
|
|
85
|
-
if (bindingType & _scopeflags.
|
|
86
|
-
const isConst = !!(bindingType & _scopeflags.
|
|
87
|
+
if (bindingType & _scopeflags.BindingFlag.FLAG_TS_ENUM) {
|
|
88
|
+
const isConst = !!(bindingType & _scopeflags.BindingFlag.FLAG_TS_CONST_ENUM);
|
|
87
89
|
const wasConst = scope.constEnums.has(name);
|
|
88
90
|
return isConst !== wasConst;
|
|
89
91
|
}
|
|
90
92
|
return true;
|
|
91
93
|
}
|
|
92
|
-
if (bindingType & _scopeflags.
|
|
94
|
+
if (bindingType & _scopeflags.BindingFlag.FLAG_CLASS && scope.classes.has(name)) {
|
|
93
95
|
if (scope.lexical.has(name)) {
|
|
94
|
-
return !!(bindingType & _scopeflags.
|
|
96
|
+
return !!(bindingType & _scopeflags.BindingFlag.KIND_VALUE);
|
|
95
97
|
} else {
|
|
96
98
|
return false;
|
|
97
99
|
}
|
|
98
100
|
}
|
|
99
|
-
if (bindingType & _scopeflags.
|
|
101
|
+
if (bindingType & _scopeflags.BindingFlag.KIND_TYPE && scope.types.has(name)) {
|
|
100
102
|
return true;
|
|
101
103
|
}
|
|
102
104
|
return super.isRedeclaredInScope(scope, name, bindingType);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_scope","require","_scopeflags","_parseError","TypeScriptScope","Scope","constructor","args","types","Set","enums","constEnums","classes","exportOnlyBindings","TypeScriptScopeHandler","ScopeHandler","importsStack","createScope","flags","push","enter","
|
|
1
|
+
{"version":3,"names":["_scope","require","_scopeflags","_parseError","TypeScriptScope","Scope","constructor","args","types","Set","enums","constEnums","classes","exportOnlyBindings","TypeScriptScopeHandler","ScopeHandler","importsStack","createScope","flags","push","enter","ScopeFlag","TS_MODULE","exit","pop","hasImport","name","allowShadow","len","length","has","i","declareName","bindingType","loc","BindingFlag","FLAG_TS_IMPORT","parser","raise","Errors","VarRedeclaration","at","identifierName","add","scope","currentScope","FLAG_TS_EXPORT_ONLY","maybeExportDefined","KIND_TYPE","KIND_VALUE","checkRedeclarationInScope","FLAG_TS_ENUM","FLAG_TS_CONST_ENUM","FLAG_CLASS","isRedeclaredInScope","isConst","wasConst","lexical","checkLocalExport","id","scopeStack","exports","default"],"sources":["../../../src/plugins/typescript/scope.ts"],"sourcesContent":["import type { Position } from \"../../util/location\";\nimport ScopeHandler, { Scope } from \"../../util/scope\";\nimport {\n BindingFlag,\n ScopeFlag,\n type BindingTypes,\n} from \"../../util/scopeflags\";\nimport type * as N from \"../../types\";\nimport { Errors } from \"../../parse-error\";\n\nclass TypeScriptScope extends Scope {\n types: Set<string> = new Set();\n\n // enums (which are also in .types)\n enums: Set<string> = new Set();\n\n // const enums (which are also in .enums and .types)\n constEnums: Set<string> = new Set();\n\n // classes (which are also in .lexical) and interface (which are also in .types)\n classes: Set<string> = new Set();\n\n // namespaces and ambient functions (or classes) are too difficult to track,\n // especially without type analysis.\n // We need to track them anyway, to avoid \"X is not defined\" errors\n // when exporting them.\n exportOnlyBindings: Set<string> = new Set();\n}\n\n// See https://github.com/babel/babel/pull/9766#discussion_r268920730 for an\n// explanation of how typescript handles scope.\n\nexport default class TypeScriptScopeHandler extends ScopeHandler<TypeScriptScope> {\n importsStack: Set<string>[] = [];\n\n createScope(flags: ScopeFlag): TypeScriptScope {\n this.importsStack.push(new Set()); // Always keep the top-level scope for export checks.\n\n return new TypeScriptScope(flags);\n }\n\n enter(flags: ScopeFlag): void {\n if (flags == ScopeFlag.TS_MODULE) {\n this.importsStack.push(new Set());\n }\n\n super.enter(flags);\n }\n\n exit() {\n const flags = super.exit();\n\n if (flags == ScopeFlag.TS_MODULE) {\n this.importsStack.pop();\n }\n\n return flags;\n }\n\n hasImport(name: string, allowShadow?: boolean) {\n const len = this.importsStack.length;\n if (this.importsStack[len - 1].has(name)) {\n return true;\n }\n if (!allowShadow && len > 1) {\n for (let i = 0; i < len - 1; i++) {\n if (this.importsStack[i].has(name)) return true;\n }\n }\n return false;\n }\n\n declareName(name: string, bindingType: BindingTypes, loc: Position) {\n if (bindingType & BindingFlag.FLAG_TS_IMPORT) {\n if (this.hasImport(name, true)) {\n this.parser.raise(Errors.VarRedeclaration, {\n at: loc,\n identifierName: name,\n });\n }\n this.importsStack[this.importsStack.length - 1].add(name);\n return;\n }\n\n const scope = this.currentScope();\n if (bindingType & BindingFlag.FLAG_TS_EXPORT_ONLY) {\n this.maybeExportDefined(scope, name);\n scope.exportOnlyBindings.add(name);\n return;\n }\n\n super.declareName(name, bindingType, loc);\n\n if (bindingType & BindingFlag.KIND_TYPE) {\n if (!(bindingType & BindingFlag.KIND_VALUE)) {\n // \"Value\" bindings have already been registered by the superclass.\n this.checkRedeclarationInScope(scope, name, bindingType, loc);\n this.maybeExportDefined(scope, name);\n }\n scope.types.add(name);\n }\n if (bindingType & BindingFlag.FLAG_TS_ENUM) scope.enums.add(name);\n if (bindingType & BindingFlag.FLAG_TS_CONST_ENUM) {\n scope.constEnums.add(name);\n }\n if (bindingType & BindingFlag.FLAG_CLASS) scope.classes.add(name);\n }\n\n isRedeclaredInScope(\n scope: TypeScriptScope,\n name: string,\n bindingType: BindingTypes,\n ): boolean {\n if (scope.enums.has(name)) {\n if (bindingType & BindingFlag.FLAG_TS_ENUM) {\n // Enums can be merged with other enums if they are both\n // const or both non-const.\n const isConst = !!(bindingType & BindingFlag.FLAG_TS_CONST_ENUM);\n const wasConst = scope.constEnums.has(name);\n return isConst !== wasConst;\n }\n return true;\n }\n if (bindingType & BindingFlag.FLAG_CLASS && scope.classes.has(name)) {\n if (scope.lexical.has(name)) {\n // Classes can be merged with interfaces\n return !!(bindingType & BindingFlag.KIND_VALUE);\n } else {\n // Interface can be merged with other classes or interfaces\n return false;\n }\n }\n if (bindingType & BindingFlag.KIND_TYPE && scope.types.has(name)) {\n return true;\n }\n\n return super.isRedeclaredInScope(scope, name, bindingType);\n }\n\n checkLocalExport(id: N.Identifier) {\n const { name } = id;\n\n if (this.hasImport(name)) return;\n\n const len = this.scopeStack.length;\n for (let i = len - 1; i >= 0; i--) {\n const scope = this.scopeStack[i];\n if (scope.types.has(name) || scope.exportOnlyBindings.has(name)) return;\n }\n\n super.checkLocalExport(id);\n }\n}\n"],"mappings":"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"}
|
|
@@ -50,13 +50,13 @@ class ClassScopeHandler {
|
|
|
50
50
|
undefinedPrivateNames
|
|
51
51
|
} = this.current();
|
|
52
52
|
let redefined = privateNames.has(name);
|
|
53
|
-
if (elementType & _scopeflags.
|
|
53
|
+
if (elementType & _scopeflags.ClassElementType.KIND_ACCESSOR) {
|
|
54
54
|
const accessor = redefined && loneAccessors.get(name);
|
|
55
55
|
if (accessor) {
|
|
56
|
-
const oldStatic = accessor & _scopeflags.
|
|
57
|
-
const newStatic = elementType & _scopeflags.
|
|
58
|
-
const oldKind = accessor & _scopeflags.
|
|
59
|
-
const newKind = elementType & _scopeflags.
|
|
56
|
+
const oldStatic = accessor & _scopeflags.ClassElementType.FLAG_STATIC;
|
|
57
|
+
const newStatic = elementType & _scopeflags.ClassElementType.FLAG_STATIC;
|
|
58
|
+
const oldKind = accessor & _scopeflags.ClassElementType.KIND_ACCESSOR;
|
|
59
|
+
const newKind = elementType & _scopeflags.ClassElementType.KIND_ACCESSOR;
|
|
60
60
|
redefined = oldKind === newKind || oldStatic !== newStatic;
|
|
61
61
|
if (!redefined) loneAccessors.delete(name);
|
|
62
62
|
} else if (!redefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_scopeflags","require","_parseError","ClassScope","constructor","privateNames","Set","loneAccessors","Map","undefinedPrivateNames","exports","ClassScopeHandler","parser","stack","current","length","enter","push","exit","oldClassScope","pop","name","loc","Array","from","has","set","raise","Errors","InvalidPrivateFieldResolution","at","identifierName","declarePrivateName","elementType","redefined","
|
|
1
|
+
{"version":3,"names":["_scopeflags","require","_parseError","ClassScope","constructor","privateNames","Set","loneAccessors","Map","undefinedPrivateNames","exports","ClassScopeHandler","parser","stack","current","length","enter","push","exit","oldClassScope","pop","name","loc","Array","from","has","set","raise","Errors","InvalidPrivateFieldResolution","at","identifierName","declarePrivateName","elementType","redefined","ClassElementType","KIND_ACCESSOR","accessor","get","oldStatic","FLAG_STATIC","newStatic","oldKind","newKind","delete","PrivateNameRedeclaration","add","usePrivateName","classScope","default"],"sources":["../../src/util/class-scope.ts"],"sourcesContent":["import { ClassElementType } from \"./scopeflags\";\nimport type { Position } from \"./location\";\nimport { Errors } from \"../parse-error\";\nimport type Tokenizer from \"../tokenizer\";\n\nexport class ClassScope {\n // A list of private named declared in the current class\n privateNames: Set<string> = new Set();\n\n // A list of private getters of setters without their counterpart\n loneAccessors: Map<string, ClassElementType> = new Map();\n\n // A list of private names used before being defined, mapping to\n // their position.\n undefinedPrivateNames: Map<string, Position> = new Map();\n}\n\nexport default class ClassScopeHandler {\n parser: Tokenizer;\n stack: Array<ClassScope> = [];\n undefinedPrivateNames: Map<string, Position> = new Map();\n\n constructor(parser: Tokenizer) {\n this.parser = parser;\n }\n\n current(): ClassScope {\n return this.stack[this.stack.length - 1];\n }\n\n enter() {\n this.stack.push(new ClassScope());\n }\n\n exit() {\n const oldClassScope = this.stack.pop();\n\n // Migrate the usage of not yet defined private names to the outer\n // class scope, or raise an error if we reached the top-level scope.\n\n const current = this.current();\n\n // Array.from is needed because this is compiled to an array-like for loop\n for (const [name, loc] of Array.from(oldClassScope.undefinedPrivateNames)) {\n if (current) {\n if (!current.undefinedPrivateNames.has(name)) {\n current.undefinedPrivateNames.set(name, loc);\n }\n } else {\n this.parser.raise(Errors.InvalidPrivateFieldResolution, {\n at: loc,\n identifierName: name,\n });\n }\n }\n }\n\n declarePrivateName(\n name: string,\n elementType: ClassElementType,\n loc: Position,\n ) {\n const { privateNames, loneAccessors, undefinedPrivateNames } =\n this.current();\n let redefined = privateNames.has(name);\n\n if (elementType & ClassElementType.KIND_ACCESSOR) {\n const accessor = redefined && loneAccessors.get(name);\n if (accessor) {\n const oldStatic = accessor & ClassElementType.FLAG_STATIC;\n const newStatic = elementType & ClassElementType.FLAG_STATIC;\n\n const oldKind = accessor & ClassElementType.KIND_ACCESSOR;\n const newKind = elementType & ClassElementType.KIND_ACCESSOR;\n\n // The private name can be duplicated only if it is used by\n // two accessors with different kind (get and set), and if\n // they have the same placement (static or not).\n redefined = oldKind === newKind || oldStatic !== newStatic;\n\n if (!redefined) loneAccessors.delete(name);\n } else if (!redefined) {\n loneAccessors.set(name, elementType);\n }\n }\n\n if (redefined) {\n this.parser.raise(Errors.PrivateNameRedeclaration, {\n at: loc,\n identifierName: name,\n });\n }\n\n privateNames.add(name);\n undefinedPrivateNames.delete(name);\n }\n\n usePrivateName(name: string, loc: Position) {\n let classScope;\n for (classScope of this.stack) {\n if (classScope.privateNames.has(name)) return;\n }\n\n if (classScope) {\n classScope.undefinedPrivateNames.set(name, loc);\n } else {\n // top-level\n this.parser.raise(Errors.InvalidPrivateFieldResolution, {\n at: loc,\n identifierName: name,\n });\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAD,OAAA;AAGO,MAAME,UAAU,CAAC;EAAAC,YAAA;IAAA,KAEtBC,YAAY,GAAgB,IAAIC,GAAG,CAAC,CAAC;IAAA,KAGrCC,aAAa,GAAkC,IAAIC,GAAG,CAAC,CAAC;IAAA,KAIxDC,qBAAqB,GAA0B,IAAID,GAAG,CAAC,CAAC;EAAA;AAC1D;AAACE,OAAA,CAAAP,UAAA,GAAAA,UAAA;AAEc,MAAMQ,iBAAiB,CAAC;EAKrCP,WAAWA,CAACQ,MAAiB,EAAE;IAAA,KAJ/BA,MAAM;IAAA,KACNC,KAAK,GAAsB,EAAE;IAAA,KAC7BJ,qBAAqB,GAA0B,IAAID,GAAG,CAAC,CAAC;IAGtD,IAAI,CAACI,MAAM,GAAGA,MAAM;EACtB;EAEAE,OAAOA,CAAA,EAAe;IACpB,OAAO,IAAI,CAACD,KAAK,CAAC,IAAI,CAACA,KAAK,CAACE,MAAM,GAAG,CAAC,CAAC;EAC1C;EAEAC,KAAKA,CAAA,EAAG;IACN,IAAI,CAACH,KAAK,CAACI,IAAI,CAAC,IAAId,UAAU,CAAC,CAAC,CAAC;EACnC;EAEAe,IAAIA,CAAA,EAAG;IACL,MAAMC,aAAa,GAAG,IAAI,CAACN,KAAK,CAACO,GAAG,CAAC,CAAC;IAKtC,MAAMN,OAAO,GAAG,IAAI,CAACA,OAAO,CAAC,CAAC;IAG9B,KAAK,MAAM,CAACO,IAAI,EAAEC,GAAG,CAAC,IAAIC,KAAK,CAACC,IAAI,CAACL,aAAa,CAACV,qBAAqB,CAAC,EAAE;MACzE,IAAIK,OAAO,EAAE;QACX,IAAI,CAACA,OAAO,CAACL,qBAAqB,CAACgB,GAAG,CAACJ,IAAI,CAAC,EAAE;UAC5CP,OAAO,CAACL,qBAAqB,CAACiB,GAAG,CAACL,IAAI,EAAEC,GAAG,CAAC;QAC9C;MACF,CAAC,MAAM;QACL,IAAI,CAACV,MAAM,CAACe,KAAK,CAACC,kBAAM,CAACC,6BAA6B,EAAE;UACtDC,EAAE,EAAER,GAAG;UACPS,cAAc,EAAEV;QAClB,CAAC,CAAC;MACJ;IACF;EACF;EAEAW,kBAAkBA,CAChBX,IAAY,EACZY,WAA6B,EAC7BX,GAAa,EACb;IACA,MAAM;MAAEjB,YAAY;MAAEE,aAAa;MAAEE;IAAsB,CAAC,GAC1D,IAAI,CAACK,OAAO,CAAC,CAAC;IAChB,IAAIoB,SAAS,GAAG7B,YAAY,CAACoB,GAAG,CAACJ,IAAI,CAAC;IAEtC,IAAIY,WAAW,GAAGE,4BAAgB,CAACC,aAAa,EAAE;MAChD,MAAMC,QAAQ,GAAGH,SAAS,IAAI3B,aAAa,CAAC+B,GAAG,CAACjB,IAAI,CAAC;MACrD,IAAIgB,QAAQ,EAAE;QACZ,MAAME,SAAS,GAAGF,QAAQ,GAAGF,4BAAgB,CAACK,WAAW;QACzD,MAAMC,SAAS,GAAGR,WAAW,GAAGE,4BAAgB,CAACK,WAAW;QAE5D,MAAME,OAAO,GAAGL,QAAQ,GAAGF,4BAAgB,CAACC,aAAa;QACzD,MAAMO,OAAO,GAAGV,WAAW,GAAGE,4BAAgB,CAACC,aAAa;QAK5DF,SAAS,GAAGQ,OAAO,KAAKC,OAAO,IAAIJ,SAAS,KAAKE,SAAS;QAE1D,IAAI,CAACP,SAAS,EAAE3B,aAAa,CAACqC,MAAM,CAACvB,IAAI,CAAC;MAC5C,CAAC,MAAM,IAAI,CAACa,SAAS,EAAE;QACrB3B,aAAa,CAACmB,GAAG,CAACL,IAAI,EAAEY,WAAW,CAAC;MACtC;IACF;IAEA,IAAIC,SAAS,EAAE;MACb,IAAI,CAACtB,MAAM,CAACe,KAAK,CAACC,kBAAM,CAACiB,wBAAwB,EAAE;QACjDf,EAAE,EAAER,GAAG;QACPS,cAAc,EAAEV;MAClB,CAAC,CAAC;IACJ;IAEAhB,YAAY,CAACyC,GAAG,CAACzB,IAAI,CAAC;IACtBZ,qBAAqB,CAACmC,MAAM,CAACvB,IAAI,CAAC;EACpC;EAEA0B,cAAcA,CAAC1B,IAAY,EAAEC,GAAa,EAAE;IAC1C,IAAI0B,UAAU;IACd,KAAKA,UAAU,IAAI,IAAI,CAACnC,KAAK,EAAE;MAC7B,IAAImC,UAAU,CAAC3C,YAAY,CAACoB,GAAG,CAACJ,IAAI,CAAC,EAAE;IACzC;IAEA,IAAI2B,UAAU,EAAE;MACdA,UAAU,CAACvC,qBAAqB,CAACiB,GAAG,CAACL,IAAI,EAAEC,GAAG,CAAC;IACjD,CAAC,MAAM;MAEL,IAAI,CAACV,MAAM,CAACe,KAAK,CAACC,kBAAM,CAACC,6BAA6B,EAAE;QACtDC,EAAE,EAAER,GAAG;QACPS,cAAc,EAAEV;MAClB,CAAC,CAAC;IACJ;EACF;AACF;AAACX,OAAA,CAAAuC,OAAA,GAAAtC,iBAAA"}
|
|
@@ -9,20 +9,15 @@ exports.newAsyncArrowScope = newAsyncArrowScope;
|
|
|
9
9
|
exports.newExpressionScope = newExpressionScope;
|
|
10
10
|
exports.newParameterDeclarationScope = newParameterDeclarationScope;
|
|
11
11
|
var _parseError = require("../parse-error");
|
|
12
|
-
const kExpression = 0,
|
|
13
|
-
kMaybeArrowParameterDeclaration = 1,
|
|
14
|
-
kMaybeAsyncArrowParameterDeclaration = 2,
|
|
15
|
-
kParameterDeclaration = 3;
|
|
16
12
|
class ExpressionScope {
|
|
17
|
-
constructor(type =
|
|
18
|
-
this.type = void 0;
|
|
13
|
+
constructor(type = 0) {
|
|
19
14
|
this.type = type;
|
|
20
15
|
}
|
|
21
16
|
canBeArrowParameterDeclaration() {
|
|
22
|
-
return this.type ===
|
|
17
|
+
return this.type === 2 || this.type === 1;
|
|
23
18
|
}
|
|
24
19
|
isCertainlyParameterDeclaration() {
|
|
25
|
-
return this.type ===
|
|
20
|
+
return this.type === 3;
|
|
26
21
|
}
|
|
27
22
|
}
|
|
28
23
|
class ArrowHeadParsingScope extends ExpressionScope {
|
|
@@ -103,7 +98,7 @@ class ExpressionScopeHandler {
|
|
|
103
98
|
let i = stack.length - 1;
|
|
104
99
|
let scope = stack[i];
|
|
105
100
|
while (scope.canBeArrowParameterDeclaration()) {
|
|
106
|
-
if (scope.type ===
|
|
101
|
+
if (scope.type === 2) {
|
|
107
102
|
scope.recordDeclarationError(_parseError.Errors.AwaitBindingIdentifier, {
|
|
108
103
|
at
|
|
109
104
|
});
|
|
@@ -132,13 +127,13 @@ class ExpressionScopeHandler {
|
|
|
132
127
|
}
|
|
133
128
|
exports.default = ExpressionScopeHandler;
|
|
134
129
|
function newParameterDeclarationScope() {
|
|
135
|
-
return new ExpressionScope(
|
|
130
|
+
return new ExpressionScope(3);
|
|
136
131
|
}
|
|
137
132
|
function newArrowHeadScope() {
|
|
138
|
-
return new ArrowHeadParsingScope(
|
|
133
|
+
return new ArrowHeadParsingScope(1);
|
|
139
134
|
}
|
|
140
135
|
function newAsyncArrowScope() {
|
|
141
|
-
return new ArrowHeadParsingScope(
|
|
136
|
+
return new ArrowHeadParsingScope(2);
|
|
142
137
|
}
|
|
143
138
|
function newExpressionScope() {
|
|
144
139
|
return new ExpressionScope();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_parseError","require","kExpression","kMaybeArrowParameterDeclaration","kMaybeAsyncArrowParameterDeclaration","kParameterDeclaration","ExpressionScope","constructor","type","canBeArrowParameterDeclaration","isCertainlyParameterDeclaration","ArrowHeadParsingScope","declarationErrors","Map","recordDeclarationError","ParsingErrorClass","at","index","set","clearDeclarationError","delete","iterateErrors","iterator","forEach","ExpressionScopeHandler","parser","stack","enter","scope","push","exit","pop","recordParameterInitializerError","toParseError","node","origin","loc","start","i","length","raise","recordArrowParameterBindingError","error","recordAsyncArrowParametersError","Errors","AwaitBindingIdentifier","validateAsPattern","currentScope","exports","default","newParameterDeclarationScope","newArrowHeadScope","newAsyncArrowScope","newExpressionScope"],"sources":["../../src/util/expression-scope.ts"],"sourcesContent":["import { Errors, type ParseErrorConstructor } from \"../parse-error\";\nimport type { Position } from \"./location\";\nimport type { Node } from \"../types\";\nimport type Tokenizer from \"../tokenizer\";\n\n/**\n * @module util/expression-scope\n\nExpressionScope is used to track declaration errors in these ambiguous patterns:\n\n- CoverParenthesizedExpressionAndArrowParameterList\n e.g. we don't know if `({ x })` is an parenthesized expression or an\n arrow function parameters until we see an `=>` after `)`.\n\n- CoverCallExpressionAndAsyncArrowHead\n e.g. we don't know if `async({ x })` is a call expression or an async arrow\n function parameters until we see an `=>` after `)`\n\nThe following declaration errors (@see parser-errors/standard) will be recorded in\nsome expression scopes and thrown later when we know what the ambiguous pattern is\n\n- AwaitBindingIdentifier\n- AwaitExpressionFormalParameter\n- YieldInParameter\n- InvalidParenthesizedAssignment when parenthesized is an identifier\n\nThere are four different expression scope\n- Expression\n A general scope that represents program / function body / static block. No errors\n will be recorded nor thrown in this scope.\n\n- MaybeArrowParameterDeclaration\n A scope that represents ambiguous arrow head e.g. `(x)`. Errors will be recorded\n alongside parent scopes and thrown when `ExpressionScopeHandler#validateAsPattern`\n is called.\n\n- MaybeAsyncArrowParameterDeclaration\n A scope that represents ambiguous async arrow head e.g. `async(x)`. Errors will\n be recorded alongside parent scopes and thrown when\n `ExpressionScopeHandler#validateAsPattern` is called.\n\n- ParameterDeclaration\n A scope that represents unambiguous function parameters `function(x)`. Errors\n recorded in this scope will be thrown immediately. No errors will be recorded in\n this scope.\n\n// @see {@link https://docs.google.com/document/d/1FAvEp9EUK-G8kHfDIEo_385Hs2SUBCYbJ5H-NnLvq8M|V8 Expression Scope design docs}\n */\n\nconst kExpression = 0,\n kMaybeArrowParameterDeclaration = 1,\n kMaybeAsyncArrowParameterDeclaration = 2,\n kParameterDeclaration = 3;\n\ntype ExpressionScopeType = 0 | 1 | 2 | 3;\n\nclass ExpressionScope {\n type: ExpressionScopeType;\n\n constructor(type: ExpressionScopeType = kExpression) {\n this.type = type;\n }\n\n canBeArrowParameterDeclaration(): this is ArrowHeadParsingScope {\n return (\n this.type === kMaybeAsyncArrowParameterDeclaration ||\n this.type === kMaybeArrowParameterDeclaration\n );\n }\n\n isCertainlyParameterDeclaration() {\n return this.type === kParameterDeclaration;\n }\n}\n\ntype ArrowHeadParsingParameterInitializerError =\n | typeof Errors.AwaitExpressionFormalParameter\n | typeof Errors.YieldInParameter;\ntype ArrowHeadParsingDeclarationError =\n | ArrowHeadParsingParameterInitializerError\n | typeof Errors.InvalidParenthesizedAssignment\n | typeof Errors.AwaitBindingIdentifier;\n\nclass ArrowHeadParsingScope extends ExpressionScope {\n declarationErrors: Map<number, [ParseErrorConstructor<{}>, Position]> =\n new Map();\n constructor(type: 1 | 2) {\n super(type);\n }\n recordDeclarationError(\n ParsingErrorClass: ParseErrorConstructor<{}>,\n {\n at,\n }: {\n at: Position;\n },\n ) {\n const index = at.index;\n\n this.declarationErrors.set(index, [ParsingErrorClass, at]);\n }\n clearDeclarationError(index: number) {\n this.declarationErrors.delete(index);\n }\n iterateErrors(\n iterator: (a: [ArrowHeadParsingDeclarationError, Position]) => void,\n ) {\n this.declarationErrors.forEach(iterator);\n }\n}\n\nexport default class ExpressionScopeHandler {\n parser: Tokenizer;\n stack: Array<ExpressionScope> = [new ExpressionScope()];\n\n constructor(parser: Tokenizer) {\n this.parser = parser;\n }\n enter(scope: ExpressionScope) {\n this.stack.push(scope);\n }\n\n exit() {\n this.stack.pop();\n }\n\n /**\n * Record likely parameter initializer errors\n *\n * When current scope is a ParameterDeclaration, the error will be thrown immediately,\n * otherwise it will be recorded to any ancestry MaybeArrowParameterDeclaration and\n * MaybeAsyncArrowParameterDeclaration scope until an Expression scope is seen.\n */\n recordParameterInitializerError(\n toParseError: ArrowHeadParsingParameterInitializerError,\n {\n at: node,\n }: {\n at: Node;\n },\n ): void {\n const origin = { at: node.loc.start };\n const { stack } = this;\n let i = stack.length - 1;\n let scope: ExpressionScope = stack[i];\n while (!scope.isCertainlyParameterDeclaration()) {\n if (scope.canBeArrowParameterDeclaration()) {\n scope.recordDeclarationError(toParseError, origin);\n } else {\n /*:: invariant(scope.type == kExpression) */\n // Type-Expression is the boundary where initializer error can populate to\n return;\n }\n scope = stack[--i];\n }\n this.parser.raise(toParseError, origin);\n }\n\n /**\n * Record errors that must be thrown if the current pattern ends up being an arrow\n * function parameter. This is used to record parenthesized identifiers, and to record\n * \"a as T\" and \"<T> a\" type assertions when parsing typescript.\n *\n * A parenthesized identifier (or type assertion) in LHS can be ambiguous because the assignment\n * can be transformed to an assignable later, but not vice versa:\n * For example, in `([(a) = []] = []) => {}`, we think `(a) = []` is an LHS in `[(a) = []]`,\n * an LHS within `[(a) = []] = []`. However the LHS chain is then transformed by toAssignable,\n * and we should throw assignment `(a)`, which is only valid in LHS. Hence we record the\n * location of parenthesized `(a)` to current scope if it is one of MaybeArrowParameterDeclaration\n * and MaybeAsyncArrowParameterDeclaration\n *\n * Unlike `recordParameterInitializerError`, we don't record to ancestry scope because we\n * validate arrow head parsing scope before exit, and then the LHS will be unambiguous:\n * For example, in `( x = ( [(a) = []] = [] ) ) => {}`, we should not record `(a)` in `( x = ... ) =>`\n * arrow scope because when we finish parsing `( [(a) = []] = [] )`, it is an unambiguous assignment\n * expression and can not be cast to pattern\n */\n recordArrowParameterBindingError(\n error: ParseErrorConstructor<{}>,\n {\n at: node,\n }: {\n at: Node;\n },\n ): void {\n const { stack } = this;\n const scope: ExpressionScope = stack[stack.length - 1];\n const origin = { at: node.loc.start };\n if (scope.isCertainlyParameterDeclaration()) {\n this.parser.raise(error, origin);\n } else if (scope.canBeArrowParameterDeclaration()) {\n scope.recordDeclarationError(error, origin);\n } else {\n return;\n }\n }\n\n /**\n * Record likely async arrow parameter errors\n *\n * Errors will be recorded to any ancestry MaybeAsyncArrowParameterDeclaration\n * scope until an Expression scope is seen.\n */\n recordAsyncArrowParametersError({ at }: { at: Position }): void {\n const { stack } = this;\n let i = stack.length - 1;\n let scope: ExpressionScope = stack[i];\n while (scope.canBeArrowParameterDeclaration()) {\n if (scope.type === kMaybeAsyncArrowParameterDeclaration) {\n scope.recordDeclarationError(Errors.AwaitBindingIdentifier, { at });\n }\n scope = stack[--i];\n }\n }\n\n validateAsPattern(): void {\n const { stack } = this;\n const currentScope = stack[stack.length - 1];\n if (!currentScope.canBeArrowParameterDeclaration()) return;\n currentScope.iterateErrors(([toParseError, loc]) => {\n this.parser.raise(toParseError, { at: loc });\n // iterate from parent scope\n let i = stack.length - 2;\n let scope = stack[i];\n while (scope.canBeArrowParameterDeclaration()) {\n scope.clearDeclarationError(loc.index);\n scope = stack[--i];\n }\n });\n }\n}\n\nexport function newParameterDeclarationScope() {\n return new ExpressionScope(kParameterDeclaration);\n}\n\nexport function newArrowHeadScope() {\n return new ArrowHeadParsingScope(kMaybeArrowParameterDeclaration);\n}\n\nexport function newAsyncArrowScope() {\n return new ArrowHeadParsingScope(kMaybeAsyncArrowParameterDeclaration);\n}\n\nexport function newExpressionScope() {\n return new ExpressionScope();\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_parseError","require","ExpressionScope","constructor","type","canBeArrowParameterDeclaration","isCertainlyParameterDeclaration","ArrowHeadParsingScope","declarationErrors","Map","recordDeclarationError","ParsingErrorClass","at","index","set","clearDeclarationError","delete","iterateErrors","iterator","forEach","ExpressionScopeHandler","parser","stack","enter","scope","push","exit","pop","recordParameterInitializerError","toParseError","node","origin","loc","start","i","length","raise","recordArrowParameterBindingError","error","recordAsyncArrowParametersError","Errors","AwaitBindingIdentifier","validateAsPattern","currentScope","exports","default","newParameterDeclarationScope","newArrowHeadScope","newAsyncArrowScope","newExpressionScope"],"sources":["../../src/util/expression-scope.ts"],"sourcesContent":["import { Errors, type ParseErrorConstructor } from \"../parse-error\";\nimport type { Position } from \"./location\";\nimport type { Node } from \"../types\";\nimport type Tokenizer from \"../tokenizer\";\n\n/**\n * @module util/expression-scope\n\nExpressionScope is used to track declaration errors in these ambiguous patterns:\n\n- CoverParenthesizedExpressionAndArrowParameterList\n e.g. we don't know if `({ x })` is an parenthesized expression or an\n arrow function parameters until we see an `=>` after `)`.\n\n- CoverCallExpressionAndAsyncArrowHead\n e.g. we don't know if `async({ x })` is a call expression or an async arrow\n function parameters until we see an `=>` after `)`\n\nThe following declaration errors (@see parser-errors/standard) will be recorded in\nsome expression scopes and thrown later when we know what the ambiguous pattern is\n\n- AwaitBindingIdentifier\n- AwaitExpressionFormalParameter\n- YieldInParameter\n- InvalidParenthesizedAssignment when parenthesized is an identifier\n\nThere are four different expression scope\n- Expression\n A general scope that represents program / function body / static block. No errors\n will be recorded nor thrown in this scope.\n\n- MaybeArrowParameterDeclaration\n A scope that represents ambiguous arrow head e.g. `(x)`. Errors will be recorded\n alongside parent scopes and thrown when `ExpressionScopeHandler#validateAsPattern`\n is called.\n\n- MaybeAsyncArrowParameterDeclaration\n A scope that represents ambiguous async arrow head e.g. `async(x)`. Errors will\n be recorded alongside parent scopes and thrown when\n `ExpressionScopeHandler#validateAsPattern` is called.\n\n- ParameterDeclaration\n A scope that represents unambiguous function parameters `function(x)`. Errors\n recorded in this scope will be thrown immediately. No errors will be recorded in\n this scope.\n\n// @see {@link https://docs.google.com/document/d/1FAvEp9EUK-G8kHfDIEo_385Hs2SUBCYbJ5H-NnLvq8M|V8 Expression Scope design docs}\n */\n\nconst enum ExpressionScopeType {\n kExpression = 0,\n kMaybeArrowParameterDeclaration = 1,\n kMaybeAsyncArrowParameterDeclaration = 2,\n kParameterDeclaration = 3,\n}\n\nclass ExpressionScope {\n declare type: ExpressionScopeType;\n\n constructor(type: ExpressionScopeType = ExpressionScopeType.kExpression) {\n this.type = type;\n }\n\n canBeArrowParameterDeclaration(): this is ArrowHeadParsingScope {\n return (\n this.type === ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration ||\n this.type === ExpressionScopeType.kMaybeArrowParameterDeclaration\n );\n }\n\n isCertainlyParameterDeclaration() {\n return this.type === ExpressionScopeType.kParameterDeclaration;\n }\n}\n\ntype ArrowHeadParsingParameterInitializerError =\n | typeof Errors.AwaitExpressionFormalParameter\n | typeof Errors.YieldInParameter;\ntype ArrowHeadParsingDeclarationError =\n | ArrowHeadParsingParameterInitializerError\n | typeof Errors.InvalidParenthesizedAssignment\n | typeof Errors.AwaitBindingIdentifier;\n\nclass ArrowHeadParsingScope extends ExpressionScope {\n declarationErrors: Map<number, [ParseErrorConstructor<{}>, Position]> =\n new Map();\n constructor(\n type:\n | ExpressionScopeType.kMaybeArrowParameterDeclaration\n | ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration,\n ) {\n super(type);\n }\n recordDeclarationError(\n ParsingErrorClass: ParseErrorConstructor<{}>,\n {\n at,\n }: {\n at: Position;\n },\n ) {\n const index = at.index;\n\n this.declarationErrors.set(index, [ParsingErrorClass, at]);\n }\n clearDeclarationError(index: number) {\n this.declarationErrors.delete(index);\n }\n iterateErrors(\n iterator: (a: [ArrowHeadParsingDeclarationError, Position]) => void,\n ) {\n this.declarationErrors.forEach(iterator);\n }\n}\n\nexport default class ExpressionScopeHandler {\n parser: Tokenizer;\n stack: Array<ExpressionScope> = [new ExpressionScope()];\n\n constructor(parser: Tokenizer) {\n this.parser = parser;\n }\n enter(scope: ExpressionScope) {\n this.stack.push(scope);\n }\n\n exit() {\n this.stack.pop();\n }\n\n /**\n * Record likely parameter initializer errors\n *\n * When current scope is a ParameterDeclaration, the error will be thrown immediately,\n * otherwise it will be recorded to any ancestry MaybeArrowParameterDeclaration and\n * MaybeAsyncArrowParameterDeclaration scope until an Expression scope is seen.\n */\n recordParameterInitializerError(\n toParseError: ArrowHeadParsingParameterInitializerError,\n {\n at: node,\n }: {\n at: Node;\n },\n ): void {\n const origin = { at: node.loc.start };\n const { stack } = this;\n let i = stack.length - 1;\n let scope: ExpressionScope = stack[i];\n while (!scope.isCertainlyParameterDeclaration()) {\n if (scope.canBeArrowParameterDeclaration()) {\n scope.recordDeclarationError(toParseError, origin);\n } else {\n /*:: invariant(scope.type == ExpressionScopeType.kExpression) */\n // Type-Expression is the boundary where initializer error can populate to\n return;\n }\n scope = stack[--i];\n }\n this.parser.raise(toParseError, origin);\n }\n\n /**\n * Record errors that must be thrown if the current pattern ends up being an arrow\n * function parameter. This is used to record parenthesized identifiers, and to record\n * \"a as T\" and \"<T> a\" type assertions when parsing typescript.\n *\n * A parenthesized identifier (or type assertion) in LHS can be ambiguous because the assignment\n * can be transformed to an assignable later, but not vice versa:\n * For example, in `([(a) = []] = []) => {}`, we think `(a) = []` is an LHS in `[(a) = []]`,\n * an LHS within `[(a) = []] = []`. However the LHS chain is then transformed by toAssignable,\n * and we should throw assignment `(a)`, which is only valid in LHS. Hence we record the\n * location of parenthesized `(a)` to current scope if it is one of MaybeArrowParameterDeclaration\n * and MaybeAsyncArrowParameterDeclaration\n *\n * Unlike `recordParameterInitializerError`, we don't record to ancestry scope because we\n * validate arrow head parsing scope before exit, and then the LHS will be unambiguous:\n * For example, in `( x = ( [(a) = []] = [] ) ) => {}`, we should not record `(a)` in `( x = ... ) =>`\n * arrow scope because when we finish parsing `( [(a) = []] = [] )`, it is an unambiguous assignment\n * expression and can not be cast to pattern\n */\n recordArrowParameterBindingError(\n error: ParseErrorConstructor<{}>,\n {\n at: node,\n }: {\n at: Node;\n },\n ): void {\n const { stack } = this;\n const scope: ExpressionScope = stack[stack.length - 1];\n const origin = { at: node.loc.start };\n if (scope.isCertainlyParameterDeclaration()) {\n this.parser.raise(error, origin);\n } else if (scope.canBeArrowParameterDeclaration()) {\n scope.recordDeclarationError(error, origin);\n } else {\n return;\n }\n }\n\n /**\n * Record likely async arrow parameter errors\n *\n * Errors will be recorded to any ancestry MaybeAsyncArrowParameterDeclaration\n * scope until an Expression scope is seen.\n */\n recordAsyncArrowParametersError({ at }: { at: Position }): void {\n const { stack } = this;\n let i = stack.length - 1;\n let scope: ExpressionScope = stack[i];\n while (scope.canBeArrowParameterDeclaration()) {\n if (\n scope.type === ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration\n ) {\n scope.recordDeclarationError(Errors.AwaitBindingIdentifier, { at });\n }\n scope = stack[--i];\n }\n }\n\n validateAsPattern(): void {\n const { stack } = this;\n const currentScope = stack[stack.length - 1];\n if (!currentScope.canBeArrowParameterDeclaration()) return;\n currentScope.iterateErrors(([toParseError, loc]) => {\n this.parser.raise(toParseError, { at: loc });\n // iterate from parent scope\n let i = stack.length - 2;\n let scope = stack[i];\n while (scope.canBeArrowParameterDeclaration()) {\n scope.clearDeclarationError(loc.index);\n scope = stack[--i];\n }\n });\n }\n}\n\nexport function newParameterDeclarationScope() {\n return new ExpressionScope(ExpressionScopeType.kParameterDeclaration);\n}\n\nexport function newArrowHeadScope() {\n return new ArrowHeadParsingScope(\n ExpressionScopeType.kMaybeArrowParameterDeclaration,\n );\n}\n\nexport function newAsyncArrowScope() {\n return new ArrowHeadParsingScope(\n ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration,\n );\n}\n\nexport function newExpressionScope() {\n return new ExpressionScope();\n}\n"],"mappings":";;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAwDA,MAAMC,eAAe,CAAC;EAGpBC,WAAWA,CAACC,IAAyB,IAAkC,EAAE;IACvE,IAAI,CAACA,IAAI,GAAGA,IAAI;EAClB;EAEAC,8BAA8BA,CAAA,EAAkC;IAC9D,OACE,IAAI,CAACD,IAAI,MAA6D,IACtE,IAAI,CAACA,IAAI,MAAwD;EAErE;EAEAE,+BAA+BA,CAAA,EAAG;IAChC,OAAO,IAAI,CAACF,IAAI,MAA8C;EAChE;AACF;AAUA,MAAMG,qBAAqB,SAASL,eAAe,CAAC;EAGlDC,WAAWA,CACTC,IAE4D,EAC5D;IACA,KAAK,CAACA,IAAI,CAAC;IAAC,KAPdI,iBAAiB,GACf,IAAIC,GAAG,CAAC,CAAC;EAOX;EACAC,sBAAsBA,CACpBC,iBAA4C,EAC5C;IACEC;EAGF,CAAC,EACD;IACA,MAAMC,KAAK,GAAGD,EAAE,CAACC,KAAK;IAEtB,IAAI,CAACL,iBAAiB,CAACM,GAAG,CAACD,KAAK,EAAE,CAACF,iBAAiB,EAAEC,EAAE,CAAC,CAAC;EAC5D;EACAG,qBAAqBA,CAACF,KAAa,EAAE;IACnC,IAAI,CAACL,iBAAiB,CAACQ,MAAM,CAACH,KAAK,CAAC;EACtC;EACAI,aAAaA,CACXC,QAAmE,EACnE;IACA,IAAI,CAACV,iBAAiB,CAACW,OAAO,CAACD,QAAQ,CAAC;EAC1C;AACF;AAEe,MAAME,sBAAsB,CAAC;EAI1CjB,WAAWA,CAACkB,MAAiB,EAAE;IAAA,KAH/BA,MAAM;IAAA,KACNC,KAAK,GAA2B,CAAC,IAAIpB,eAAe,CAAC,CAAC,CAAC;IAGrD,IAAI,CAACmB,MAAM,GAAGA,MAAM;EACtB;EACAE,KAAKA,CAACC,KAAsB,EAAE;IAC5B,IAAI,CAACF,KAAK,CAACG,IAAI,CAACD,KAAK,CAAC;EACxB;EAEAE,IAAIA,CAAA,EAAG;IACL,IAAI,CAACJ,KAAK,CAACK,GAAG,CAAC,CAAC;EAClB;EASAC,+BAA+BA,CAC7BC,YAAuD,EACvD;IACEjB,EAAE,EAAEkB;EAGN,CAAC,EACK;IACN,MAAMC,MAAM,GAAG;MAAEnB,EAAE,EAAEkB,IAAI,CAACE,GAAG,CAACC;IAAM,CAAC;IACrC,MAAM;MAAEX;IAAM,CAAC,GAAG,IAAI;IACtB,IAAIY,CAAC,GAAGZ,KAAK,CAACa,MAAM,GAAG,CAAC;IACxB,IAAIX,KAAsB,GAAGF,KAAK,CAACY,CAAC,CAAC;IACrC,OAAO,CAACV,KAAK,CAAClB,+BAA+B,CAAC,CAAC,EAAE;MAC/C,IAAIkB,KAAK,CAACnB,8BAA8B,CAAC,CAAC,EAAE;QAC1CmB,KAAK,CAACd,sBAAsB,CAACmB,YAAY,EAAEE,MAAM,CAAC;MACpD,CAAC,MAAM;QAGL;MACF;MACAP,KAAK,GAAGF,KAAK,CAAC,EAAEY,CAAC,CAAC;IACpB;IACA,IAAI,CAACb,MAAM,CAACe,KAAK,CAACP,YAAY,EAAEE,MAAM,CAAC;EACzC;EAqBAM,gCAAgCA,CAC9BC,KAAgC,EAChC;IACE1B,EAAE,EAAEkB;EAGN,CAAC,EACK;IACN,MAAM;MAAER;IAAM,CAAC,GAAG,IAAI;IACtB,MAAME,KAAsB,GAAGF,KAAK,CAACA,KAAK,CAACa,MAAM,GAAG,CAAC,CAAC;IACtD,MAAMJ,MAAM,GAAG;MAAEnB,EAAE,EAAEkB,IAAI,CAACE,GAAG,CAACC;IAAM,CAAC;IACrC,IAAIT,KAAK,CAAClB,+BAA+B,CAAC,CAAC,EAAE;MAC3C,IAAI,CAACe,MAAM,CAACe,KAAK,CAACE,KAAK,EAAEP,MAAM,CAAC;IAClC,CAAC,MAAM,IAAIP,KAAK,CAACnB,8BAA8B,CAAC,CAAC,EAAE;MACjDmB,KAAK,CAACd,sBAAsB,CAAC4B,KAAK,EAAEP,MAAM,CAAC;IAC7C,CAAC,MAAM;MACL;IACF;EACF;EAQAQ,+BAA+BA,CAAC;IAAE3B;EAAqB,CAAC,EAAQ;IAC9D,MAAM;MAAEU;IAAM,CAAC,GAAG,IAAI;IACtB,IAAIY,CAAC,GAAGZ,KAAK,CAACa,MAAM,GAAG,CAAC;IACxB,IAAIX,KAAsB,GAAGF,KAAK,CAACY,CAAC,CAAC;IACrC,OAAOV,KAAK,CAACnB,8BAA8B,CAAC,CAAC,EAAE;MAC7C,IACEmB,KAAK,CAACpB,IAAI,MAA6D,EACvE;QACAoB,KAAK,CAACd,sBAAsB,CAAC8B,kBAAM,CAACC,sBAAsB,EAAE;UAAE7B;QAAG,CAAC,CAAC;MACrE;MACAY,KAAK,GAAGF,KAAK,CAAC,EAAEY,CAAC,CAAC;IACpB;EACF;EAEAQ,iBAAiBA,CAAA,EAAS;IACxB,MAAM;MAAEpB;IAAM,CAAC,GAAG,IAAI;IACtB,MAAMqB,YAAY,GAAGrB,KAAK,CAACA,KAAK,CAACa,MAAM,GAAG,CAAC,CAAC;IAC5C,IAAI,CAACQ,YAAY,CAACtC,8BAA8B,CAAC,CAAC,EAAE;IACpDsC,YAAY,CAAC1B,aAAa,CAAC,CAAC,CAACY,YAAY,EAAEG,GAAG,CAAC,KAAK;MAClD,IAAI,CAACX,MAAM,CAACe,KAAK,CAACP,YAAY,EAAE;QAAEjB,EAAE,EAAEoB;MAAI,CAAC,CAAC;MAE5C,IAAIE,CAAC,GAAGZ,KAAK,CAACa,MAAM,GAAG,CAAC;MACxB,IAAIX,KAAK,GAAGF,KAAK,CAACY,CAAC,CAAC;MACpB,OAAOV,KAAK,CAACnB,8BAA8B,CAAC,CAAC,EAAE;QAC7CmB,KAAK,CAACT,qBAAqB,CAACiB,GAAG,CAACnB,KAAK,CAAC;QACtCW,KAAK,GAAGF,KAAK,CAAC,EAAEY,CAAC,CAAC;MACpB;IACF,CAAC,CAAC;EACJ;AACF;AAACU,OAAA,CAAAC,OAAA,GAAAzB,sBAAA;AAEM,SAAS0B,4BAA4BA,CAAA,EAAG;EAC7C,OAAO,IAAI5C,eAAe,EAA0C,CAAC;AACvE;AAEO,SAAS6C,iBAAiBA,CAAA,EAAG;EAClC,OAAO,IAAIxC,qBAAqB,EAEhC,CAAC;AACH;AAEO,SAASyC,kBAAkBA,CAAA,EAAG;EACnC,OAAO,IAAIzC,qBAAqB,EAEhC,CAAC;AACH;AAEO,SAAS0C,kBAAkBA,CAAA,EAAG;EACnC,OAAO,IAAI/C,eAAe,CAAC,CAAC;AAC9B"}
|
|
@@ -25,39 +25,39 @@ class ScopeHandler {
|
|
|
25
25
|
this.inModule = inModule;
|
|
26
26
|
}
|
|
27
27
|
get inTopLevel() {
|
|
28
|
-
return (this.currentScope().flags & _scopeflags.
|
|
28
|
+
return (this.currentScope().flags & _scopeflags.ScopeFlag.PROGRAM) > 0;
|
|
29
29
|
}
|
|
30
30
|
get inFunction() {
|
|
31
|
-
return (this.currentVarScopeFlags() & _scopeflags.
|
|
31
|
+
return (this.currentVarScopeFlags() & _scopeflags.ScopeFlag.FUNCTION) > 0;
|
|
32
32
|
}
|
|
33
33
|
get allowSuper() {
|
|
34
|
-
return (this.currentThisScopeFlags() & _scopeflags.
|
|
34
|
+
return (this.currentThisScopeFlags() & _scopeflags.ScopeFlag.SUPER) > 0;
|
|
35
35
|
}
|
|
36
36
|
get allowDirectSuper() {
|
|
37
|
-
return (this.currentThisScopeFlags() & _scopeflags.
|
|
37
|
+
return (this.currentThisScopeFlags() & _scopeflags.ScopeFlag.DIRECT_SUPER) > 0;
|
|
38
38
|
}
|
|
39
39
|
get inClass() {
|
|
40
|
-
return (this.currentThisScopeFlags() & _scopeflags.
|
|
40
|
+
return (this.currentThisScopeFlags() & _scopeflags.ScopeFlag.CLASS) > 0;
|
|
41
41
|
}
|
|
42
42
|
get inClassAndNotInNonArrowFunction() {
|
|
43
43
|
const flags = this.currentThisScopeFlags();
|
|
44
|
-
return (flags & _scopeflags.
|
|
44
|
+
return (flags & _scopeflags.ScopeFlag.CLASS) > 0 && (flags & _scopeflags.ScopeFlag.FUNCTION) === 0;
|
|
45
45
|
}
|
|
46
46
|
get inStaticBlock() {
|
|
47
47
|
for (let i = this.scopeStack.length - 1;; i--) {
|
|
48
48
|
const {
|
|
49
49
|
flags
|
|
50
50
|
} = this.scopeStack[i];
|
|
51
|
-
if (flags & _scopeflags.
|
|
51
|
+
if (flags & _scopeflags.ScopeFlag.STATIC_BLOCK) {
|
|
52
52
|
return true;
|
|
53
53
|
}
|
|
54
|
-
if (flags & (_scopeflags.
|
|
54
|
+
if (flags & (_scopeflags.ScopeFlag.VAR | _scopeflags.ScopeFlag.CLASS)) {
|
|
55
55
|
return false;
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
get inNonArrowFunction() {
|
|
60
|
-
return (this.currentThisScopeFlags() & _scopeflags.
|
|
60
|
+
return (this.currentThisScopeFlags() & _scopeflags.ScopeFlag.FUNCTION) > 0;
|
|
61
61
|
}
|
|
62
62
|
get treatFunctionsAsVar() {
|
|
63
63
|
return this.treatFunctionsAsVarInScope(this.currentScope());
|
|
@@ -73,35 +73,35 @@ class ScopeHandler {
|
|
|
73
73
|
return scope.flags;
|
|
74
74
|
}
|
|
75
75
|
treatFunctionsAsVarInScope(scope) {
|
|
76
|
-
return !!(scope.flags & (_scopeflags.
|
|
76
|
+
return !!(scope.flags & (_scopeflags.ScopeFlag.FUNCTION | _scopeflags.ScopeFlag.STATIC_BLOCK) || !this.parser.inModule && scope.flags & _scopeflags.ScopeFlag.PROGRAM);
|
|
77
77
|
}
|
|
78
78
|
declareName(name, bindingType, loc) {
|
|
79
79
|
let scope = this.currentScope();
|
|
80
|
-
if (bindingType & _scopeflags.
|
|
80
|
+
if (bindingType & _scopeflags.BindingFlag.SCOPE_LEXICAL || bindingType & _scopeflags.BindingFlag.SCOPE_FUNCTION) {
|
|
81
81
|
this.checkRedeclarationInScope(scope, name, bindingType, loc);
|
|
82
|
-
if (bindingType & _scopeflags.
|
|
82
|
+
if (bindingType & _scopeflags.BindingFlag.SCOPE_FUNCTION) {
|
|
83
83
|
scope.functions.add(name);
|
|
84
84
|
} else {
|
|
85
85
|
scope.lexical.add(name);
|
|
86
86
|
}
|
|
87
|
-
if (bindingType & _scopeflags.
|
|
87
|
+
if (bindingType & _scopeflags.BindingFlag.SCOPE_LEXICAL) {
|
|
88
88
|
this.maybeExportDefined(scope, name);
|
|
89
89
|
}
|
|
90
|
-
} else if (bindingType & _scopeflags.
|
|
90
|
+
} else if (bindingType & _scopeflags.BindingFlag.SCOPE_VAR) {
|
|
91
91
|
for (let i = this.scopeStack.length - 1; i >= 0; --i) {
|
|
92
92
|
scope = this.scopeStack[i];
|
|
93
93
|
this.checkRedeclarationInScope(scope, name, bindingType, loc);
|
|
94
94
|
scope.var.add(name);
|
|
95
95
|
this.maybeExportDefined(scope, name);
|
|
96
|
-
if (scope.flags & _scopeflags.
|
|
96
|
+
if (scope.flags & _scopeflags.ScopeFlag.VAR) break;
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
|
-
if (this.parser.inModule && scope.flags & _scopeflags.
|
|
99
|
+
if (this.parser.inModule && scope.flags & _scopeflags.ScopeFlag.PROGRAM) {
|
|
100
100
|
this.undefinedExports.delete(name);
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
maybeExportDefined(scope, name) {
|
|
104
|
-
if (this.parser.inModule && scope.flags & _scopeflags.
|
|
104
|
+
if (this.parser.inModule && scope.flags & _scopeflags.ScopeFlag.PROGRAM) {
|
|
105
105
|
this.undefinedExports.delete(name);
|
|
106
106
|
}
|
|
107
107
|
}
|
|
@@ -114,14 +114,14 @@ class ScopeHandler {
|
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
isRedeclaredInScope(scope, name, bindingType) {
|
|
117
|
-
if (!(bindingType & _scopeflags.
|
|
118
|
-
if (bindingType & _scopeflags.
|
|
117
|
+
if (!(bindingType & _scopeflags.BindingFlag.KIND_VALUE)) return false;
|
|
118
|
+
if (bindingType & _scopeflags.BindingFlag.SCOPE_LEXICAL) {
|
|
119
119
|
return scope.lexical.has(name) || scope.functions.has(name) || scope.var.has(name);
|
|
120
120
|
}
|
|
121
|
-
if (bindingType & _scopeflags.
|
|
121
|
+
if (bindingType & _scopeflags.BindingFlag.SCOPE_FUNCTION) {
|
|
122
122
|
return scope.lexical.has(name) || !this.treatFunctionsAsVarInScope(scope) && scope.var.has(name);
|
|
123
123
|
}
|
|
124
|
-
return scope.lexical.has(name) && !(scope.flags & _scopeflags.
|
|
124
|
+
return scope.lexical.has(name) && !(scope.flags & _scopeflags.ScopeFlag.SIMPLE_CATCH && scope.lexical.values().next().value === name) || !this.treatFunctionsAsVarInScope(scope) && scope.functions.has(name);
|
|
125
125
|
}
|
|
126
126
|
checkLocalExport(id) {
|
|
127
127
|
const {
|
|
@@ -140,7 +140,7 @@ class ScopeHandler {
|
|
|
140
140
|
const {
|
|
141
141
|
flags
|
|
142
142
|
} = this.scopeStack[i];
|
|
143
|
-
if (flags & _scopeflags.
|
|
143
|
+
if (flags & _scopeflags.ScopeFlag.VAR) {
|
|
144
144
|
return flags;
|
|
145
145
|
}
|
|
146
146
|
}
|
|
@@ -150,7 +150,7 @@ class ScopeHandler {
|
|
|
150
150
|
const {
|
|
151
151
|
flags
|
|
152
152
|
} = this.scopeStack[i];
|
|
153
|
-
if (flags & (_scopeflags.
|
|
153
|
+
if (flags & (_scopeflags.ScopeFlag.VAR | _scopeflags.ScopeFlag.CLASS) && !(flags & _scopeflags.ScopeFlag.ARROW)) {
|
|
154
154
|
return flags;
|
|
155
155
|
}
|
|
156
156
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_scopeflags","require","_parseError","Scope","constructor","flags","var","Set","lexical","functions","exports","ScopeHandler","parser","inModule","scopeStack","undefinedExports","Map","inTopLevel","currentScope","SCOPE_PROGRAM","inFunction","currentVarScopeFlags","SCOPE_FUNCTION","allowSuper","currentThisScopeFlags","SCOPE_SUPER","allowDirectSuper","SCOPE_DIRECT_SUPER","inClass","SCOPE_CLASS","inClassAndNotInNonArrowFunction","inStaticBlock","i","length","SCOPE_STATIC_BLOCK","SCOPE_VAR","inNonArrowFunction","treatFunctionsAsVar","treatFunctionsAsVarInScope","createScope","enter","push","exit","scope","pop","declareName","name","bindingType","loc","BIND_SCOPE_LEXICAL","BIND_SCOPE_FUNCTION","checkRedeclarationInScope","add","maybeExportDefined","BIND_SCOPE_VAR","delete","isRedeclaredInScope","raise","Errors","VarRedeclaration","at","identifierName","BIND_KIND_VALUE","has","SCOPE_SIMPLE_CATCH","values","next","value","checkLocalExport","id","topLevelScope","set","start","SCOPE_ARROW","default"],"sources":["../../src/util/scope.ts"],"sourcesContent":["import {\n SCOPE_ARROW,\n SCOPE_DIRECT_SUPER,\n SCOPE_FUNCTION,\n SCOPE_SIMPLE_CATCH,\n SCOPE_SUPER,\n SCOPE_PROGRAM,\n SCOPE_VAR,\n SCOPE_CLASS,\n SCOPE_STATIC_BLOCK,\n BIND_SCOPE_FUNCTION,\n BIND_SCOPE_VAR,\n BIND_SCOPE_LEXICAL,\n BIND_KIND_VALUE,\n type ScopeFlags,\n type BindingTypes,\n} from \"./scopeflags\";\nimport type { Position } from \"./location\";\nimport type * as N from \"../types\";\nimport { Errors } from \"../parse-error\";\nimport type Tokenizer from \"../tokenizer\";\n\n// Start an AST node, attaching a start offset.\nexport class Scope {\n declare flags: ScopeFlags;\n // A set of var-declared names in the current lexical scope\n var: Set<string> = new Set();\n // A set of lexically-declared names in the current lexical scope\n lexical: Set<string> = new Set();\n // A set of lexically-declared FunctionDeclaration names in the current lexical scope\n functions: Set<string> = new Set();\n\n constructor(flags: ScopeFlags) {\n this.flags = flags;\n }\n}\n\n// The functions in this module keep track of declared variables in the\n// current scope in order to detect duplicate variable names.\nexport default class ScopeHandler<IScope extends Scope = Scope> {\n parser: Tokenizer;\n scopeStack: Array<IScope> = [];\n inModule: boolean;\n undefinedExports: Map<string, Position> = new Map();\n\n constructor(parser: Tokenizer, inModule: boolean) {\n this.parser = parser;\n this.inModule = inModule;\n }\n\n get inTopLevel() {\n return (this.currentScope().flags & SCOPE_PROGRAM) > 0;\n }\n get inFunction() {\n return (this.currentVarScopeFlags() & SCOPE_FUNCTION) > 0;\n }\n get allowSuper() {\n return (this.currentThisScopeFlags() & SCOPE_SUPER) > 0;\n }\n get allowDirectSuper() {\n return (this.currentThisScopeFlags() & SCOPE_DIRECT_SUPER) > 0;\n }\n get inClass() {\n return (this.currentThisScopeFlags() & SCOPE_CLASS) > 0;\n }\n get inClassAndNotInNonArrowFunction() {\n const flags = this.currentThisScopeFlags();\n return (flags & SCOPE_CLASS) > 0 && (flags & SCOPE_FUNCTION) === 0;\n }\n get inStaticBlock() {\n for (let i = this.scopeStack.length - 1; ; i--) {\n const { flags } = this.scopeStack[i];\n if (flags & SCOPE_STATIC_BLOCK) {\n return true;\n }\n if (flags & (SCOPE_VAR | SCOPE_CLASS)) {\n // function body, module body, class property initializers\n return false;\n }\n }\n }\n get inNonArrowFunction() {\n return (this.currentThisScopeFlags() & SCOPE_FUNCTION) > 0;\n }\n get treatFunctionsAsVar() {\n return this.treatFunctionsAsVarInScope(this.currentScope());\n }\n\n createScope(flags: ScopeFlags): Scope {\n return new Scope(flags);\n }\n\n enter(flags: ScopeFlags) {\n /*:: +createScope: (flags: ScopeFlags) => IScope; */\n // @ts-expect-error This method will be overwritten by subclasses\n this.scopeStack.push(this.createScope(flags));\n }\n\n exit(): ScopeFlags {\n const scope = this.scopeStack.pop();\n return scope.flags;\n }\n\n // The spec says:\n // > At the top level of a function, or script, function declarations are\n // > treated like var declarations rather than like lexical declarations.\n treatFunctionsAsVarInScope(scope: IScope): boolean {\n return !!(\n scope.flags & (SCOPE_FUNCTION | SCOPE_STATIC_BLOCK) ||\n (!this.parser.inModule && scope.flags & SCOPE_PROGRAM)\n );\n }\n\n declareName(name: string, bindingType: BindingTypes, loc: Position) {\n let scope = this.currentScope();\n if (bindingType & BIND_SCOPE_LEXICAL || bindingType & BIND_SCOPE_FUNCTION) {\n this.checkRedeclarationInScope(scope, name, bindingType, loc);\n\n if (bindingType & BIND_SCOPE_FUNCTION) {\n scope.functions.add(name);\n } else {\n scope.lexical.add(name);\n }\n\n if (bindingType & BIND_SCOPE_LEXICAL) {\n this.maybeExportDefined(scope, name);\n }\n } else if (bindingType & BIND_SCOPE_VAR) {\n for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n scope = this.scopeStack[i];\n this.checkRedeclarationInScope(scope, name, bindingType, loc);\n scope.var.add(name);\n this.maybeExportDefined(scope, name);\n\n if (scope.flags & SCOPE_VAR) break;\n }\n }\n if (this.parser.inModule && scope.flags & SCOPE_PROGRAM) {\n this.undefinedExports.delete(name);\n }\n }\n\n maybeExportDefined(scope: IScope, name: string) {\n if (this.parser.inModule && scope.flags & SCOPE_PROGRAM) {\n this.undefinedExports.delete(name);\n }\n }\n\n checkRedeclarationInScope(\n scope: IScope,\n name: string,\n bindingType: BindingTypes,\n loc: Position,\n ) {\n if (this.isRedeclaredInScope(scope, name, bindingType)) {\n this.parser.raise(Errors.VarRedeclaration, {\n at: loc,\n identifierName: name,\n });\n }\n }\n\n isRedeclaredInScope(\n scope: IScope,\n name: string,\n bindingType: BindingTypes,\n ): boolean {\n if (!(bindingType & BIND_KIND_VALUE)) return false;\n\n if (bindingType & BIND_SCOPE_LEXICAL) {\n return (\n scope.lexical.has(name) ||\n scope.functions.has(name) ||\n scope.var.has(name)\n );\n }\n\n if (bindingType & BIND_SCOPE_FUNCTION) {\n return (\n scope.lexical.has(name) ||\n (!this.treatFunctionsAsVarInScope(scope) && scope.var.has(name))\n );\n }\n\n return (\n (scope.lexical.has(name) &&\n // Annex B.3.4\n // https://tc39.es/ecma262/#sec-variablestatements-in-catch-blocks\n !(\n scope.flags & SCOPE_SIMPLE_CATCH &&\n scope.lexical.values().next().value === name\n )) ||\n (!this.treatFunctionsAsVarInScope(scope) && scope.functions.has(name))\n );\n }\n\n checkLocalExport(id: N.Identifier) {\n const { name } = id;\n const topLevelScope = this.scopeStack[0];\n if (\n !topLevelScope.lexical.has(name) &&\n !topLevelScope.var.has(name) &&\n // In strict mode, scope.functions will always be empty.\n // Modules are strict by default, but the `scriptMode` option\n // can overwrite this behavior.\n !topLevelScope.functions.has(name)\n ) {\n this.undefinedExports.set(name, id.loc.start);\n }\n }\n\n currentScope(): IScope {\n return this.scopeStack[this.scopeStack.length - 1];\n }\n\n currentVarScopeFlags(): ScopeFlags {\n for (let i = this.scopeStack.length - 1; ; i--) {\n const { flags } = this.scopeStack[i];\n if (flags & SCOPE_VAR) {\n return flags;\n }\n }\n }\n\n // Could be useful for `arguments`, `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n currentThisScopeFlags(): ScopeFlags {\n for (let i = this.scopeStack.length - 1; ; i--) {\n const { flags } = this.scopeStack[i];\n if (flags & (SCOPE_VAR | SCOPE_CLASS) && !(flags & SCOPE_ARROW)) {\n return flags;\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_scopeflags","require","_parseError","Scope","constructor","flags","var","Set","lexical","functions","exports","ScopeHandler","parser","inModule","scopeStack","undefinedExports","Map","inTopLevel","currentScope","ScopeFlag","PROGRAM","inFunction","currentVarScopeFlags","FUNCTION","allowSuper","currentThisScopeFlags","SUPER","allowDirectSuper","DIRECT_SUPER","inClass","CLASS","inClassAndNotInNonArrowFunction","inStaticBlock","i","length","STATIC_BLOCK","VAR","inNonArrowFunction","treatFunctionsAsVar","treatFunctionsAsVarInScope","createScope","enter","push","exit","scope","pop","declareName","name","bindingType","loc","BindingFlag","SCOPE_LEXICAL","SCOPE_FUNCTION","checkRedeclarationInScope","add","maybeExportDefined","SCOPE_VAR","delete","isRedeclaredInScope","raise","Errors","VarRedeclaration","at","identifierName","KIND_VALUE","has","SIMPLE_CATCH","values","next","value","checkLocalExport","id","topLevelScope","set","start","ARROW","default"],"sources":["../../src/util/scope.ts"],"sourcesContent":["import { ScopeFlag, BindingFlag, type BindingTypes } from \"./scopeflags\";\nimport type { Position } from \"./location\";\nimport type * as N from \"../types\";\nimport { Errors } from \"../parse-error\";\nimport type Tokenizer from \"../tokenizer\";\n\n// Start an AST node, attaching a start offset.\nexport class Scope {\n declare flags: ScopeFlag;\n // A set of var-declared names in the current lexical scope\n var: Set<string> = new Set();\n // A set of lexically-declared names in the current lexical scope\n lexical: Set<string> = new Set();\n // A set of lexically-declared FunctionDeclaration names in the current lexical scope\n functions: Set<string> = new Set();\n\n constructor(flags: ScopeFlag) {\n this.flags = flags;\n }\n}\n\n// The functions in this module keep track of declared variables in the\n// current scope in order to detect duplicate variable names.\nexport default class ScopeHandler<IScope extends Scope = Scope> {\n parser: Tokenizer;\n scopeStack: Array<IScope> = [];\n inModule: boolean;\n undefinedExports: Map<string, Position> = new Map();\n\n constructor(parser: Tokenizer, inModule: boolean) {\n this.parser = parser;\n this.inModule = inModule;\n }\n\n get inTopLevel() {\n return (this.currentScope().flags & ScopeFlag.PROGRAM) > 0;\n }\n get inFunction() {\n return (this.currentVarScopeFlags() & ScopeFlag.FUNCTION) > 0;\n }\n get allowSuper() {\n return (this.currentThisScopeFlags() & ScopeFlag.SUPER) > 0;\n }\n get allowDirectSuper() {\n return (this.currentThisScopeFlags() & ScopeFlag.DIRECT_SUPER) > 0;\n }\n get inClass() {\n return (this.currentThisScopeFlags() & ScopeFlag.CLASS) > 0;\n }\n get inClassAndNotInNonArrowFunction() {\n const flags = this.currentThisScopeFlags();\n return (flags & ScopeFlag.CLASS) > 0 && (flags & ScopeFlag.FUNCTION) === 0;\n }\n get inStaticBlock() {\n for (let i = this.scopeStack.length - 1; ; i--) {\n const { flags } = this.scopeStack[i];\n if (flags & ScopeFlag.STATIC_BLOCK) {\n return true;\n }\n if (flags & (ScopeFlag.VAR | ScopeFlag.CLASS)) {\n // function body, module body, class property initializers\n return false;\n }\n }\n }\n get inNonArrowFunction() {\n return (this.currentThisScopeFlags() & ScopeFlag.FUNCTION) > 0;\n }\n get treatFunctionsAsVar() {\n return this.treatFunctionsAsVarInScope(this.currentScope());\n }\n\n createScope(flags: ScopeFlag): Scope {\n return new Scope(flags);\n }\n\n enter(flags: ScopeFlag) {\n /*:: +createScope: (flags:ScopeFlag) => IScope; */\n // @ts-expect-error This method will be overwritten by subclasses\n this.scopeStack.push(this.createScope(flags));\n }\n\n exit(): ScopeFlag {\n const scope = this.scopeStack.pop();\n return scope.flags;\n }\n\n // The spec says:\n // > At the top level of a function, or script, function declarations are\n // > treated like var declarations rather than like lexical declarations.\n treatFunctionsAsVarInScope(scope: IScope): boolean {\n return !!(\n scope.flags & (ScopeFlag.FUNCTION | ScopeFlag.STATIC_BLOCK) ||\n (!this.parser.inModule && scope.flags & ScopeFlag.PROGRAM)\n );\n }\n\n declareName(name: string, bindingType: BindingTypes, loc: Position) {\n let scope = this.currentScope();\n if (\n bindingType & BindingFlag.SCOPE_LEXICAL ||\n bindingType & BindingFlag.SCOPE_FUNCTION\n ) {\n this.checkRedeclarationInScope(scope, name, bindingType, loc);\n\n if (bindingType & BindingFlag.SCOPE_FUNCTION) {\n scope.functions.add(name);\n } else {\n scope.lexical.add(name);\n }\n\n if (bindingType & BindingFlag.SCOPE_LEXICAL) {\n this.maybeExportDefined(scope, name);\n }\n } else if (bindingType & BindingFlag.SCOPE_VAR) {\n for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n scope = this.scopeStack[i];\n this.checkRedeclarationInScope(scope, name, bindingType, loc);\n scope.var.add(name);\n this.maybeExportDefined(scope, name);\n\n if (scope.flags & ScopeFlag.VAR) break;\n }\n }\n if (this.parser.inModule && scope.flags & ScopeFlag.PROGRAM) {\n this.undefinedExports.delete(name);\n }\n }\n\n maybeExportDefined(scope: IScope, name: string) {\n if (this.parser.inModule && scope.flags & ScopeFlag.PROGRAM) {\n this.undefinedExports.delete(name);\n }\n }\n\n checkRedeclarationInScope(\n scope: IScope,\n name: string,\n bindingType: BindingTypes,\n loc: Position,\n ) {\n if (this.isRedeclaredInScope(scope, name, bindingType)) {\n this.parser.raise(Errors.VarRedeclaration, {\n at: loc,\n identifierName: name,\n });\n }\n }\n\n isRedeclaredInScope(\n scope: IScope,\n name: string,\n bindingType: BindingTypes,\n ): boolean {\n if (!(bindingType & BindingFlag.KIND_VALUE)) return false;\n\n if (bindingType & BindingFlag.SCOPE_LEXICAL) {\n return (\n scope.lexical.has(name) ||\n scope.functions.has(name) ||\n scope.var.has(name)\n );\n }\n\n if (bindingType & BindingFlag.SCOPE_FUNCTION) {\n return (\n scope.lexical.has(name) ||\n (!this.treatFunctionsAsVarInScope(scope) && scope.var.has(name))\n );\n }\n\n return (\n (scope.lexical.has(name) &&\n // Annex B.3.4\n // https://tc39.es/ecma262/#sec-variablestatements-in-catch-blocks\n !(\n scope.flags & ScopeFlag.SIMPLE_CATCH &&\n scope.lexical.values().next().value === name\n )) ||\n (!this.treatFunctionsAsVarInScope(scope) && scope.functions.has(name))\n );\n }\n\n checkLocalExport(id: N.Identifier) {\n const { name } = id;\n const topLevelScope = this.scopeStack[0];\n if (\n !topLevelScope.lexical.has(name) &&\n !topLevelScope.var.has(name) &&\n // In strict mode, scope.functions will always be empty.\n // Modules are strict by default, but the `scriptMode` option\n // can overwrite this behavior.\n !topLevelScope.functions.has(name)\n ) {\n this.undefinedExports.set(name, id.loc.start);\n }\n }\n\n currentScope(): IScope {\n return this.scopeStack[this.scopeStack.length - 1];\n }\n\n currentVarScopeFlags(): ScopeFlag {\n for (let i = this.scopeStack.length - 1; ; i--) {\n const { flags } = this.scopeStack[i];\n if (flags & ScopeFlag.VAR) {\n return flags;\n }\n }\n }\n\n // Could be useful for `arguments`, `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n currentThisScopeFlags(): ScopeFlag {\n for (let i = this.scopeStack.length - 1; ; i--) {\n const { flags } = this.scopeStack[i];\n if (\n flags & (ScopeFlag.VAR | ScopeFlag.CLASS) &&\n !(flags & ScopeFlag.ARROW)\n ) {\n return flags;\n }\n }\n }\n}\n"],"mappings":"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"}
|