mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-05-03 03:19:31 +08:00
39 lines
No EOL
1.8 KiB
Text
39 lines
No EOL
1.8 KiB
Text
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.GlobalScope = void 0;
|
|
const types_1 = require("@typescript-eslint/types");
|
|
const ScopeBase_1 = require("./ScopeBase");
|
|
const ScopeType_1 = require("./ScopeType");
|
|
const assert_1 = require("../assert");
|
|
const ImplicitGlobalVariableDefinition_1 = require("../definition/ImplicitGlobalVariableDefinition");
|
|
const variable_1 = require("../variable");
|
|
class GlobalScope extends ScopeBase_1.ScopeBase {
|
|
constructor(scopeManager, block) {
|
|
super(scopeManager, ScopeType_1.ScopeType.global, null, block, false);
|
|
this.implicit = {
|
|
set: new Map(),
|
|
variables: [],
|
|
leftToBeResolved: [],
|
|
};
|
|
}
|
|
defineImplicitVariable(name, options) {
|
|
this.defineVariable(new variable_1.ImplicitLibVariable(this, name, options), this.set, this.variables, null, null);
|
|
}
|
|
close(scopeManager) {
|
|
(0, assert_1.assert)(this.leftToResolve);
|
|
for (const ref of this.leftToResolve) {
|
|
if (ref.maybeImplicitGlobal && !this.set.has(ref.identifier.name)) {
|
|
// create an implicit global variable from assignment expression
|
|
const info = ref.maybeImplicitGlobal;
|
|
const node = info.pattern;
|
|
if (node && node.type === types_1.AST_NODE_TYPES.Identifier) {
|
|
this.defineVariable(node.name, this.implicit.set, this.implicit.variables, node, new ImplicitGlobalVariableDefinition_1.ImplicitGlobalVariableDefinition(info.pattern, info.node));
|
|
}
|
|
}
|
|
}
|
|
this.implicit.leftToBeResolved = this.leftToResolve;
|
|
return super.close(scopeManager);
|
|
}
|
|
}
|
|
exports.GlobalScope = GlobalScope;
|
|
//# sourceMappingURL=GlobalScope.js.map |