@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.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +338 -0
  3. package/build/analyzer/index.d.ts +7 -0
  4. package/build/analyzer/index.d.ts.map +1 -0
  5. package/build/analyzer/index.js +7 -0
  6. package/build/analyzer/index.js.map +1 -0
  7. package/build/analyzer/scope-analyzer.d.ts +88 -0
  8. package/build/analyzer/scope-analyzer.d.ts.map +1 -0
  9. package/build/analyzer/scope-analyzer.js +565 -0
  10. package/build/analyzer/scope-analyzer.js.map +1 -0
  11. package/build/cli.d.ts +10 -0
  12. package/build/cli.d.ts.map +1 -0
  13. package/build/cli.js +96 -0
  14. package/build/cli.js.map +1 -0
  15. package/build/emitter/bt-emitter.d.ts +31 -0
  16. package/build/emitter/bt-emitter.d.ts.map +1 -0
  17. package/build/emitter/bt-emitter.js +919 -0
  18. package/build/emitter/bt-emitter.js.map +1 -0
  19. package/build/emitter/index.d.ts +7 -0
  20. package/build/emitter/index.d.ts.map +1 -0
  21. package/build/emitter/index.js +7 -0
  22. package/build/emitter/index.js.map +1 -0
  23. package/build/index.d.ts +25 -0
  24. package/build/index.d.ts.map +1 -0
  25. package/build/index.js +24 -0
  26. package/build/index.js.map +1 -0
  27. package/build/ir/builders.d.ts +235 -0
  28. package/build/ir/builders.d.ts.map +1 -0
  29. package/build/ir/builders.js +387 -0
  30. package/build/ir/builders.js.map +1 -0
  31. package/build/ir/index.d.ts +8 -0
  32. package/build/ir/index.d.ts.map +1 -0
  33. package/build/ir/index.js +8 -0
  34. package/build/ir/index.js.map +1 -0
  35. package/build/ir/nodes.d.ts +596 -0
  36. package/build/ir/nodes.d.ts.map +1 -0
  37. package/build/ir/nodes.js +16 -0
  38. package/build/ir/nodes.js.map +1 -0
  39. package/build/lowering/bare-visitors.d.ts +72 -0
  40. package/build/lowering/bare-visitors.d.ts.map +1 -0
  41. package/build/lowering/bare-visitors.js +287 -0
  42. package/build/lowering/bare-visitors.js.map +1 -0
  43. package/build/lowering/binding.d.ts +127 -0
  44. package/build/lowering/binding.d.ts.map +1 -0
  45. package/build/lowering/binding.js +194 -0
  46. package/build/lowering/binding.js.map +1 -0
  47. package/build/lowering/expressions.d.ts +106 -0
  48. package/build/lowering/expressions.d.ts.map +1 -0
  49. package/build/lowering/expressions.js +1172 -0
  50. package/build/lowering/expressions.js.map +1 -0
  51. package/build/lowering/function-builder.d.ts +111 -0
  52. package/build/lowering/function-builder.d.ts.map +1 -0
  53. package/build/lowering/function-builder.js +111 -0
  54. package/build/lowering/function-builder.js.map +1 -0
  55. package/build/lowering/helpers.d.ts +88 -0
  56. package/build/lowering/helpers.d.ts.map +1 -0
  57. package/build/lowering/helpers.js +347 -0
  58. package/build/lowering/helpers.js.map +1 -0
  59. package/build/lowering/index.d.ts +21 -0
  60. package/build/lowering/index.d.ts.map +1 -0
  61. package/build/lowering/index.js +28 -0
  62. package/build/lowering/index.js.map +1 -0
  63. package/build/lowering/precedence.d.ts +18 -0
  64. package/build/lowering/precedence.d.ts.map +1 -0
  65. package/build/lowering/precedence.js +104 -0
  66. package/build/lowering/precedence.js.map +1 -0
  67. package/build/lowering/spread-helpers.d.ts +12 -0
  68. package/build/lowering/spread-helpers.d.ts.map +1 -0
  69. package/build/lowering/spread-helpers.js +32 -0
  70. package/build/lowering/spread-helpers.js.map +1 -0
  71. package/build/lowering/statements.d.ts +85 -0
  72. package/build/lowering/statements.d.ts.map +1 -0
  73. package/build/lowering/statements.js +713 -0
  74. package/build/lowering/statements.js.map +1 -0
  75. package/build/lowering/visitor.d.ts +121 -0
  76. package/build/lowering/visitor.d.ts.map +1 -0
  77. package/build/lowering/visitor.js +165 -0
  78. package/build/lowering/visitor.js.map +1 -0
  79. package/build/pipeline/index.d.ts +84 -0
  80. package/build/pipeline/index.d.ts.map +1 -0
  81. package/build/pipeline/index.js +224 -0
  82. package/build/pipeline/index.js.map +1 -0
  83. package/build/polyfill-spec.d.ts +18 -0
  84. package/build/polyfill-spec.d.ts.map +1 -0
  85. package/build/polyfill-spec.js +26 -0
  86. package/build/polyfill-spec.js.map +1 -0
  87. 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,10 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI entry point for bt-ir compiler
4
+ *
5
+ * Usage:
6
+ * node --experimental-strip-types src/cli.ts <file.ts>
7
+ * npm test <file.ts>
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;GAMG"}