numtypes 0.0.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/CHANGELOG.md +6 -0
  2. package/LICENSE +12 -0
  3. package/LICENSE-APACHE +201 -0
  4. package/LICENSE-MIT +21 -0
  5. package/README.md +652 -0
  6. package/dist/lib/index.d.ts +22 -0
  7. package/dist/lib/index.d.ts.map +1 -0
  8. package/dist/lib/index.js +2 -0
  9. package/dist/lib/index.js.map +1 -0
  10. package/dist/transformer/analyze/analyze-source-file.d.ts +15 -0
  11. package/dist/transformer/analyze/analyze-source-file.d.ts.map +1 -0
  12. package/dist/transformer/analyze/analyze-source-file.js +605 -0
  13. package/dist/transformer/analyze/analyze-source-file.js.map +1 -0
  14. package/dist/transformer/analyze/get-contextual-domain.d.ts +19 -0
  15. package/dist/transformer/analyze/get-contextual-domain.d.ts.map +1 -0
  16. package/dist/transformer/analyze/get-contextual-domain.js +197 -0
  17. package/dist/transformer/analyze/get-contextual-domain.js.map +1 -0
  18. package/dist/transformer/analyze/get-expression-domain.d.ts +26 -0
  19. package/dist/transformer/analyze/get-expression-domain.d.ts.map +1 -0
  20. package/dist/transformer/analyze/get-expression-domain.js +804 -0
  21. package/dist/transformer/analyze/get-expression-domain.js.map +1 -0
  22. package/dist/transformer/analyze/type-domain.d.ts +41 -0
  23. package/dist/transformer/analyze/type-domain.d.ts.map +1 -0
  24. package/dist/transformer/analyze/type-domain.js +260 -0
  25. package/dist/transformer/analyze/type-domain.js.map +1 -0
  26. package/dist/transformer/ast.d.ts +10 -0
  27. package/dist/transformer/ast.d.ts.map +1 -0
  28. package/dist/transformer/ast.js +115 -0
  29. package/dist/transformer/ast.js.map +1 -0
  30. package/dist/transformer/diagnostics.d.ts +17 -0
  31. package/dist/transformer/diagnostics.d.ts.map +1 -0
  32. package/dist/transformer/diagnostics.js +30 -0
  33. package/dist/transformer/diagnostics.js.map +1 -0
  34. package/dist/transformer/domains.d.ts +11 -0
  35. package/dist/transformer/domains.d.ts.map +1 -0
  36. package/dist/transformer/domains.js +32 -0
  37. package/dist/transformer/domains.js.map +1 -0
  38. package/dist/transformer/index.d.ts +10 -0
  39. package/dist/transformer/index.d.ts.map +1 -0
  40. package/dist/transformer/index.js +60 -0
  41. package/dist/transformer/index.js.map +1 -0
  42. package/dist/transformer/operators.d.ts +16 -0
  43. package/dist/transformer/operators.d.ts.map +1 -0
  44. package/dist/transformer/operators.js +44 -0
  45. package/dist/transformer/operators.js.map +1 -0
  46. package/dist/transformer/options.d.ts +19 -0
  47. package/dist/transformer/options.d.ts.map +1 -0
  48. package/dist/transformer/options.js +17 -0
  49. package/dist/transformer/options.js.map +1 -0
  50. package/dist/transformer/symbols.d.ts +56 -0
  51. package/dist/transformer/symbols.d.ts.map +1 -0
  52. package/dist/transformer/symbols.js +270 -0
  53. package/dist/transformer/symbols.js.map +1 -0
  54. package/dist/transformer/transform/erase-imports.d.ts +14 -0
  55. package/dist/transformer/transform/erase-imports.d.ts.map +1 -0
  56. package/dist/transformer/transform/erase-imports.js +174 -0
  57. package/dist/transformer/transform/erase-imports.js.map +1 -0
  58. package/dist/transformer/transform/generated-coercions.d.ts +9 -0
  59. package/dist/transformer/transform/generated-coercions.d.ts.map +1 -0
  60. package/dist/transformer/transform/generated-coercions.js +22 -0
  61. package/dist/transformer/transform/generated-coercions.js.map +1 -0
  62. package/dist/transformer/transform/optimize-coercions.d.ts +11 -0
  63. package/dist/transformer/transform/optimize-coercions.d.ts.map +1 -0
  64. package/dist/transformer/transform/optimize-coercions.js +1702 -0
  65. package/dist/transformer/transform/optimize-coercions.js.map +1 -0
  66. package/dist/transformer/transform/transform-declaration-file.d.ts +9 -0
  67. package/dist/transformer/transform/transform-declaration-file.d.ts.map +1 -0
  68. package/dist/transformer/transform/transform-declaration-file.js +376 -0
  69. package/dist/transformer/transform/transform-declaration-file.js.map +1 -0
  70. package/dist/transformer/transform/transform-expression.d.ts +24 -0
  71. package/dist/transformer/transform/transform-expression.d.ts.map +1 -0
  72. package/dist/transformer/transform/transform-expression.js +545 -0
  73. package/dist/transformer/transform/transform-expression.js.map +1 -0
  74. package/dist/transformer/transform/transform-source-file.d.ts +10 -0
  75. package/dist/transformer/transform/transform-source-file.d.ts.map +1 -0
  76. package/dist/transformer/transform/transform-source-file.js +52 -0
  77. package/dist/transformer/transform/transform-source-file.js.map +1 -0
  78. package/dist/transformer/ts-compat.d.ts +4 -0
  79. package/dist/transformer/ts-compat.d.ts.map +1 -0
  80. package/dist/transformer/ts-compat.js +24 -0
  81. package/dist/transformer/ts-compat.js.map +1 -0
  82. package/docs/implementation-plan.md +335 -0
  83. package/docs/lib-implementation.md +77 -0
  84. package/docs/lowering-optimization-spec.md +1020 -0
  85. package/docs/project-structure.md +52 -0
  86. package/docs/transform-spec.md +2114 -0
  87. package/package.json +83 -0
