@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,72 @@
1
+ /**
2
+ * Bare Mode Visitors — упрощённые visitors для режима bare
3
+ *
4
+ * В bare mode транспиляция почти 1:1:
5
+ * - let/const → var
6
+ * - Типы и импорты вырезаются
7
+ * - Функции остаются с оригинальной сигнатурой (без __env/__this/__args)
8
+ * - Нет captured variables, env/desc, bt.getProperty/bt.setProperty
9
+ * - export namespace X { ... } → "META:NAMESPACE:X"; + содержимое наружу
10
+ *
11
+ * @module lowering/bare-visitors
12
+ */
13
+ import * as ts from "typescript";
14
+ import { type IRStatement, type IRExpression } from "../ir/index.ts";
15
+ import type { VisitorContext } from "./visitor.ts";
16
+ /**
17
+ * Обрабатывает объявление функции в bare mode.
18
+ * Генерирует plain function с оригинальными параметрами, без env/desc.
19
+ *
20
+ * @param node - TypeScript FunctionDeclaration
21
+ * @param ctx - VisitorContext (mode === "bare")
22
+ * @returns IR statements (одно объявление функции)
23
+ */
24
+ export declare function visitBareFunctionDeclaration(node: ts.FunctionDeclaration, ctx: VisitorContext): IRStatement[] | null;
25
+ /**
26
+ * Обрабатывает объявление переменной в bare mode.
27
+ * Просто генерирует var name = init; без captured/env логики.
28
+ *
29
+ * @param node - TypeScript VariableStatement
30
+ * @param ctx - VisitorContext (mode === "bare")
31
+ * @returns IR statements
32
+ */
33
+ export declare function visitBareVariableStatement(node: ts.VariableStatement, ctx: VisitorContext): IRStatement | IRStatement[] | null;
34
+ /**
35
+ * Обрабатывает export namespace X { ... } в bare mode.
36
+ * Генерирует "META:NAMESPACE:X"; + все statements из тела namespace.
37
+ *
38
+ * @param node - TypeScript ModuleDeclaration
39
+ * @param ctx - VisitorContext (mode === "bare")
40
+ * @returns IR statements
41
+ */
42
+ export declare function visitBareNamespaceDeclaration(node: ts.ModuleDeclaration, ctx: VisitorContext): IRStatement[] | null;
43
+ /**
44
+ * Обрабатывает arrow function в bare mode.
45
+ * Генерирует plain function с оригинальными параметрами.
46
+ * Arrow → именованная функция, hoisted в pendingStatements.
47
+ *
48
+ * @param node - TypeScript ArrowFunction
49
+ * @param ctx - VisitorContext (mode === "bare")
50
+ * @returns IR expression (ссылка на имя функции)
51
+ */
52
+ export declare function visitBareArrowFunction(node: ts.ArrowFunction, ctx: VisitorContext): IRExpression;
53
+ /**
54
+ * Обрабатывает function expression в bare mode.
55
+ * Генерирует plain function, hoisted в pendingStatements.
56
+ *
57
+ * @param node - TypeScript FunctionExpression
58
+ * @param ctx - VisitorContext (mode === "bare")
59
+ * @returns IR expression (ссылка на имя функции)
60
+ */
61
+ export declare function visitBareFunctionExpression(node: ts.FunctionExpression, ctx: VisitorContext): IRExpression;
62
+ /**
63
+ * Обрабатывает метод объекта в bare mode.
64
+ * Генерирует plain function, hoisted в pendingStatements.
65
+ * Возвращает имя функции для использования в свойстве объекта.
66
+ *
67
+ * @param prop - TypeScript MethodDeclaration
68
+ * @param ctx - VisitorContext (mode === "bare")
69
+ * @returns имя сгенерированной функции
70
+ */
71
+ export declare function visitBareObjectMethod(prop: ts.MethodDeclaration, ctx: VisitorContext): string;
72
+ //# sourceMappingURL=bare-visitors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bare-visitors.d.ts","sourceRoot":"","sources":["../../src/lowering/bare-visitors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,YAAY,EAElB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AASnD;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,EAAE,CAAC,mBAAmB,EAC5B,GAAG,EAAE,cAAc,GAClB,WAAW,EAAE,GAAG,IAAI,CA0BtB;AAMD;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAC1B,GAAG,EAAE,cAAc,GAClB,WAAW,GAAG,WAAW,EAAE,GAAG,IAAI,CAgEpC;AAMD;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAC1B,GAAG,EAAE,cAAc,GAClB,WAAW,EAAE,GAAG,IAAI,CAsBtB;AAMD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,EAAE,CAAC,aAAa,EACtB,GAAG,EAAE,cAAc,GAClB,YAAY,CA0Bd;AAMD;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,EAAE,CAAC,kBAAkB,EAC3B,GAAG,EAAE,cAAc,GAClB,YAAY,CAoBd;AAMD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAC1B,GAAG,EAAE,cAAc,GAClB,MAAM,CAqBR"}
@@ -0,0 +1,287 @@
1
+ /**
2
+ * Bare Mode Visitors — упрощённые visitors для режима bare
3
+ *
4
+ * В bare mode транспиляция почти 1:1:
5
+ * - let/const → var
6
+ * - Типы и импорты вырезаются
7
+ * - Функции остаются с оригинальной сигнатурой (без __env/__this/__args)
8
+ * - Нет captured variables, env/desc, bt.getProperty/bt.setProperty
9
+ * - export namespace X { ... } → "META:NAMESPACE:X"; + содержимое наружу
10
+ *
11
+ * @module lowering/bare-visitors
12
+ */
13
+ import * as ts from "typescript";
14
+ import { IR, } from "../ir/index.js";
15
+ import { visitExpression } from "./expressions.js";
16
+ import { visitStatementList, visitStatement } from "./statements.js";
17
+ import { getLoc } from "./helpers.js";
18
+ // ============================================================================
19
+ // Bare Function Declaration
20
+ // ============================================================================
21
+ /**
22
+ * Обрабатывает объявление функции в bare mode.
23
+ * Генерирует plain function с оригинальными параметрами, без env/desc.
24
+ *
25
+ * @param node - TypeScript FunctionDeclaration
26
+ * @param ctx - VisitorContext (mode === "bare")
27
+ * @returns IR statements (одно объявление функции)
28
+ */
29
+ export function visitBareFunctionDeclaration(node, ctx) {
30
+ if (!node.name || !node.body) {
31
+ return null;
32
+ }
33
+ const name = node.name.text;
34
+ const params = collectBareParams(node.parameters, ctx);
35
+ // Создаём дочерний контекст без captured/env логики
36
+ const fnCtx = createBareFnCtx(node, ctx);
37
+ // Регистрируем параметры для дочернего контекста (не используется в bare,
38
+ // но нужно чтобы visitIdentifier не ломался)
39
+ node.parameters.forEach((param, index) => {
40
+ if (ts.isIdentifier(param.name)) {
41
+ fnCtx.functionParams.set(param.name.text, index);
42
+ }
43
+ });
44
+ const body = visitStatementList(node.body.statements, fnCtx);
45
+ // pending statements из тела (вложенные функции и т.п.)
46
+ const fullBody = fnCtx.pendingStatements.length > 0
47
+ ? [...fnCtx.pendingStatements, ...body]
48
+ : body;
49
+ return [IR.functionDecl(name, params, fullBody, getLoc(node, ctx), true)];
50
+ }
51
+ // ============================================================================
52
+ // Bare Variable Statement
53
+ // ============================================================================
54
+ /**
55
+ * Обрабатывает объявление переменной в bare mode.
56
+ * Просто генерирует var name = init; без captured/env логики.
57
+ *
58
+ * @param node - TypeScript VariableStatement
59
+ * @param ctx - VisitorContext (mode === "bare")
60
+ * @returns IR statements
61
+ */
62
+ export function visitBareVariableStatement(node, ctx) {
63
+ // Ambient declarations (declare var/let/const) — strip completely
64
+ if (node.modifiers?.some(m => m.kind === ts.SyntaxKind.DeclareKeyword)) {
65
+ return null;
66
+ }
67
+ const results = [];
68
+ for (const decl of node.declarationList.declarations) {
69
+ if (ts.isIdentifier(decl.name)) {
70
+ const varName = decl.name.text;
71
+ const init = decl.initializer ? visitExpression(decl.initializer, ctx) : null;
72
+ results.push(IR.varDecl(varName, init, getLoc(decl, ctx)));
73
+ }
74
+ // Деструктуризация объекта: const { a, b } = obj
75
+ else if (ts.isObjectBindingPattern(decl.name) && decl.initializer) {
76
+ const init = visitExpression(decl.initializer, ctx);
77
+ for (const element of decl.name.elements) {
78
+ if (ts.isBindingElement(element) && ts.isIdentifier(element.name)) {
79
+ if (element.dotDotDotToken) {
80
+ // rest не поддерживается в bare
81
+ continue;
82
+ }
83
+ const propertyName = element.propertyName
84
+ ? element.propertyName.text
85
+ : element.name.text;
86
+ const variableName = element.name.text;
87
+ const val = IR.dot(init, propertyName, getLoc(decl, ctx));
88
+ const initExpr = element.initializer
89
+ ? IR.conditional(IR.binary("!==", val, IR.id("undefined")), val, visitExpression(element.initializer, ctx), getLoc(decl, ctx))
90
+ : val;
91
+ results.push(IR.varDecl(variableName, initExpr, getLoc(decl, ctx)));
92
+ }
93
+ }
94
+ }
95
+ // Деструктуризация массива: const [a, b] = arr
96
+ else if (ts.isArrayBindingPattern(decl.name) && decl.initializer) {
97
+ const init = visitExpression(decl.initializer, ctx);
98
+ let index = 0;
99
+ for (const element of decl.name.elements) {
100
+ if (ts.isOmittedExpression(element)) {
101
+ index++;
102
+ continue;
103
+ }
104
+ if (ts.isBindingElement(element) && ts.isIdentifier(element.name)) {
105
+ if (element.dotDotDotToken) {
106
+ // rest не поддерживается в bare
107
+ continue;
108
+ }
109
+ const variableName = element.name.text;
110
+ const val = IR.member(IR.id("__arr"), IR.number(index), true, getLoc(decl, ctx));
111
+ results.push(IR.varDecl(variableName, val, getLoc(decl, ctx)));
112
+ index++;
113
+ }
114
+ }
115
+ }
116
+ }
117
+ return results.length === 1 ? results[0] : results;
118
+ }
119
+ // ============================================================================
120
+ // Bare Namespace Declaration
121
+ // ============================================================================
122
+ /**
123
+ * Обрабатывает export namespace X { ... } в bare mode.
124
+ * Генерирует "META:NAMESPACE:X"; + все statements из тела namespace.
125
+ *
126
+ * @param node - TypeScript ModuleDeclaration
127
+ * @param ctx - VisitorContext (mode === "bare")
128
+ * @returns IR statements
129
+ */
130
+ export function visitBareNamespaceDeclaration(node, ctx) {
131
+ const name = node.name.text;
132
+ const results = [];
133
+ // "META:NAMESPACE:<name>";
134
+ results.push(IR.exprStmt(IR.string(`META:NAMESPACE:${name}`)));
135
+ // Извлекаем содержимое тела namespace
136
+ if (node.body && ts.isModuleBlock(node.body)) {
137
+ for (const statement of node.body.statements) {
138
+ const irNodes = visitStatement(statement, ctx);
139
+ if (irNodes) {
140
+ if (Array.isArray(irNodes)) {
141
+ results.push(...irNodes);
142
+ }
143
+ else {
144
+ results.push(irNodes);
145
+ }
146
+ }
147
+ }
148
+ }
149
+ return results;
150
+ }
151
+ // ============================================================================
152
+ // Bare Arrow Function
153
+ // ============================================================================
154
+ /**
155
+ * Обрабатывает arrow function в bare mode.
156
+ * Генерирует plain function с оригинальными параметрами.
157
+ * Arrow → именованная функция, hoisted в pendingStatements.
158
+ *
159
+ * @param node - TypeScript ArrowFunction
160
+ * @param ctx - VisitorContext (mode === "bare")
161
+ * @returns IR expression (ссылка на имя функции)
162
+ */
163
+ export function visitBareArrowFunction(node, ctx) {
164
+ const params = collectBareParams(node.parameters, ctx);
165
+ const funcName = ctx.bindings.create("arrow");
166
+ const fnCtx = createBareFnCtx(node, ctx);
167
+ node.parameters.forEach((param, index) => {
168
+ if (ts.isIdentifier(param.name)) {
169
+ fnCtx.functionParams.set(param.name.text, index);
170
+ }
171
+ });
172
+ let body;
173
+ if (ts.isBlock(node.body)) {
174
+ body = visitStatementList(node.body.statements, fnCtx);
175
+ }
176
+ else {
177
+ body = [IR.return(visitExpression(node.body, fnCtx))];
178
+ }
179
+ if (fnCtx.pendingStatements.length > 0) {
180
+ body = [...fnCtx.pendingStatements, ...body];
181
+ }
182
+ const funcDecl = IR.functionDecl(funcName, params, body, getLoc(node, ctx), true);
183
+ ctx.pendingStatements.push(funcDecl);
184
+ return IR.id(funcName, getLoc(node, ctx));
185
+ }
186
+ // ============================================================================
187
+ // Bare Function Expression
188
+ // ============================================================================
189
+ /**
190
+ * Обрабатывает function expression в bare mode.
191
+ * Генерирует plain function, hoisted в pendingStatements.
192
+ *
193
+ * @param node - TypeScript FunctionExpression
194
+ * @param ctx - VisitorContext (mode === "bare")
195
+ * @returns IR expression (ссылка на имя функции)
196
+ */
197
+ export function visitBareFunctionExpression(node, ctx) {
198
+ const name = node.name?.text ?? ctx.bindings.create("func");
199
+ const params = collectBareParams(node.parameters, ctx);
200
+ const fnCtx = createBareFnCtx(node, ctx);
201
+ node.parameters.forEach((param, index) => {
202
+ if (ts.isIdentifier(param.name)) {
203
+ fnCtx.functionParams.set(param.name.text, index);
204
+ }
205
+ });
206
+ let body = node.body ? visitStatementList(node.body.statements, fnCtx) : [];
207
+ if (fnCtx.pendingStatements.length > 0) {
208
+ body = [...fnCtx.pendingStatements, ...body];
209
+ }
210
+ const funcDecl = IR.functionDecl(name, params, body, getLoc(node, ctx), true);
211
+ ctx.pendingStatements.push(funcDecl);
212
+ return IR.id(name, getLoc(node, ctx));
213
+ }
214
+ // ============================================================================
215
+ // Bare Object Method
216
+ // ============================================================================
217
+ /**
218
+ * Обрабатывает метод объекта в bare mode.
219
+ * Генерирует plain function, hoisted в pendingStatements.
220
+ * Возвращает имя функции для использования в свойстве объекта.
221
+ *
222
+ * @param prop - TypeScript MethodDeclaration
223
+ * @param ctx - VisitorContext (mode === "bare")
224
+ * @returns имя сгенерированной функции
225
+ */
226
+ export function visitBareObjectMethod(prop, ctx) {
227
+ const methodName = prop.name.text;
228
+ const funcName = ctx.bindings.create(`${methodName}__method`);
229
+ const params = collectBareParams(prop.parameters, ctx);
230
+ const fnCtx = createBareFnCtx(prop, ctx);
231
+ prop.parameters.forEach((param, index) => {
232
+ if (ts.isIdentifier(param.name)) {
233
+ fnCtx.functionParams.set(param.name.text, index);
234
+ }
235
+ });
236
+ let body = prop.body ? visitStatementList(prop.body.statements, fnCtx) : [];
237
+ if (fnCtx.pendingStatements.length > 0) {
238
+ body = [...fnCtx.pendingStatements, ...body];
239
+ }
240
+ const funcDecl = IR.functionDecl(funcName, params, body, getLoc(prop, ctx), true);
241
+ ctx.pendingStatements.push(funcDecl);
242
+ return funcName;
243
+ }
244
+ // ============================================================================
245
+ // Helpers
246
+ // ============================================================================
247
+ /**
248
+ * Собирает параметры функции для bare mode (оригинальные имена, без __env/__this/__args)
249
+ */
250
+ function collectBareParams(parameters, ctx) {
251
+ const params = [];
252
+ for (const param of parameters) {
253
+ if (ts.isIdentifier(param.name)) {
254
+ const defaultValue = param.initializer
255
+ ? visitExpression(param.initializer, ctx)
256
+ : undefined;
257
+ const isRest = !!param.dotDotDotToken;
258
+ params.push(IR.param(param.name.text, defaultValue, isRest));
259
+ }
260
+ }
261
+ return params;
262
+ }
263
+ /**
264
+ * Создаёт дочерний VisitorContext для bare mode функции.
265
+ * Без captured variables, env/desc и прочей логики script/module режимов.
266
+ */
267
+ function createBareFnCtx(node, ctx) {
268
+ const funcScope = ctx.scopeAnalysis.nodeToScope.get(node) || ctx.currentScope;
269
+ return {
270
+ mode: ctx.mode,
271
+ functionParams: new Map(),
272
+ hoistedFunctions: [],
273
+ typeChecker: ctx.typeChecker,
274
+ sourceFile: ctx.sourceFile,
275
+ bindings: ctx.bindings,
276
+ scopeAnalysis: ctx.scopeAnalysis,
277
+ currentScope: funcScope,
278
+ pendingStatements: [],
279
+ currentEnvRef: "__env",
280
+ currentEnvScope: funcScope,
281
+ xmlDocumentSymbol: ctx.xmlDocumentSymbol,
282
+ xmlElemSymbol: ctx.xmlElemSymbol,
283
+ importBindings: ctx.importBindings,
284
+ helperFlags: ctx.helperFlags,
285
+ };
286
+ }
287
+ //# sourceMappingURL=bare-visitors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bare-visitors.js","sourceRoot":"","sources":["../../src/lowering/bare-visitors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Binding Manager - централизованная генерация уникальных имён
3
+ *
4
+ * Обеспечивает единый механизм для:
5
+ * - Генерации имён для временных переменных (__tmp0, __arr1, ...)
6
+ * - Генерации имён для анонимных функций (__arrow0, __func1, ...)
7
+ * - Переименования shadowed переменных (a → a__0, a__1, ...)
8
+ * - Защиты от коллизий с именами из исходного кода
9
+ *
10
+ * @module lowering/binding
11
+ */
12
+ /**
13
+ * Менеджер генерации уникальных имён
14
+ *
15
+ * Все сгенерированные имена гарантированно уникальны в пределах
16
+ * одного экземпляра менеджера и не конфликтуют с именами из исходного кода.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const bindings = new BindingManager();
21
+ * bindings.registerSourceNames(["__item", "foo", "bar"]);
22
+ *
23
+ * bindings.create("item"); // "__item0" (если __item0 не занято)
24
+ * bindings.create("arrow"); // "__arrow0"
25
+ * bindings.create("arrow"); // "__arrow1"
26
+ * bindings.temp(); // "__tmp0"
27
+ * bindings.shadow("x"); // "x__0"
28
+ * ```
29
+ */
30
+ export declare class BindingManager {
31
+ /** Счётчики для каждого префикса */
32
+ private counters;
33
+ /** Имена из исходного кода (для проверки коллизий) */
34
+ private sourceNames;
35
+ /** Все сгенерированные имена (для проверки коллизий) */
36
+ private generatedNames;
37
+ /**
38
+ * Регистрирует имена из исходного кода для проверки коллизий
39
+ *
40
+ * @param names - Массив имён переменных/функций из исходного файла
41
+ */
42
+ registerSourceNames(names: Iterable<string>): void;
43
+ /**
44
+ * Проверяет, занято ли имя (в исходнике или уже сгенерировано)
45
+ */
46
+ private isNameTaken;
47
+ /**
48
+ * Создаёт уникальное имя с заданным префиксом
49
+ *
50
+ * Гарантирует что имя не конфликтует с:
51
+ * - Именами из исходного кода
52
+ * - Ранее сгенерированными именами
53
+ *
54
+ * @param prefix - Префикс имени (без __)
55
+ * @returns Уникальное имя вида __prefix0, __prefix1, ...
56
+ *
57
+ * @example
58
+ * bindings.create("arrow") // "__arrow0"
59
+ * bindings.create("obj") // "__obj0"
60
+ */
61
+ create(prefix: string): string;
62
+ /**
63
+ * Создаёт уникальное имя для временной переменной
64
+ *
65
+ * @returns Уникальное имя вида __tmp0, __tmp1, ...
66
+ */
67
+ temp(): string;
68
+ /**
69
+ * Создаёт уникальное имя для shadowed переменной
70
+ *
71
+ * Используется когда let/const во вложенном блоке перекрывает
72
+ * переменную из внешнего scope.
73
+ *
74
+ * @param original - Оригинальное имя переменной
75
+ * @returns Уникальное имя вида original__0, original__1, ...
76
+ *
77
+ * @example
78
+ * bindings.shadow("a") // "a__0"
79
+ * bindings.shadow("a") // "a__1"
80
+ * bindings.shadow("b") // "b__0"
81
+ */
82
+ shadow(original: string): string;
83
+ /**
84
+ * Создаёт уникальное имя для env переменной функции
85
+ *
86
+ * @param funcName - Имя функции
87
+ * @returns Имя env вида funcName_env
88
+ */
89
+ envName(funcName: string): string;
90
+ /**
91
+ * Создаёт уникальное имя для descriptor функции
92
+ *
93
+ * @param funcName - Имя функции
94
+ * @returns Имя descriptor вида funcName_desc
95
+ */
96
+ descName(funcName: string): string;
97
+ /**
98
+ * Создаёт уникальное имя для hoisted вложенной функции (module mode)
99
+ *
100
+ * @param originalName - Оригинальное имя функции
101
+ * @returns Уникальное имя вида __hoisted_originalName_N
102
+ */
103
+ hoistedName(originalName: string): string;
104
+ /**
105
+ * Сбрасывает все счётчики и имена (для тестирования)
106
+ */
107
+ reset(): void;
108
+ /**
109
+ * Получает текущее значение счётчика (для отладки)
110
+ */
111
+ getCount(prefix: string): number;
112
+ }
113
+ /**
114
+ * Получает текущий BindingManager
115
+ * @throws Если менеджер не инициализирован
116
+ */
117
+ export declare function getBindings(): BindingManager;
118
+ /**
119
+ * Инициализирует новый BindingManager для компиляции
120
+ * @returns Созданный менеджер
121
+ */
122
+ export declare function initBindings(): BindingManager;
123
+ /**
124
+ * Создаёт изолированный BindingManager (для тестов)
125
+ */
126
+ export declare function createBindings(): BindingManager;
127
+ //# sourceMappingURL=binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../../src/lowering/binding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,cAAc;IACzB,oCAAoC;IACpC,OAAO,CAAC,QAAQ,CAAkC;IAElD,sDAAsD;IACtD,OAAO,CAAC,WAAW,CAA0B;IAE7C,wDAAwD;IACxD,OAAO,CAAC,cAAc,CAA0B;IAEhD;;;;OAIG;IACH,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI;IAMlD;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAe9B;;;;OAIG;IACH,IAAI,IAAI,MAAM;IAId;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAgBhC;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIjC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIlC;;;;;OAKG;IACH,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAazC;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAGjC;AAQD;;;GAGG;AACH,wBAAgB,WAAW,IAAI,cAAc,CAK5C;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,cAAc,CAG7C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,cAAc,CAE/C"}