@boristype/bt-ir 0.1.0-alpha.0
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/LICENSE +21 -0
- package/README.md +338 -0
- package/build/analyzer/index.d.ts +7 -0
- package/build/analyzer/index.d.ts.map +1 -0
- package/build/analyzer/index.js +7 -0
- package/build/analyzer/index.js.map +1 -0
- package/build/analyzer/scope-analyzer.d.ts +88 -0
- package/build/analyzer/scope-analyzer.d.ts.map +1 -0
- package/build/analyzer/scope-analyzer.js +565 -0
- package/build/analyzer/scope-analyzer.js.map +1 -0
- package/build/cli.d.ts +10 -0
- package/build/cli.d.ts.map +1 -0
- package/build/cli.js +96 -0
- package/build/cli.js.map +1 -0
- package/build/emitter/bt-emitter.d.ts +31 -0
- package/build/emitter/bt-emitter.d.ts.map +1 -0
- package/build/emitter/bt-emitter.js +919 -0
- package/build/emitter/bt-emitter.js.map +1 -0
- package/build/emitter/index.d.ts +7 -0
- package/build/emitter/index.d.ts.map +1 -0
- package/build/emitter/index.js +7 -0
- package/build/emitter/index.js.map +1 -0
- package/build/index.d.ts +25 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +24 -0
- package/build/index.js.map +1 -0
- package/build/ir/builders.d.ts +235 -0
- package/build/ir/builders.d.ts.map +1 -0
- package/build/ir/builders.js +387 -0
- package/build/ir/builders.js.map +1 -0
- package/build/ir/index.d.ts +8 -0
- package/build/ir/index.d.ts.map +1 -0
- package/build/ir/index.js +8 -0
- package/build/ir/index.js.map +1 -0
- package/build/ir/nodes.d.ts +596 -0
- package/build/ir/nodes.d.ts.map +1 -0
- package/build/ir/nodes.js +16 -0
- package/build/ir/nodes.js.map +1 -0
- package/build/lowering/bare-visitors.d.ts +72 -0
- package/build/lowering/bare-visitors.d.ts.map +1 -0
- package/build/lowering/bare-visitors.js +287 -0
- package/build/lowering/bare-visitors.js.map +1 -0
- package/build/lowering/binding.d.ts +127 -0
- package/build/lowering/binding.d.ts.map +1 -0
- package/build/lowering/binding.js +194 -0
- package/build/lowering/binding.js.map +1 -0
- package/build/lowering/expressions.d.ts +106 -0
- package/build/lowering/expressions.d.ts.map +1 -0
- package/build/lowering/expressions.js +1172 -0
- package/build/lowering/expressions.js.map +1 -0
- package/build/lowering/function-builder.d.ts +111 -0
- package/build/lowering/function-builder.d.ts.map +1 -0
- package/build/lowering/function-builder.js +111 -0
- package/build/lowering/function-builder.js.map +1 -0
- package/build/lowering/helpers.d.ts +88 -0
- package/build/lowering/helpers.d.ts.map +1 -0
- package/build/lowering/helpers.js +347 -0
- package/build/lowering/helpers.js.map +1 -0
- package/build/lowering/index.d.ts +21 -0
- package/build/lowering/index.d.ts.map +1 -0
- package/build/lowering/index.js +28 -0
- package/build/lowering/index.js.map +1 -0
- package/build/lowering/precedence.d.ts +18 -0
- package/build/lowering/precedence.d.ts.map +1 -0
- package/build/lowering/precedence.js +104 -0
- package/build/lowering/precedence.js.map +1 -0
- package/build/lowering/spread-helpers.d.ts +12 -0
- package/build/lowering/spread-helpers.d.ts.map +1 -0
- package/build/lowering/spread-helpers.js +32 -0
- package/build/lowering/spread-helpers.js.map +1 -0
- package/build/lowering/statements.d.ts +85 -0
- package/build/lowering/statements.d.ts.map +1 -0
- package/build/lowering/statements.js +713 -0
- package/build/lowering/statements.js.map +1 -0
- package/build/lowering/visitor.d.ts +121 -0
- package/build/lowering/visitor.d.ts.map +1 -0
- package/build/lowering/visitor.js +165 -0
- package/build/lowering/visitor.js.map +1 -0
- package/build/pipeline/index.d.ts +84 -0
- package/build/pipeline/index.d.ts.map +1 -0
- package/build/pipeline/index.js +224 -0
- package/build/pipeline/index.js.map +1 -0
- package/build/polyfill-spec.d.ts +18 -0
- package/build/polyfill-spec.d.ts.map +1 -0
- package/build/polyfill-spec.js +26 -0
- package/build/polyfill-spec.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,565 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scope Analyzer - анализ областей видимости и захваченных переменных
|
|
3
|
+
*
|
|
4
|
+
* Определяет какие переменные используются во вложенных scopes (captured)
|
|
5
|
+
* и строит дерево scopes для генерации __env chain.
|
|
6
|
+
*
|
|
7
|
+
* @module analyzer
|
|
8
|
+
*/
|
|
9
|
+
import * as ts from "typescript";
|
|
10
|
+
import { BindingManager } from "../lowering/binding.js";
|
|
11
|
+
let scopeIdCounter = 0;
|
|
12
|
+
let currentBindings;
|
|
13
|
+
/**
|
|
14
|
+
* Анализирует scopes в исходном файле
|
|
15
|
+
* @param sourceFile - TypeScript source file
|
|
16
|
+
* @param bindings - Менеджер генерации имён (опциональный, создаётся если не передан)
|
|
17
|
+
*/
|
|
18
|
+
export function analyzeScopes(sourceFile, bindings = new BindingManager()) {
|
|
19
|
+
scopeIdCounter = 0;
|
|
20
|
+
currentBindings = bindings;
|
|
21
|
+
const moduleScope = {
|
|
22
|
+
id: scopeIdCounter++,
|
|
23
|
+
type: "module",
|
|
24
|
+
name: "__module",
|
|
25
|
+
parent: null,
|
|
26
|
+
children: [],
|
|
27
|
+
variables: new Map(),
|
|
28
|
+
node: sourceFile,
|
|
29
|
+
depth: 0,
|
|
30
|
+
hasCaptured: false,
|
|
31
|
+
};
|
|
32
|
+
const scopesById = new Map();
|
|
33
|
+
const nodeToScope = new Map();
|
|
34
|
+
const allVariables = [];
|
|
35
|
+
scopesById.set(moduleScope.id, moduleScope);
|
|
36
|
+
nodeToScope.set(sourceFile, moduleScope);
|
|
37
|
+
// Pass 1: Собираем все scopes и объявления переменных
|
|
38
|
+
collectScopesAndDeclarations(sourceFile, moduleScope, scopesById, nodeToScope, allVariables);
|
|
39
|
+
// Pass 1.5: Разрешаем конфликты между var (hoisted) и let/const (block-scoped)
|
|
40
|
+
// var hoists на function/module level, let/const остаются в block scope
|
|
41
|
+
// Если есть var X и let X в том же function/module — переименовываем let
|
|
42
|
+
resolveVarLetConflicts(moduleScope, allVariables);
|
|
43
|
+
// Регистрируем все имена из исходного кода в BindingManager
|
|
44
|
+
// чтобы избежать коллизий при генерации временных переменных
|
|
45
|
+
// Включаем и оригинальные имена, и переименованные
|
|
46
|
+
const sourceNames = allVariables.flatMap(v => v.renamedTo ? [v.name, v.renamedTo] : [v.name]);
|
|
47
|
+
bindings.registerSourceNames(sourceNames);
|
|
48
|
+
// Pass 2: Анализируем использования и помечаем captured
|
|
49
|
+
analyzeUsages(sourceFile, moduleScope, nodeToScope);
|
|
50
|
+
// Помечаем scopes которые содержат captured переменные
|
|
51
|
+
const capturedVariables = [];
|
|
52
|
+
for (const varInfo of allVariables) {
|
|
53
|
+
if (varInfo.isCaptured) {
|
|
54
|
+
capturedVariables.push(varInfo);
|
|
55
|
+
varInfo.declarationScope.hasCaptured = true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Pass 3: Пересчитываем depth с учётом hasCaptured
|
|
59
|
+
// depth увеличивается только при переходе к scope с hasCaptured
|
|
60
|
+
recalculateDepth(moduleScope, 0);
|
|
61
|
+
return { moduleScope, scopesById, nodeToScope, capturedVariables, bindings };
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Пересчитывает depth для всех scopes
|
|
65
|
+
* depth увеличивается только при переходе к scope с hasCaptured
|
|
66
|
+
* (scopes которые создают свой __env)
|
|
67
|
+
*/
|
|
68
|
+
function recalculateDepth(scope, currentDepth) {
|
|
69
|
+
scope.depth = currentDepth;
|
|
70
|
+
for (const child of scope.children) {
|
|
71
|
+
// Только scopes с hasCaptured создают свой __env
|
|
72
|
+
if (child.hasCaptured) {
|
|
73
|
+
recalculateDepth(child, currentDepth + 1);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
recalculateDepth(child, currentDepth);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Разрешает конфликты между var (hoisted) и let/const (block-scoped)
|
|
82
|
+
*
|
|
83
|
+
* В BorisScript нет block scope — все переменные становятся var.
|
|
84
|
+
* Если в одном function/module scope есть:
|
|
85
|
+
* - var X (hoisted на function/module level)
|
|
86
|
+
* - let X или const X в block scope
|
|
87
|
+
*
|
|
88
|
+
* То let/const должен быть переименован чтобы избежать конфликта.
|
|
89
|
+
*/
|
|
90
|
+
function resolveVarLetConflicts(moduleScope, allVariables) {
|
|
91
|
+
// Для каждого function/module scope собираем все var имена
|
|
92
|
+
const functionScopes = collectFunctionScopes(moduleScope);
|
|
93
|
+
for (const funcScope of functionScopes) {
|
|
94
|
+
// Собираем все var имена в этом function scope (включая hoisted из blocks)
|
|
95
|
+
const varNames = new Set();
|
|
96
|
+
collectVarNames(funcScope, varNames);
|
|
97
|
+
// Проверяем все let/const в block scopes внутри этой функции
|
|
98
|
+
renameConflictingLetConst(funcScope, varNames);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Собирает все function/module scopes (не block scopes)
|
|
103
|
+
*/
|
|
104
|
+
function collectFunctionScopes(scope) {
|
|
105
|
+
const result = [scope];
|
|
106
|
+
for (const child of scope.children) {
|
|
107
|
+
if (child.type === "function") {
|
|
108
|
+
result.push(...collectFunctionScopes(child));
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
// block scope — ищем функции внутри
|
|
112
|
+
result.push(...collectFunctionScopes(child));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return result.filter(s => s.type === "function" || s.type === "module");
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Собирает все var имена в scope и его children (var hoists)
|
|
119
|
+
*/
|
|
120
|
+
function collectVarNames(scope, varNames) {
|
|
121
|
+
for (const varInfo of scope.variables.values()) {
|
|
122
|
+
if (varInfo.kind === "var") {
|
|
123
|
+
varNames.add(varInfo.name);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
for (const child of scope.children) {
|
|
127
|
+
// var hoists из block scopes, но не из function scopes
|
|
128
|
+
if (child.type === "block") {
|
|
129
|
+
collectVarNames(child, varNames);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Переименовывает let/const которые конфликтуют с var
|
|
135
|
+
*/
|
|
136
|
+
function renameConflictingLetConst(scope, varNames) {
|
|
137
|
+
for (const varInfo of scope.variables.values()) {
|
|
138
|
+
if ((varInfo.kind === "const" || varInfo.kind === "let") && !varInfo.renamedTo) {
|
|
139
|
+
if (varNames.has(varInfo.name)) {
|
|
140
|
+
// Конфликт! Переименовываем let/const
|
|
141
|
+
varInfo.renamedTo = currentBindings.shadow(varInfo.name);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
for (const child of scope.children) {
|
|
146
|
+
// Рекурсивно проверяем children (кроме function — у них свой scope)
|
|
147
|
+
if (child.type !== "function") {
|
|
148
|
+
renameConflictingLetConst(child, varNames);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Pass 1: Собираем scopes и объявления
|
|
154
|
+
*/
|
|
155
|
+
function collectScopesAndDeclarations(node, currentScope, scopesById, nodeToScope, allVariables) {
|
|
156
|
+
// Function создаёт новый scope
|
|
157
|
+
if (ts.isFunctionDeclaration(node) ||
|
|
158
|
+
ts.isFunctionExpression(node) ||
|
|
159
|
+
ts.isArrowFunction(node) ||
|
|
160
|
+
ts.isMethodDeclaration(node)) {
|
|
161
|
+
const funcName = getFunctionName(node);
|
|
162
|
+
const funcScope = {
|
|
163
|
+
id: scopeIdCounter++,
|
|
164
|
+
type: "function",
|
|
165
|
+
name: funcName,
|
|
166
|
+
parent: currentScope,
|
|
167
|
+
children: [],
|
|
168
|
+
variables: new Map(),
|
|
169
|
+
node,
|
|
170
|
+
depth: currentScope.depth + 1,
|
|
171
|
+
hasCaptured: false,
|
|
172
|
+
};
|
|
173
|
+
currentScope.children.push(funcScope);
|
|
174
|
+
scopesById.set(funcScope.id, funcScope);
|
|
175
|
+
nodeToScope.set(node, funcScope);
|
|
176
|
+
// Регистрируем функцию как переменную в родительском scope (для FunctionDeclaration)
|
|
177
|
+
if (ts.isFunctionDeclaration(node) && funcName) {
|
|
178
|
+
registerVariable(currentScope, funcName, "function", allVariables);
|
|
179
|
+
}
|
|
180
|
+
// Параметры функции - в scope функции
|
|
181
|
+
if ("parameters" in node) {
|
|
182
|
+
for (const param of node.parameters) {
|
|
183
|
+
if (ts.isIdentifier(param.name)) {
|
|
184
|
+
registerVariable(funcScope, param.name.text, "parameter", allVariables);
|
|
185
|
+
}
|
|
186
|
+
// TODO: деструктуризация параметров
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Рекурсивно обрабатываем тело функции
|
|
190
|
+
if ("body" in node && node.body) {
|
|
191
|
+
ts.forEachChild(node.body, (child) => collectScopesAndDeclarations(child, funcScope, scopesById, nodeToScope, allVariables));
|
|
192
|
+
}
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
// Block statement (if body, while body, etc.) создаёт block scope для let/const
|
|
196
|
+
// Исключаем тела функций — они уже обработаны выше
|
|
197
|
+
if (ts.isBlock(node) && !isFunctionBody(node)) {
|
|
198
|
+
const blockScope = {
|
|
199
|
+
id: scopeIdCounter++,
|
|
200
|
+
type: "block",
|
|
201
|
+
name: `__block_${scopeIdCounter}`,
|
|
202
|
+
parent: currentScope,
|
|
203
|
+
children: [],
|
|
204
|
+
variables: new Map(),
|
|
205
|
+
node,
|
|
206
|
+
depth: currentScope.depth,
|
|
207
|
+
hasCaptured: false,
|
|
208
|
+
};
|
|
209
|
+
currentScope.children.push(blockScope);
|
|
210
|
+
scopesById.set(blockScope.id, blockScope);
|
|
211
|
+
nodeToScope.set(node, blockScope);
|
|
212
|
+
// Рекурсивно обрабатываем содержимое блока
|
|
213
|
+
ts.forEachChild(node, (child) => collectScopesAndDeclarations(child, blockScope, scopesById, nodeToScope, allVariables));
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
// Variable declarations
|
|
217
|
+
// var → hoistится в function/module scope
|
|
218
|
+
// let/const → остаётся в текущем scope (block scoping)
|
|
219
|
+
if (ts.isVariableStatement(node)) {
|
|
220
|
+
const declList = node.declarationList;
|
|
221
|
+
const kind = getVarKind(declList);
|
|
222
|
+
for (const decl of declList.declarations) {
|
|
223
|
+
if (ts.isIdentifier(decl.name)) {
|
|
224
|
+
// var hoistится, let/const остаётся в текущем scope
|
|
225
|
+
const targetScope = kind === "var"
|
|
226
|
+
? findFunctionOrModuleScope(currentScope)
|
|
227
|
+
: currentScope;
|
|
228
|
+
registerVariable(targetScope, decl.name.text, kind, allVariables);
|
|
229
|
+
}
|
|
230
|
+
else if (ts.isArrayBindingPattern(decl.name) || ts.isObjectBindingPattern(decl.name)) {
|
|
231
|
+
const targetScope = kind === "var"
|
|
232
|
+
? findFunctionOrModuleScope(currentScope)
|
|
233
|
+
: currentScope;
|
|
234
|
+
for (const element of decl.name.elements) {
|
|
235
|
+
if (ts.isBindingElement(element) && ts.isIdentifier(element.name)) {
|
|
236
|
+
registerVariable(targetScope, element.name.text, kind, allVariables);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
// For statement может объявлять переменную
|
|
243
|
+
if (ts.isForStatement(node) && node.initializer && ts.isVariableDeclarationList(node.initializer)) {
|
|
244
|
+
const kind = getVarKind(node.initializer);
|
|
245
|
+
for (const decl of node.initializer.declarations) {
|
|
246
|
+
if (ts.isIdentifier(decl.name)) {
|
|
247
|
+
// var hoistится, let/const остаётся в текущем scope
|
|
248
|
+
const targetScope = kind === "var"
|
|
249
|
+
? findFunctionOrModuleScope(currentScope)
|
|
250
|
+
: currentScope;
|
|
251
|
+
registerVariable(targetScope, decl.name.text, kind, allVariables);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// For-of/for-in statement создаёт block scope для тела цикла
|
|
256
|
+
// let/const item создаётся заново на каждой итерации
|
|
257
|
+
if ((ts.isForOfStatement(node) || ts.isForInStatement(node)) && ts.isVariableDeclarationList(node.initializer)) {
|
|
258
|
+
const kind = getVarKind(node.initializer);
|
|
259
|
+
if (kind === "var") {
|
|
260
|
+
// var hoistится в function scope
|
|
261
|
+
for (const decl of node.initializer.declarations) {
|
|
262
|
+
if (ts.isIdentifier(decl.name)) {
|
|
263
|
+
const targetScope = findFunctionOrModuleScope(currentScope);
|
|
264
|
+
registerVariable(targetScope, decl.name.text, kind, allVariables);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
// let/const создаёт block scope для per-iteration semantics
|
|
270
|
+
const loopBodyScope = {
|
|
271
|
+
id: scopeIdCounter++,
|
|
272
|
+
type: "block",
|
|
273
|
+
name: `__loop_${scopeIdCounter}`,
|
|
274
|
+
parent: currentScope,
|
|
275
|
+
children: [],
|
|
276
|
+
variables: new Map(),
|
|
277
|
+
node: node.statement, // Тело цикла
|
|
278
|
+
depth: currentScope.depth, // Block не увеличивает depth изначально
|
|
279
|
+
hasCaptured: false,
|
|
280
|
+
};
|
|
281
|
+
currentScope.children.push(loopBodyScope);
|
|
282
|
+
scopesById.set(loopBodyScope.id, loopBodyScope);
|
|
283
|
+
nodeToScope.set(node.statement, loopBodyScope);
|
|
284
|
+
// Регистрируем let/const переменную в block scope
|
|
285
|
+
for (const decl of node.initializer.declarations) {
|
|
286
|
+
if (ts.isIdentifier(decl.name)) {
|
|
287
|
+
registerVariable(loopBodyScope, decl.name.text, kind, allVariables);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
// Рекурсивно обрабатываем тело цикла в его scope
|
|
291
|
+
ts.forEachChild(node.statement, (child) => collectScopesAndDeclarations(child, loopBodyScope, scopesById, nodeToScope, allVariables));
|
|
292
|
+
return; // Не обрабатываем дальше, уже обработали тело цикла
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// Catch clause параметр
|
|
296
|
+
if (ts.isCatchClause(node) && node.variableDeclaration && ts.isIdentifier(node.variableDeclaration.name)) {
|
|
297
|
+
const targetScope = findFunctionOrModuleScope(currentScope);
|
|
298
|
+
registerVariable(targetScope, node.variableDeclaration.name.text, "var", allVariables);
|
|
299
|
+
}
|
|
300
|
+
// Import declarations — регистрируем импортированные имена в module scope (кроме type-only)
|
|
301
|
+
if (ts.isImportDeclaration(node)) {
|
|
302
|
+
const moduleSpecifier = node.moduleSpecifier;
|
|
303
|
+
if (!ts.isStringLiteral(moduleSpecifier)) {
|
|
304
|
+
ts.forEachChild(node, (child) => collectScopesAndDeclarations(child, currentScope, scopesById, nodeToScope, allVariables));
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
const targetScope = findFunctionOrModuleScope(currentScope);
|
|
308
|
+
if (node.importClause) {
|
|
309
|
+
// import X from "Y" — default import
|
|
310
|
+
if (node.importClause.name && !node.importClause.isTypeOnly) {
|
|
311
|
+
registerVariable(targetScope, node.importClause.name.text, "import", allVariables);
|
|
312
|
+
}
|
|
313
|
+
// import { a, b as c } or import type { X }
|
|
314
|
+
if (node.importClause.namedBindings && ts.isNamedImports(node.importClause.namedBindings)) {
|
|
315
|
+
for (const element of node.importClause.namedBindings.elements) {
|
|
316
|
+
if (!element.isTypeOnly) {
|
|
317
|
+
const localName = element.name.text;
|
|
318
|
+
registerVariable(targetScope, localName, "import", allVariables);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
// import * as ns from "Y"
|
|
323
|
+
if (node.importClause.namedBindings && ts.isNamespaceImport(node.importClause.namedBindings)) {
|
|
324
|
+
registerVariable(targetScope, node.importClause.namedBindings.name.text, "import", allVariables);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
// Рекурсивно обходим детей
|
|
330
|
+
ts.forEachChild(node, (child) => collectScopesAndDeclarations(child, currentScope, scopesById, nodeToScope, allVariables));
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Pass 2: Анализируем использования переменных
|
|
334
|
+
*/
|
|
335
|
+
function analyzeUsages(node, currentScope, nodeToScope) {
|
|
336
|
+
// Обновляем текущий scope если нода создаёт новый
|
|
337
|
+
// НО: block scopes (для циклов с let/const) НЕ меняют scope для usages
|
|
338
|
+
// Block scope нужен только для loop variable
|
|
339
|
+
const nodeScope = nodeToScope.get(node);
|
|
340
|
+
if (nodeScope && nodeScope !== currentScope && nodeScope.type !== "block") {
|
|
341
|
+
currentScope = nodeScope;
|
|
342
|
+
}
|
|
343
|
+
// Identifier usage
|
|
344
|
+
if (ts.isIdentifier(node)) {
|
|
345
|
+
// Пропускаем объявления, property names и т.д.
|
|
346
|
+
if (!isVariableUsage(node)) {
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
const name = node.text;
|
|
350
|
+
const varInfo = resolveVariable(name, currentScope);
|
|
351
|
+
if (varInfo) {
|
|
352
|
+
varInfo.usedInScopes.add(currentScope);
|
|
353
|
+
// Если используется в scope отличном от объявления - captured
|
|
354
|
+
if (varInfo.declarationScope !== currentScope) {
|
|
355
|
+
// Проверяем что currentScope вложен в declarationScope
|
|
356
|
+
if (isScopeNestedIn(currentScope, varInfo.declarationScope)) {
|
|
357
|
+
varInfo.isCaptured = true;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
ts.forEachChild(node, (child) => analyzeUsages(child, currentScope, nodeToScope));
|
|
363
|
+
}
|
|
364
|
+
// =========================================================================
|
|
365
|
+
// Helper functions
|
|
366
|
+
// =========================================================================
|
|
367
|
+
function getFunctionName(node) {
|
|
368
|
+
if (ts.isFunctionDeclaration(node) && node.name) {
|
|
369
|
+
return node.name.text;
|
|
370
|
+
}
|
|
371
|
+
if (ts.isMethodDeclaration(node) && ts.isIdentifier(node.name)) {
|
|
372
|
+
return node.name.text;
|
|
373
|
+
}
|
|
374
|
+
if (ts.isFunctionExpression(node) && node.name) {
|
|
375
|
+
return node.name.text;
|
|
376
|
+
}
|
|
377
|
+
return undefined;
|
|
378
|
+
}
|
|
379
|
+
function getVarKind(declList) {
|
|
380
|
+
if (declList.flags & ts.NodeFlags.Const)
|
|
381
|
+
return "const";
|
|
382
|
+
if (declList.flags & ts.NodeFlags.Let)
|
|
383
|
+
return "let";
|
|
384
|
+
return "var";
|
|
385
|
+
}
|
|
386
|
+
function findFunctionOrModuleScope(scope) {
|
|
387
|
+
let current = scope;
|
|
388
|
+
while (current) {
|
|
389
|
+
if (current.type === "function" || current.type === "module") {
|
|
390
|
+
return current;
|
|
391
|
+
}
|
|
392
|
+
current = current.parent;
|
|
393
|
+
}
|
|
394
|
+
return scope; // fallback
|
|
395
|
+
}
|
|
396
|
+
function registerVariable(scope, name, kind, allVariables) {
|
|
397
|
+
// Если переменная уже есть в этом scope - возвращаем её (дедупликация)
|
|
398
|
+
const existing = scope.variables.get(name);
|
|
399
|
+
if (existing) {
|
|
400
|
+
return existing;
|
|
401
|
+
}
|
|
402
|
+
// Проверяем shadowing — есть ли переменная с таким именем в parent scopes
|
|
403
|
+
// Для let/const в block scope нужно переименовать если есть shadowing
|
|
404
|
+
let renamedTo;
|
|
405
|
+
if (kind === "const" || kind === "let") {
|
|
406
|
+
const shadowedVar = findVariableInParentScopes(name, scope.parent);
|
|
407
|
+
if (shadowedVar) {
|
|
408
|
+
// Генерируем уникальное имя через BindingManager
|
|
409
|
+
renamedTo = currentBindings.shadow(name);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
const varInfo = {
|
|
413
|
+
name,
|
|
414
|
+
kind,
|
|
415
|
+
declarationScope: scope,
|
|
416
|
+
isCaptured: false,
|
|
417
|
+
usedInScopes: new Set(),
|
|
418
|
+
renamedTo,
|
|
419
|
+
};
|
|
420
|
+
scope.variables.set(name, varInfo);
|
|
421
|
+
allVariables.push(varInfo);
|
|
422
|
+
return varInfo;
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Ищет переменную в parent scopes (не в текущем)
|
|
426
|
+
*/
|
|
427
|
+
function findVariableInParentScopes(name, fromScope) {
|
|
428
|
+
let current = fromScope;
|
|
429
|
+
while (current) {
|
|
430
|
+
const varInfo = current.variables.get(name);
|
|
431
|
+
if (varInfo) {
|
|
432
|
+
return varInfo;
|
|
433
|
+
}
|
|
434
|
+
current = current.parent;
|
|
435
|
+
}
|
|
436
|
+
return null;
|
|
437
|
+
}
|
|
438
|
+
function resolveVariable(name, fromScope) {
|
|
439
|
+
// Ищем переменную вверх по цепочке scopes
|
|
440
|
+
let current = fromScope;
|
|
441
|
+
while (current) {
|
|
442
|
+
const varInfo = current.variables.get(name);
|
|
443
|
+
if (varInfo) {
|
|
444
|
+
return varInfo;
|
|
445
|
+
}
|
|
446
|
+
current = current.parent;
|
|
447
|
+
}
|
|
448
|
+
return null;
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Проверяет, является ли Block телом функции
|
|
452
|
+
*/
|
|
453
|
+
function isFunctionBody(node) {
|
|
454
|
+
const parent = node.parent;
|
|
455
|
+
return (ts.isFunctionDeclaration(parent) ||
|
|
456
|
+
ts.isFunctionExpression(parent) ||
|
|
457
|
+
ts.isArrowFunction(parent) ||
|
|
458
|
+
ts.isMethodDeclaration(parent) ||
|
|
459
|
+
ts.isConstructorDeclaration(parent) ||
|
|
460
|
+
ts.isGetAccessorDeclaration(parent) ||
|
|
461
|
+
ts.isSetAccessorDeclaration(parent));
|
|
462
|
+
}
|
|
463
|
+
function isScopeNestedIn(inner, outer) {
|
|
464
|
+
let current = inner.parent;
|
|
465
|
+
while (current) {
|
|
466
|
+
if (current === outer)
|
|
467
|
+
return true;
|
|
468
|
+
current = current.parent;
|
|
469
|
+
}
|
|
470
|
+
return false;
|
|
471
|
+
}
|
|
472
|
+
function isVariableUsage(node) {
|
|
473
|
+
const parent = node.parent;
|
|
474
|
+
// Не считаем использованием:
|
|
475
|
+
// - Имя в объявлении переменной
|
|
476
|
+
if (ts.isVariableDeclaration(parent) && parent.name === node)
|
|
477
|
+
return false;
|
|
478
|
+
// - Имя функции в объявлении
|
|
479
|
+
if (ts.isFunctionDeclaration(parent) && parent.name === node)
|
|
480
|
+
return false;
|
|
481
|
+
// - Имя параметра
|
|
482
|
+
if (ts.isParameter(parent) && parent.name === node)
|
|
483
|
+
return false;
|
|
484
|
+
// - Property name в object literal
|
|
485
|
+
if (ts.isPropertyAssignment(parent) && parent.name === node)
|
|
486
|
+
return false;
|
|
487
|
+
// - Shorthand property (но значение - использование)
|
|
488
|
+
if (ts.isShorthandPropertyAssignment(parent) && parent.name === node) {
|
|
489
|
+
// В shorthand `{ a }` - 'a' используется как значение
|
|
490
|
+
return true;
|
|
491
|
+
}
|
|
492
|
+
// - Method name
|
|
493
|
+
if (ts.isMethodDeclaration(parent) && parent.name === node)
|
|
494
|
+
return false;
|
|
495
|
+
// - Property access .name
|
|
496
|
+
if (ts.isPropertyAccessExpression(parent) && parent.name === node)
|
|
497
|
+
return false;
|
|
498
|
+
// - Import/export specifiers
|
|
499
|
+
if (ts.isImportSpecifier(parent) || ts.isExportSpecifier(parent))
|
|
500
|
+
return false;
|
|
501
|
+
// - Type references
|
|
502
|
+
if (ts.isTypeReferenceNode(parent))
|
|
503
|
+
return false;
|
|
504
|
+
// - Labeled statement
|
|
505
|
+
if (ts.isLabeledStatement(parent) && parent.label === node)
|
|
506
|
+
return false;
|
|
507
|
+
// - Break/continue label
|
|
508
|
+
if ((ts.isBreakStatement(parent) || ts.isContinueStatement(parent)) && parent.label === node)
|
|
509
|
+
return false;
|
|
510
|
+
return true;
|
|
511
|
+
}
|
|
512
|
+
// =========================================================================
|
|
513
|
+
// Debug utilities
|
|
514
|
+
// =========================================================================
|
|
515
|
+
/**
|
|
516
|
+
* Выводит дерево scopes в консоль (для отладки)
|
|
517
|
+
*/
|
|
518
|
+
export function printScopeTree(scope, indent = 0) {
|
|
519
|
+
const pad = " ".repeat(indent);
|
|
520
|
+
const vars = Array.from(scope.variables.values());
|
|
521
|
+
const capturedVars = vars.filter((v) => v.isCaptured).map((v) => `${v.name}*`);
|
|
522
|
+
const normalVars = vars.filter((v) => !v.isCaptured).map((v) => v.name);
|
|
523
|
+
console.log(`${pad}[${scope.type}] ${scope.name || ""} (depth=${scope.depth})`);
|
|
524
|
+
if (normalVars.length)
|
|
525
|
+
console.log(`${pad} vars: ${normalVars.join(", ")}`);
|
|
526
|
+
if (capturedVars.length)
|
|
527
|
+
console.log(`${pad} CAPTURED: ${capturedVars.join(", ")}`);
|
|
528
|
+
for (const child of scope.children) {
|
|
529
|
+
printScopeTree(child, indent + 1);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
/**
|
|
533
|
+
* Вычисляет глубину __env chain между двумя scopes
|
|
534
|
+
* Используется для генерации __env.__parent.__parent...
|
|
535
|
+
*
|
|
536
|
+
* Считает только scopes с hasCaptured (которые создают свой __env)
|
|
537
|
+
*/
|
|
538
|
+
export function getEnvDepth(fromScope, toScope) {
|
|
539
|
+
let depth = 0;
|
|
540
|
+
let current = fromScope;
|
|
541
|
+
while (current && current !== toScope) {
|
|
542
|
+
// Считаем только scopes которые создают свой __env
|
|
543
|
+
if (current.hasCaptured) {
|
|
544
|
+
depth++;
|
|
545
|
+
}
|
|
546
|
+
current = current.parent;
|
|
547
|
+
}
|
|
548
|
+
return depth;
|
|
549
|
+
}
|
|
550
|
+
/**
|
|
551
|
+
* Глубина до root __env для lib (__codelibrary).
|
|
552
|
+
* Считает только block scopes — в module mode function env не создаётся.
|
|
553
|
+
*/
|
|
554
|
+
export function getCodelibraryDepth(fromScope, toScope) {
|
|
555
|
+
let depth = 0;
|
|
556
|
+
let current = fromScope;
|
|
557
|
+
while (current && current !== toScope) {
|
|
558
|
+
if (current.type === "block" && current.hasCaptured) {
|
|
559
|
+
depth++;
|
|
560
|
+
}
|
|
561
|
+
current = current.parent;
|
|
562
|
+
}
|
|
563
|
+
return depth;
|
|
564
|
+
}
|
|
565
|
+
//# sourceMappingURL=scope-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-analyzer.js","sourceRoot":"","sources":["../../src/analyzer/scope-analyzer.ts"],"names":[],"mappings":"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"}
|
package/build/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;GAMG"}
|