@@ -0,0 +1,545 @@
1
+ import * as ts from "typescript";
2
+ import { getContextualDomain } from "../analyze/get-contextual-domain.js";
3
+ import { getExpressionDomain } from "../analyze/get-expression-domain.js";
4
+ import { getTypeDomain, isNumericTypeDomain } from "../analyze/type-domain.js";
5
+ import { getTransparentDomainWrapperExpression, isRuntimeExpression, isTransparentDomainWrapper } from "../ast.js";
6
+ const binaryOperatorKinds = new Set([
7
+ ts.SyntaxKind.AmpersandToken,
8
+ ts.SyntaxKind.AsteriskAsteriskToken,
9
+ ts.SyntaxKind.AsteriskToken,
10
+ ts.SyntaxKind.BarToken,
11
+ ts.SyntaxKind.CaretToken,
12
+ ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken,
13
+ ts.SyntaxKind.GreaterThanGreaterThanToken,
14
+ ts.SyntaxKind.LessThanLessThanToken,
15
+ ts.SyntaxKind.MinusToken,
16
+ ts.SyntaxKind.PercentToken,
17
+ ts.SyntaxKind.PlusToken,
18
+ ts.SyntaxKind.SlashToken
19
+ ]);
20
+ export function transformExpression(input) {
21
+ const directContext = input.ignoreDirectContextualDomain === true
22
+ ? undefined
23
+ : getDirectContextualDomain(input);
24
+ const contextualDomain = input.contextualDomain ?? directContext?.domain;
25
+ const contextualUnionDomains = input.contextualUnionDomains ?? directContext?.unionDomains;
26
+ const domainResult = getExpressionDomain({
27
+ cache: input.analysis.expressionCache,
28
+ checker: input.checker,
29
+ contextualDomain,
30
+ expression: input.expression,
31
+ symbols: input.analysis.symbols
32
+ });
33
+ if (domainResult.diagnostics.length > 0) {
34
+ return transformChildren(input, domainResult.domain, false, domainResult.unionDomains);
35
+ }
36
+ if (isTransparentDomainWrapper(input.expression)) {
37
+ return transformTransparentDomainWrapper(input, {
38
+ contextualDomain,
39
+ contextualUnionDomains,
40
+ domainResult,
41
+ expression: input.expression
42
+ });
43
+ }
44
+ const uncheckedAssertion = getUncheckedAssertionExpression(input.expression);
45
+ if (uncheckedAssertion !== undefined) {
46
+ const transformedAssertion = transformUncheckedAssertion(input, domainResult, uncheckedAssertion);
47
+ if (transformedAssertion !== undefined) {
48
+ return transformedAssertion;
49
+ }
50
+ }
51
+ if (ts.isCallExpression(input.expression)) {
52
+ const transformedCastCall = transformCastCall(input, domainResult);
53
+ if (transformedCastCall !== undefined) {
54
+ return transformedCastCall;
55
+ }
56
+ }
57
+ if (ts.isBinaryExpression(input.expression)) {
58
+ const transformedBinaryExpression = transformBinaryExpression(input, domainResult);
59
+ if (transformedBinaryExpression !== undefined) {
60
+ return transformedBinaryExpression;
61
+ }
62
+ }
63
+ if (ts.isConditionalExpression(input.expression)) {
64
+ const transformedUnionConditionalExpression = transformConditionalUnionExpression(input, domainResult);
65
+ if (transformedUnionConditionalExpression !== undefined) {
66
+ return transformedUnionConditionalExpression;
67
+ }
68
+ const transformedConditionalExpression = transformConditionalExpression(input, domainResult);
69
+ if (transformedConditionalExpression !== undefined) {
70
+ return transformedConditionalExpression;
71
+ }
72
+ }
73
+ if (ts.isPrefixUnaryExpression(input.expression)) {
74
+ const transformedUpdateExpression = transformPrefixUpdateExpression(input);
75
+ if (transformedUpdateExpression !== undefined) {
76
+ return transformedUpdateExpression;
77
+ }
78
+ const transformedUnaryExpression = transformUnaryExpression(input, domainResult);
79
+ if (transformedUnaryExpression !== undefined) {
80
+ return transformedUnaryExpression;
81
+ }
82
+ }
83
+ if (ts.isPostfixUnaryExpression(input.expression)) {
84
+ const transformedUpdateExpression = transformPostfixUpdateExpression(input);
85
+ if (transformedUpdateExpression !== undefined) {
86
+ return transformedUpdateExpression;
87
+ }
88
+ }
89
+ const transformedExpression = transformChildren(input, domainResult.domain, false, domainResult.unionDomains);
90
+ if (contextualDomain !== undefined &&
91
+ isNumericTypeDomain(transformedExpression.domain)) {
92
+ return {
93
+ domain: contextualDomain,
94
+ expression: coerceToDomain(input.generatedCoercions, input.context.factory, transformedExpression.expression, contextualDomain),
95
+ isClosed: true
96
+ };
97
+ }
98
+ if (contextualUnionDomains !== undefined &&
99
+ isNumericTypeDomain(transformedExpression.domain) &&
100
+ contextualUnionDomains.includes(transformedExpression.domain)) {
101
+ return {
102
+ domain: transformedExpression.domain,
103
+ expression: closeExpression(input.generatedCoercions, input.context.factory, transformedExpression, transformedExpression.domain),
104
+ isClosed: true
105
+ };
106
+ }
107
+ return transformedExpression;
108
+ }
109
+ function transformUncheckedAssertion(input, domainResult, expression) {
110
+ if (!isNumericTypeDomain(domainResult.domain) &&
111
+ domainResult.unionDomains === undefined) {
112
+ return undefined;
113
+ }
114
+ const transformedExpression = transformExpression({
115
+ ...input,
116
+ contextualDomain: undefined,
117
+ contextualUnionDomains: undefined,
118
+ expression: expression.expression,
119
+ ignoreDirectContextualDomain: true
120
+ });
121
+ return {
122
+ domain: domainResult.domain,
123
+ expression: transformedExpression.expression,
124
+ isClosed: transformedExpression.isClosed &&
125
+ transformedExpression.domain === domainResult.domain,
126
+ isUncheckedAssertion: true,
127
+ unionDomains: domainResult.unionDomains
128
+ };
129
+ }
130
+ function transformCastCall(input, domainResult) {
131
+ const expression = input.expression;
132
+ if (!isNumericTypeDomain(domainResult.domain)) {
133
+ return undefined;
134
+ }
135
+ const binding = input.analysis.symbols.getBindingForCastCallee(expression.expression);
136
+ if (binding === undefined || binding.isTypeOnly) {
137
+ return undefined;
138
+ }
139
+ const firstArgument = expression.arguments[0];
140
+ if (firstArgument === undefined) {
141
+ return undefined;
142
+ }
143
+ const transformedArgument = transformExpression({
144
+ ...input,
145
+ contextualDomain: undefined,
146
+ expression: firstArgument,
147
+ ignoreDirectContextualDomain: true
148
+ });
149
+ return {
150
+ domain: binding.domain,
151
+ expression: closeExpression(input.generatedCoercions, input.context.factory, transformedArgument, binding.domain, { respectUncheckedAssertion: false }),
152
+ isClosed: true
153
+ };
154
+ }
155
+ function transformTransparentDomainWrapper(input, wrapperInput) {
156
+ const transformedExpression = transformExpression({
157
+ ...input,
158
+ contextualDomain: wrapperInput.contextualDomain,
159
+ contextualUnionDomains: wrapperInput.contextualUnionDomains,
160
+ expression: getTransparentDomainWrapperExpression(wrapperInput.expression),
161
+ ignoreDirectContextualDomain: true
162
+ });
163
+ return {
164
+ domain: wrapperInput.domainResult.domain,
165
+ expression: updateTransparentDomainWrapper(input.context.factory, wrapperInput.expression, transformedExpression.expression),
166
+ isClosed: transformedExpression.isClosed,
167
+ isUncheckedAssertion: transformedExpression.isUncheckedAssertion,
168
+ unionDomains: wrapperInput.domainResult.unionDomains
169
+ };
170
+ }
171
+ function transformConditionalUnionExpression(input, domainResult) {
172
+ const expression = input.expression;
173
+ if (domainResult.unionDomains === undefined ||
174
+ domainResult.unionDomains.length === 0) {
175
+ return undefined;
176
+ }
177
+ const condition = transformExpression({
178
+ ...input,
179
+ contextualDomain: undefined,
180
+ contextualUnionDomains: undefined,
181
+ expression: expression.condition,
182
+ ignoreDirectContextualDomain: true
183
+ });
184
+ const whenTrue = transformConditionalUnionBranch(input, expression.whenTrue);
185
+ const whenFalse = transformConditionalUnionBranch(input, expression.whenFalse);
186
+ return {
187
+ domain: "unknown",
188
+ expression: input.context.factory.createConditionalExpression(condition.expression, expression.questionToken, whenTrue, expression.colonToken, whenFalse),
189
+ isClosed: true,
190
+ unionDomains: domainResult.unionDomains
191
+ };
192
+ }
193
+ function transformConditionalUnionBranch(input, expression) {
194
+ const branchResult = getExpressionDomain({
195
+ cache: input.analysis.expressionCache,
196
+ checker: input.checker,
197
+ expression,
198
+ symbols: input.analysis.symbols
199
+ });
200
+ if (isNumericTypeDomain(branchResult.domain)) {
201
+ const transformedBranch = transformExpression({
202
+ ...input,
203
+ contextualDomain: branchResult.domain,
204
+ contextualUnionDomains: undefined,
205
+ expression
206
+ });
207
+ return closeExpression(input.generatedCoercions, input.context.factory, transformedBranch, branchResult.domain);
208
+ }
209
+ const transformedBranch = transformExpression({
210
+ ...input,
211
+ contextualDomain: undefined,
212
+ contextualUnionDomains: branchResult.unionDomains,
213
+ expression
214
+ });
215
+ return transformedBranch.expression;
216
+ }
217
+ function transformConditionalExpression(input, domainResult) {
218
+ const expression = input.expression;
219
+ if (!isNumericTypeDomain(domainResult.domain)) {
220
+ return undefined;
221
+ }
222
+ const condition = transformExpression({
223
+ ...input,
224
+ contextualDomain: undefined,
225
+ expression: expression.condition,
226
+ ignoreDirectContextualDomain: true
227
+ });
228
+ const whenTrue = transformExpression({
229
+ ...input,
230
+ contextualDomain: domainResult.domain,
231
+ expression: expression.whenTrue
232
+ });
233
+ const whenFalse = transformExpression({
234
+ ...input,
235
+ contextualDomain: domainResult.domain,
236
+ expression: expression.whenFalse
237
+ });
238
+ return {
239
+ domain: domainResult.domain,
240
+ expression: input.context.factory.createConditionalExpression(condition.expression, expression.questionToken, closeExpression(input.generatedCoercions, input.context.factory, whenTrue, domainResult.domain), expression.colonToken, closeExpression(input.generatedCoercions, input.context.factory, whenFalse, domainResult.domain)),
241
+ isClosed: true
242
+ };
243
+ }
244
+ function transformBinaryExpression(input, domainResult) {
245
+ const expression = input.expression;
246
+ if (!isNumericTypeDomain(domainResult.domain)) {
247
+ return undefined;
248
+ }
249
+ if (!binaryOperatorKinds.has(expression.operatorToken.kind)) {
250
+ return undefined;
251
+ }
252
+ const left = transformExpression({
253
+ ...input,
254
+ contextualDomain: domainResult.domain,
255
+ expression: expression.left
256
+ });
257
+ const right = transformExpression({
258
+ ...input,
259
+ contextualDomain: domainResult.domain,
260
+ expression: expression.right
261
+ });
262
+ const leftExpression = closeExpression(input.generatedCoercions, input.context.factory, left, domainResult.domain);
263
+ const rightExpression = closeExpression(input.generatedCoercions, input.context.factory, right, domainResult.domain);
264
+ const operation = expression.operatorToken.kind === ts.SyntaxKind.AsteriskToken &&
265
+ (domainResult.domain === "i32" || domainResult.domain === "u32")
266
+ ? createMathCall(input.context.factory, "imul", [
267
+ leftExpression,
268
+ rightExpression
269
+ ])
270
+ : input.context.factory.createBinaryExpression(leftExpression, expression.operatorToken.kind, rightExpression);
271
+ return {
272
+ domain: domainResult.domain,
273
+ expression: coerceToDomain(input.generatedCoercions, input.context.factory, operation, domainResult.domain),
274
+ isClosed: true
275
+ };
276
+ }
277
+ function transformUnaryExpression(input, domainResult) {
278
+ const expression = input.expression;
279
+ if (!isNumericTypeDomain(domainResult.domain)) {
280
+ return undefined;
281
+ }
282
+ if (expression.operator !== ts.SyntaxKind.PlusToken &&
283
+ expression.operator !== ts.SyntaxKind.MinusToken) {
284
+ return undefined;
285
+ }
286
+ const operand = transformExpression({
287
+ ...input,
288
+ contextualDomain: domainResult.domain,
289
+ expression: expression.operand
290
+ });
291
+ const operation = input.context.factory.createPrefixUnaryExpression(expression.operator, closeExpression(input.generatedCoercions, input.context.factory, operand, domainResult.domain));
292
+ return {
293
+ domain: domainResult.domain,
294
+ expression: coerceToDomain(input.generatedCoercions, input.context.factory, operation, domainResult.domain),
295
+ isClosed: true
296
+ };
297
+ }
298
+ function transformPrefixUpdateExpression(input) {
299
+ const expression = input.expression;
300
+ const binaryOperator = getBinaryOperatorForUpdateExpression(expression.operator);
301
+ if (binaryOperator === undefined) {
302
+ return undefined;
303
+ }
304
+ const domain = getTargetDomain(input, expression.operand);
305
+ if (domain === undefined) {
306
+ return undefined;
307
+ }
308
+ const targetPlan = createAssignmentTargetPlan(input, expression.operand);
309
+ if (targetPlan === undefined) {
310
+ return undefined;
311
+ }
312
+ const assignment = createUpdateAssignment(input.generatedCoercions, input.context.factory, targetPlan, domain, binaryOperator, coerceToDomain(input.generatedCoercions, input.context.factory, targetPlan.read, domain));
313
+ return {
314
+ domain,
315
+ expression: createSequencedExpression(input.context.factory, [
316
+ ...targetPlan.setup,
317
+ assignment
318
+ ]),
319
+ isClosed: true
320
+ };
321
+ }
322
+ function transformPostfixUpdateExpression(input) {
323
+ const expression = input.expression;
324
+ const binaryOperator = getBinaryOperatorForUpdateExpression(expression.operator);
325
+ if (binaryOperator === undefined) {
326
+ return undefined;
327
+ }
328
+ const domain = getTargetDomain(input, expression.operand);
329
+ if (domain === undefined) {
330
+ return undefined;
331
+ }
332
+ const targetPlan = createAssignmentTargetPlan(input, expression.operand);
333
+ if (targetPlan === undefined) {
334
+ return undefined;
335
+ }
336
+ const oldValue = input.context.factory.createTempVariable((temp) => {
337
+ input.context.hoistVariableDeclaration(temp);
338
+ });
339
+ const oldValueAssignment = input.context.factory.createAssignment(oldValue, coerceToDomain(input.generatedCoercions, input.context.factory, targetPlan.read, domain));
340
+ const assignment = createUpdateAssignment(input.generatedCoercions, input.context.factory, targetPlan, domain, binaryOperator, coerceToDomain(input.generatedCoercions, input.context.factory, oldValue, domain));
341
+ return {
342
+ domain,
343
+ expression: createSequencedExpression(input.context.factory, [
344
+ ...targetPlan.setup,
345
+ oldValueAssignment,
346
+ assignment,
347
+ coerceToDomain(input.generatedCoercions, input.context.factory, oldValue, domain)
348
+ ]),
349
+ isClosed: true
350
+ };
351
+ }
352
+ function transformChildren(input, domain, isClosed, unionDomains) {
353
+ const visitor = (node) => {
354
+ if (isRuntimeExpression(node)) {
355
+ return transformExpression({
356
+ ...input,
357
+ contextualDomain: undefined,
358
+ expression: node
359
+ }).expression;
360
+ }
361
+ return ts.visitEachChild(node, visitor, input.context);
362
+ };
363
+ const expression = ts.visitEachChild(input.expression, visitor, input.context);
364
+ const result = {
365
+ domain,
366
+ expression,
367
+ isClosed
368
+ };
369
+ if (unionDomains === undefined || unionDomains.length === 0) {
370
+ return result;
371
+ }
372
+ return {
373
+ ...result,
374
+ unionDomains
375
+ };
376
+ }
377
+ function closeExpression(generatedCoercions, factory, transformedExpression, domain, options = {}) {
378
+ const respectUncheckedAssertion = options.respectUncheckedAssertion ?? true;
379
+ if (respectUncheckedAssertion &&
380
+ transformedExpression.isUncheckedAssertion === true &&
381
+ transformedExpression.domain === domain) {
382
+ return transformedExpression.expression;
383
+ }
384
+ if (transformedExpression.isClosed &&
385
+ transformedExpression.domain === domain) {
386
+ return transformedExpression.expression;
387
+ }
388
+ if (isNumericTypeDomain(transformedExpression.domain) &&
389
+ transformedExpression.domain !== domain) {
390
+ return coerceToDomain(generatedCoercions, factory, transformedExpression.isClosed
391
+ ? transformedExpression.expression
392
+ : coerceToDomain(generatedCoercions, factory, transformedExpression.expression, transformedExpression.domain), domain);
393
+ }
394
+ return coerceToDomain(generatedCoercions, factory, transformedExpression.expression, domain);
395
+ }
396
+ function updateTransparentDomainWrapper(factory, expression, innerExpression) {
397
+ if (ts.isParenthesizedExpression(expression)) {
398
+ return factory.updateParenthesizedExpression(expression, innerExpression);
399
+ }
400
+ if (ts.isNonNullExpression(expression)) {
401
+ return factory.updateNonNullExpression(expression, innerExpression);
402
+ }
403
+ return factory.updateSatisfiesExpression(expression, innerExpression, expression.type);
404
+ }
405
+ function createClosedBinaryOperation(generatedCoercions, factory, domain, operator, leftExpression, rightExpression) {
406
+ const operation = operator === ts.SyntaxKind.AsteriskToken &&
407
+ (domain === "i32" || domain === "u32")
408
+ ? createMathCall(factory, "imul", [leftExpression, rightExpression])
409
+ : factory.createBinaryExpression(leftExpression, operator, rightExpression);
410
+ return coerceToDomain(generatedCoercions, factory, operation, domain);
411
+ }
412
+ function createUpdateAssignment(generatedCoercions, factory, targetPlan, domain, operator, leftExpression) {
413
+ const operation = createClosedBinaryOperation(generatedCoercions, factory, domain, operator, leftExpression, coerceToDomain(generatedCoercions, factory, factory.createNumericLiteral(1), domain));
414
+ return factory.createAssignment(targetPlan.write, operation);
415
+ }
416
+ function createAssignmentTargetPlan(input, target) {
417
+ if (ts.isIdentifier(target)) {
418
+ return {
419
+ read: target,
420
+ setup: [],
421
+ write: target
422
+ };
423
+ }
424
+ if (ts.isPropertyAccessExpression(target)) {
425
+ const receiver = cacheExpressionIfNeeded(input, target.expression);
426
+ return {
427
+ read: input.context.factory.createPropertyAccessExpression(receiver.expression, target.name),
428
+ setup: receiver.setup,
429
+ write: input.context.factory.createPropertyAccessExpression(receiver.expression, target.name)
430
+ };
431
+ }
432
+ if (ts.isElementAccessExpression(target)) {
433
+ const receiver = cacheExpressionIfNeeded(input, target.expression);
434
+ const argument = cacheExpressionIfNeeded(input, target.argumentExpression);
435
+ return {
436
+ read: input.context.factory.createElementAccessExpression(receiver.expression, argument.expression),
437
+ setup: [...receiver.setup, ...argument.setup],
438
+ write: input.context.factory.createElementAccessExpression(receiver.expression, argument.expression)
439
+ };
440
+ }
441
+ return undefined;
442
+ }
443
+ function cacheExpressionIfNeeded(input, expression) {
444
+ if (isSingleEvaluationExpression(expression)) {
445
+ return {
446
+ expression,
447
+ setup: []
448
+ };
449
+ }
450
+ const transformedExpression = transformExpression({
451
+ ...input,
452
+ contextualDomain: undefined,
453
+ expression
454
+ });
455
+ const temp = input.context.factory.createTempVariable((identifier) => {
456
+ input.context.hoistVariableDeclaration(identifier);
457
+ });
458
+ return {
459
+ expression: temp,
460
+ setup: [
461
+ input.context.factory.createAssignment(temp, transformedExpression.expression)
462
+ ]
463
+ };
464
+ }
465
+ function isSingleEvaluationExpression(expression) {
466
+ return (ts.isIdentifier(expression) ||
467
+ ts.isNumericLiteral(expression) ||
468
+ ts.isStringLiteralLike(expression) ||
469
+ expression.kind === ts.SyntaxKind.SuperKeyword ||
470
+ expression.kind === ts.SyntaxKind.ThisKeyword);
471
+ }
472
+ function getTargetDomain(input, target) {
473
+ const typeResult = getTypeDomain({
474
+ checker: input.checker,
475
+ node: target,
476
+ symbols: input.analysis.symbols,
477
+ type: input.checker.getTypeAtLocation(target)
478
+ });
479
+ return isNumericTypeDomain(typeResult.domain) ? typeResult.domain : undefined;
480
+ }
481
+ function getBinaryOperatorForUpdateExpression(operator) {
482
+ if (operator === ts.SyntaxKind.PlusPlusToken) {
483
+ return ts.SyntaxKind.PlusToken;
484
+ }
485
+ if (operator === ts.SyntaxKind.MinusMinusToken) {
486
+ return ts.SyntaxKind.MinusToken;
487
+ }
488
+ return undefined;
489
+ }
490
+ function createSequencedExpression(factory, expressions) {
491
+ if (expressions.length === 1) {
492
+ return expressions[0] ?? factory.createVoidZero();
493
+ }
494
+ return factory.createCommaListExpression(expressions);
495
+ }
496
+ function coerceToDomain(generatedCoercions, factory, expression, domain) {
497
+ switch (domain) {
498
+ case "f32":
499
+ return generatedCoercions.markGeneratedCoercion(createMathCall(factory, "fround", [expression]), domain);
500
+ case "f64":
501
+ return generatedCoercions.markGeneratedCoercion(factory.createPrefixUnaryExpression(ts.SyntaxKind.PlusToken, parenthesizeForPrefixUnary(factory, expression)), domain);
502
+ case "i32":
503
+ return generatedCoercions.markGeneratedCoercion(factory.createBinaryExpression(parenthesizeForBinaryCoercion(factory, expression), ts.SyntaxKind.BarToken, factory.createNumericLiteral(0)), domain);
504
+ case "u32":
505
+ return generatedCoercions.markGeneratedCoercion(factory.createBinaryExpression(parenthesizeForBinaryCoercion(factory, expression), ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken, factory.createNumericLiteral(0)), domain);
506
+ }
507
+ }
508
+ function createMathCall(factory, methodName, argumentsArray) {
509
+ return factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier("Math"), methodName), undefined, argumentsArray);
510
+ }
511
+ function parenthesizeForBinaryCoercion(factory, expression) {
512
+ if (ts.isBinaryExpression(expression) ||
513
+ ts.isConditionalExpression(expression) ||
514
+ ts.isYieldExpression(expression)) {
515
+ return factory.createParenthesizedExpression(expression);
516
+ }
517
+ return expression;
518
+ }
519
+ function parenthesizeForPrefixUnary(factory, expression) {
520
+ if (ts.isBinaryExpression(expression) ||
521
+ ts.isConditionalExpression(expression) ||
522
+ ts.isPrefixUnaryExpression(expression) ||
523
+ ts.isYieldExpression(expression)) {
524
+ return factory.createParenthesizedExpression(expression);
525
+ }
526
+ return expression;
527
+ }
528
+ function getDirectContextualDomain(input) {
529
+ return getContextualDomain({
530
+ checker: input.checker,
531
+ node: input.expression,
532
+ symbols: input.analysis.symbols
533
+ });
534
+ }
535
+ function isUncheckedAssertionExpression(expression) {
536
+ return ts.isAsExpression(expression) || ts.isTypeAssertionExpression(expression);
537
+ }
538
+ function getUncheckedAssertionExpression(expression) {
539
+ let current = expression;
540
+ while (ts.isParenthesizedExpression(current)) {
541
+ current = current.expression;
542
+ }
543
+ return isUncheckedAssertionExpression(current) ? current : undefined;
544
+ }
545
+ //# sourceMappingURL=transform-expression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-expression.js","sourceRoot":"","sources":["../../../src/transformer/transform/transform-expression.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import * as ts from "typescript";
2
+ import type { NormalizedNumtypesTransformerOptions } from "../options.js";
3
+ export interface TransformSourceFileInput {
4
+ readonly context: ts.TransformationContext;
5
+ readonly options: NormalizedNumtypesTransformerOptions;
6
+ readonly program: ts.Program;
7
+ readonly sourceFile: ts.SourceFile;
8
+ }
9
+ export declare function transformSourceFile(input: TransformSourceFileInput): ts.SourceFile;
10
+ //# sourceMappingURL=transform-source-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-source-file.d.ts","sourceRoot":"","sources":["../../../src/transformer/transform/transform-source-file.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,eAAe,CAAC;AAE1E,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,qBAAqB,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,oCAAoC,CAAC;IACvD,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;CACpC;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,wBAAwB,GAC9B,EAAE,CAAC,UAAU,CAqDf"}
@@ -0,0 +1,52 @@
1
+ import { analyzeSourceFile } from "../analyze/analyze-source-file.js";
2
+ import { isRuntimeExpression } from "../ast.js";
3
+ import { NumtypesDiagnosticError } from "../diagnostics.js";
4
+ import { erasePhantomBindings } from "./erase-imports.js";
5
+ import { createGeneratedCoercionRegistry } from "./generated-coercions.js";
6
+ import { optimizeCoercions } from "./optimize-coercions.js";
7
+ import { transformExpression } from "./transform-expression.js";
8
+ import * as ts from "typescript";
9
+ export function transformSourceFile(input) {
10
+ const checker = input.program.getTypeChecker();
11
+ const analysisResult = analyzeSourceFile({
12
+ checker,
13
+ sourceFile: input.sourceFile
14
+ });
15
+ if (input.options.collectDiagnostics) {
16
+ if (analysisResult.diagnostics.length > 0) {
17
+ throw new NumtypesDiagnosticError(analysisResult.diagnostics);
18
+ }
19
+ }
20
+ if (analysisResult.diagnostics.length > 0) {
21
+ return input.sourceFile;
22
+ }
23
+ const generatedCoercions = createGeneratedCoercionRegistry();
24
+ const visitor = (node) => {
25
+ if (isRuntimeExpression(node)) {
26
+ return transformExpression({
27
+ analysis: analysisResult,
28
+ checker,
29
+ context: input.context,
30
+ expression: node,
31
+ generatedCoercions
32
+ }).expression;
33
+ }
34
+ return ts.visitEachChild(node, visitor, input.context);
35
+ };
36
+ const transformedSourceFile = ts.visitEachChild(input.sourceFile, visitor, input.context);
37
+ const optimizedSourceFile = optimizeCoercions({
38
+ checker,
39
+ context: input.context,
40
+ generatedCoercions,
41
+ optimizeTypedArrayElementAccess: input.options.optimizeTypedArrayElementAccess,
42
+ sourceFile: transformedSourceFile
43
+ });
44
+ if (input.options.preservePhantomImports) {
45
+ return optimizedSourceFile;
46
+ }
47
+ return erasePhantomBindings({
48
+ factory: input.context.factory,
49
+ sourceFile: optimizedSourceFile
50
+ });
51
+ }
52
+ //# sourceMappingURL=transform-source-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-source-file.js","sourceRoot":"","sources":["../../../src/transformer/transform/transform-source-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAWjC,MAAM,UAAU,mBAAmB,CACjC,KAA+B;IAE/B,MAAM,OAAO,GAAmB,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;IAC/D,MAAM,cAAc,GAA6B,iBAAiB,CAAC;QACjE,OAAO;QACP,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACrC,IAAI,cAAc,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,uBAAuB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,IAAI,cAAc,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC,UAAU,CAAC;IAC1B,CAAC;IAED,MAAM,kBAAkB,GAAG,+BAA+B,EAAE,CAAC;IAC7D,MAAM,OAAO,GAAe,CAAC,IAAa,EAA2B,EAAE;QACrE,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,OAAO,mBAAmB,CAAC;gBACzB,QAAQ,EAAE,cAAc;gBACxB,OAAO;gBACP,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,UAAU,EAAE,IAAI;gBAChB,kBAAkB;aACnB,CAAC,CAAC,UAAU,CAAC;QAChB,CAAC;QAED,OAAO,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC,CAAC;IACF,MAAM,qBAAqB,GAAkB,EAAE,CAAC,cAAc,CAC5D,KAAK,CAAC,UAAU,EAChB,OAAO,EACP,KAAK,CAAC,OAAO,CACd,CAAC;IACF,MAAM,mBAAmB,GAAkB,iBAAiB,CAAC;QAC3D,OAAO;QACP,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,kBAAkB;QAClB,+BAA+B,EAC7B,KAAK,CAAC,OAAO,CAAC,+BAA+B;QAC/C,UAAU,EAAE,qBAAqB;KAClC,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;QACzC,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;QAC9B,UAAU,EAAE,mBAAmB;KAChC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,4 @@
1
+ import * as ts from "typescript";
2
+ export declare function isImportClauseTypeOnly(importClause: ts.ImportClause): boolean;
3
+ export declare function updateImportClauseCompat(factory: ts.NodeFactory, importClause: ts.ImportClause, name: ts.Identifier | undefined, namedBindings: ts.NamedImportBindings | undefined): ts.ImportClause;
4
+ //# sourceMappingURL=ts-compat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ts-compat.d.ts","sourceRoot":"","sources":["../../src/transformer/ts-compat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAgBjC,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,GAAG,OAAO,CAS7E;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,YAAY,EAAE,EAAE,CAAC,YAAY,EAC7B,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,SAAS,EAC/B,aAAa,EAAE,EAAE,CAAC,mBAAmB,GAAG,SAAS,GAChD,EAAE,CAAC,YAAY,CAoBjB"}