@tsonic/frontend 0.0.11 → 0.0.13

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 (125) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/ir/converters/expressions/access.d.ts.map +1 -1
  3. package/dist/ir/converters/expressions/access.js +61 -1
  4. package/dist/ir/converters/expressions/access.js.map +1 -1
  5. package/dist/ir/converters/expressions/calls.d.ts.map +1 -1
  6. package/dist/ir/converters/expressions/calls.js +293 -24
  7. package/dist/ir/converters/expressions/calls.js.map +1 -1
  8. package/dist/ir/converters/expressions/helpers.js +4 -4
  9. package/dist/ir/converters/expressions/helpers.js.map +1 -1
  10. package/dist/ir/converters/expressions/literals.d.ts +14 -0
  11. package/dist/ir/converters/expressions/literals.d.ts.map +1 -1
  12. package/dist/ir/converters/expressions/literals.js +22 -2
  13. package/dist/ir/converters/expressions/literals.js.map +1 -1
  14. package/dist/ir/converters/expressions/numeric-recovery.test.js +3 -2
  15. package/dist/ir/converters/expressions/numeric-recovery.test.js.map +1 -1
  16. package/dist/ir/converters/statements/helpers.d.ts.map +1 -1
  17. package/dist/ir/converters/statements/helpers.js +10 -4
  18. package/dist/ir/converters/statements/helpers.js.map +1 -1
  19. package/dist/ir/expression-converter.d.ts.map +1 -1
  20. package/dist/ir/expression-converter.js +38 -5
  21. package/dist/ir/expression-converter.js.map +1 -1
  22. package/dist/ir/index.d.ts +1 -1
  23. package/dist/ir/index.d.ts.map +1 -1
  24. package/dist/ir/index.js +1 -1
  25. package/dist/ir/index.js.map +1 -1
  26. package/dist/ir/statement-converter.d.ts.map +1 -1
  27. package/dist/ir/statement-converter.js +12 -0
  28. package/dist/ir/statement-converter.js.map +1 -1
  29. package/dist/ir/type-converter/inference.d.ts.map +1 -1
  30. package/dist/ir/type-converter/inference.js +50 -7
  31. package/dist/ir/type-converter/inference.js.map +1 -1
  32. package/dist/ir/type-converter/primitives.d.ts +26 -4
  33. package/dist/ir/type-converter/primitives.d.ts.map +1 -1
  34. package/dist/ir/type-converter/primitives.js +36 -2
  35. package/dist/ir/type-converter/primitives.js.map +1 -1
  36. package/dist/ir/type-converter/references.d.ts.map +1 -1
  37. package/dist/ir/type-converter/references.js +324 -11
  38. package/dist/ir/type-converter/references.js.map +1 -1
  39. package/dist/ir/type-converter/utility-types.d.ts +93 -0
  40. package/dist/ir/type-converter/utility-types.d.ts.map +1 -0
  41. package/dist/ir/type-converter/utility-types.js +528 -0
  42. package/dist/ir/type-converter/utility-types.js.map +1 -0
  43. package/dist/ir/type-converter/utility-types.test.d.ts +10 -0
  44. package/dist/ir/type-converter/utility-types.test.d.ts.map +1 -0
  45. package/dist/ir/type-converter/utility-types.test.js +1030 -0
  46. package/dist/ir/type-converter/utility-types.test.js.map +1 -0
  47. package/dist/ir/types/expressions.d.ts +40 -2
  48. package/dist/ir/types/expressions.d.ts.map +1 -1
  49. package/dist/ir/types/helpers.d.ts +3 -1
  50. package/dist/ir/types/helpers.d.ts.map +1 -1
  51. package/dist/ir/types/index.d.ts +2 -1
  52. package/dist/ir/types/index.d.ts.map +1 -1
  53. package/dist/ir/types/index.js +2 -0
  54. package/dist/ir/types/index.js.map +1 -1
  55. package/dist/ir/types/ir-types.d.ts +69 -11
  56. package/dist/ir/types/ir-types.d.ts.map +1 -1
  57. package/dist/ir/types/numeric-helpers.d.ts +46 -0
  58. package/dist/ir/types/numeric-helpers.d.ts.map +1 -0
  59. package/dist/ir/types/numeric-helpers.js +105 -0
  60. package/dist/ir/types/numeric-helpers.js.map +1 -0
  61. package/dist/ir/types/statements.d.ts +11 -1
  62. package/dist/ir/types/statements.d.ts.map +1 -1
  63. package/dist/ir/types.d.ts +2 -2
  64. package/dist/ir/types.d.ts.map +1 -1
  65. package/dist/ir/types.js +3 -1
  66. package/dist/ir/types.js.map +1 -1
  67. package/dist/ir/validation/anonymous-type-lowering-pass.d.ts +32 -0
  68. package/dist/ir/validation/anonymous-type-lowering-pass.d.ts.map +1 -0
  69. package/dist/ir/validation/anonymous-type-lowering-pass.js +854 -0
  70. package/dist/ir/validation/anonymous-type-lowering-pass.js.map +1 -0
  71. package/dist/ir/validation/attribute-collection-pass.d.ts +37 -0
  72. package/dist/ir/validation/attribute-collection-pass.d.ts.map +1 -0
  73. package/dist/ir/validation/attribute-collection-pass.js +282 -0
  74. package/dist/ir/validation/attribute-collection-pass.js.map +1 -0
  75. package/dist/ir/validation/attribute-collection-pass.test.d.ts +5 -0
  76. package/dist/ir/validation/attribute-collection-pass.test.d.ts.map +1 -0
  77. package/dist/ir/validation/attribute-collection-pass.test.js +215 -0
  78. package/dist/ir/validation/attribute-collection-pass.test.js.map +1 -0
  79. package/dist/ir/validation/index.d.ts +3 -0
  80. package/dist/ir/validation/index.d.ts.map +1 -1
  81. package/dist/ir/validation/index.js +3 -0
  82. package/dist/ir/validation/index.js.map +1 -1
  83. package/dist/ir/validation/numeric-coercion-pass.d.ts +77 -0
  84. package/dist/ir/validation/numeric-coercion-pass.d.ts.map +1 -0
  85. package/dist/ir/validation/numeric-coercion-pass.js +686 -0
  86. package/dist/ir/validation/numeric-coercion-pass.js.map +1 -0
  87. package/dist/ir/validation/numeric-invariants.test.js +130 -14
  88. package/dist/ir/validation/numeric-invariants.test.js.map +1 -1
  89. package/dist/ir/validation/numeric-proof-pass.d.ts.map +1 -1
  90. package/dist/ir/validation/numeric-proof-pass.js +68 -108
  91. package/dist/ir/validation/numeric-proof-pass.js.map +1 -1
  92. package/dist/ir/validation/soundness-gate.d.ts.map +1 -1
  93. package/dist/ir/validation/soundness-gate.js +23 -12
  94. package/dist/ir/validation/soundness-gate.js.map +1 -1
  95. package/dist/ir/validation/yield-lowering-pass.test.js +21 -12
  96. package/dist/ir/validation/yield-lowering-pass.test.js.map +1 -1
  97. package/dist/program/bindings.d.ts +20 -9
  98. package/dist/program/bindings.d.ts.map +1 -1
  99. package/dist/program/bindings.js +98 -36
  100. package/dist/program/bindings.js.map +1 -1
  101. package/dist/program/bindings.test.js +3 -3
  102. package/dist/program/dependency-graph.d.ts.map +1 -1
  103. package/dist/program/dependency-graph.js +31 -5
  104. package/dist/program/dependency-graph.js.map +1 -1
  105. package/dist/resolver/import-resolution.d.ts +4 -0
  106. package/dist/resolver/import-resolution.d.ts.map +1 -1
  107. package/dist/resolver/import-resolution.js +18 -7
  108. package/dist/resolver/import-resolution.js.map +1 -1
  109. package/dist/resolver.test.js +2 -2
  110. package/dist/resolver.test.js.map +1 -1
  111. package/dist/types/diagnostic.d.ts +1 -1
  112. package/dist/types/diagnostic.d.ts.map +1 -1
  113. package/dist/types/diagnostic.js.map +1 -1
  114. package/dist/validation/generics.d.ts.map +1 -1
  115. package/dist/validation/generics.js +133 -1
  116. package/dist/validation/generics.js.map +1 -1
  117. package/dist/validation/static-safety.js +13 -0
  118. package/dist/validation/static-safety.js.map +1 -1
  119. package/dist/validation/unsupported-utility-types.d.ts +10 -8
  120. package/dist/validation/unsupported-utility-types.d.ts.map +1 -1
  121. package/dist/validation/unsupported-utility-types.js +12 -19
  122. package/dist/validation/unsupported-utility-types.js.map +1 -1
  123. package/dist/validator.test.js +133 -28
  124. package/dist/validator.test.js.map +1 -1
  125. package/package.json +1 -1
@@ -3,5 +3,8 @@
3
3
  */
4
4
  export { validateIrSoundness, } from "./soundness-gate.js";
5
5
  export { runNumericProofPass, } from "./numeric-proof-pass.js";
6
+ export { runNumericCoercionPass, } from "./numeric-coercion-pass.js";
6
7
  export { runYieldLoweringPass, } from "./yield-lowering-pass.js";
8
+ export { runAttributeCollectionPass, } from "./attribute-collection-pass.js";
9
+ export { runAnonymousTypeLoweringPass, } from "./anonymous-type-lowering-pass.js";
7
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ir/validation/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,mBAAmB,GAEpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,mBAAmB,GAEpB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,oBAAoB,GAErB,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ir/validation/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,mBAAmB,GAEpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,mBAAmB,GAEpB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,sBAAsB,GAEvB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,oBAAoB,GAErB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,0BAA0B,GAE3B,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,4BAA4B,GAE7B,MAAM,mCAAmC,CAAC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Numeric Coercion Pass - STRICT CONTRACT enforcement
3
+ *
4
+ * This pass detects cases where an integer expression is used where a double is expected,
5
+ * and requires explicit user intent for the conversion.
6
+ *
7
+ * STRICT RULE: int → double requires explicit user intent
8
+ *
9
+ * Intent sites (where widening is checked):
10
+ * 1. Variable initialization with explicit type: `const x: number = 42` → ERROR
11
+ * 2. Parameter passing: `foo(42)` where foo expects `number` → ERROR
12
+ * 3. Return statements: `return 42` where function returns `number` → ERROR
13
+ * 4. Array elements: `[1, 2, 3]` in `number[]` context → ERROR (each element)
14
+ * 5. Object properties: `{ x: 42 }` where type has `x: number` → ERROR
15
+ * 6. Ternary branches: `cond ? 1 : 2` where expected is `number` → ERROR
16
+ * 7. Default parameters: `function f(x: number = 42)` → ERROR
17
+ * 8. Tuple elements: `[1, 2]` in `[number, number]` context → ERROR
18
+ *
19
+ * How to satisfy the contract:
20
+ * - Use double literal: `const x: number = 42.0` ✓
21
+ * - Use explicit cast: `const x: number = 42 as number` ✓
22
+ *
23
+ * This pass runs AFTER the IR is built, BEFORE emission.
24
+ * It is a HARD GATE - any errors prevent emission.
25
+ */
26
+ import { Diagnostic } from "../../types/diagnostic.js";
27
+ import { IrModule, IrExpression } from "../types.js";
28
+ /**
29
+ * Result of numeric expression classification.
30
+ * - "Int32": Expression definitely produces an Int32 value
31
+ * - "Double": Expression definitely produces a Double value
32
+ * - "Unknown": Cannot determine at compile time (e.g., untyped identifier, complex call)
33
+ */
34
+ export type NumericExprKind = "Int32" | "Double" | "Unknown";
35
+ /**
36
+ * Classify an expression's numeric kind.
37
+ *
38
+ * This function propagates numeric kind through:
39
+ * - Literals (via numericIntent)
40
+ * - Identifiers with primitiveType(name="int") or primitiveType(name="number")
41
+ * - Arithmetic operations (uses C# promotion rules)
42
+ * - Unary +/- (preserves operand kind)
43
+ * - Ternary (requires both branches to have same kind)
44
+ * - Parentheses (pass through)
45
+ * - numericNarrowing expressions (uses targetKind)
46
+ *
47
+ * Returns "Unknown" for expressions that cannot be classified.
48
+ */
49
+ export declare const classifyNumericExpr: (expr: IrExpression) => NumericExprKind;
50
+ /**
51
+ * Check if an expression has explicit double intent.
52
+ * This is true when:
53
+ * - It's a numericNarrowing with targetKind "Double" (i.e., `42 as number`)
54
+ * - It's a literal with numericIntent "Double" (i.e., `42.0`)
55
+ *
56
+ * Used to exempt explicit casts from TSN5110 errors.
57
+ */
58
+ export declare const hasExplicitDoubleIntent: (expr: IrExpression) => boolean;
59
+ /**
60
+ * Result of numeric coercion validation
61
+ */
62
+ export type NumericCoercionResult = {
63
+ readonly ok: boolean;
64
+ readonly module: IrModule;
65
+ readonly diagnostics: readonly Diagnostic[];
66
+ };
67
+ /**
68
+ * Run numeric coercion validation on all modules.
69
+ *
70
+ * HARD GATE: If any diagnostics are returned, the emitter MUST NOT run.
71
+ */
72
+ export declare const runNumericCoercionPass: (modules: readonly IrModule[]) => {
73
+ readonly ok: boolean;
74
+ readonly modules: readonly IrModule[];
75
+ readonly diagnostics: readonly Diagnostic[];
76
+ };
77
+ //# sourceMappingURL=numeric-coercion-pass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numeric-coercion-pass.d.ts","sourceRoot":"","sources":["../../../src/ir/validation/numeric-coercion-pass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EACL,UAAU,EAGX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,QAAQ,EAER,YAAY,EAIb,MAAM,aAAa,CAAC;AAErB;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAQ7D;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,YAAY,KAAG,eA6GxD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,GAAI,MAAM,YAAY,KAAG,OAgB5D,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;CAC7C,CAAC;AAwoBF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,SAAS,SAAS,QAAQ,EAAE,KAC3B;IACD,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;CAc7C,CAAC"}