c-next 0.1.69 → 0.1.71

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 (247) hide show
  1. package/package.json +1 -1
  2. package/src/lib/__tests__/parseCHeader.mocked.test.ts +69 -54
  3. package/src/lib/parseCHeader.ts +56 -23
  4. package/src/lib/parseWithSymbols.ts +195 -53
  5. package/src/transpiler/Transpiler.ts +173 -60
  6. package/src/transpiler/logic/analysis/FunctionCallAnalyzer.ts +240 -205
  7. package/src/transpiler/logic/analysis/InitializationAnalyzer.ts +1 -2
  8. package/src/transpiler/logic/analysis/PassByValueAnalyzer.ts +742 -0
  9. package/src/transpiler/logic/analysis/__tests__/FunctionCallAnalyzer.test.ts +102 -15
  10. package/src/transpiler/logic/analysis/__tests__/InitializationAnalyzer.test.ts +9 -9
  11. package/src/transpiler/logic/analysis/__tests__/runAnalyzers.test.ts +5 -5
  12. package/src/transpiler/{output/codegen → logic/analysis}/helpers/AssignmentTargetExtractor.ts +1 -1
  13. package/src/transpiler/{output/codegen → logic/analysis}/helpers/ChildStatementCollector.ts +1 -1
  14. package/src/transpiler/{output/codegen → logic/analysis}/helpers/StatementExpressionCollector.ts +1 -1
  15. package/src/transpiler/{output/codegen → logic/analysis}/helpers/__tests__/AssignmentTargetExtractor.test.ts +2 -2
  16. package/src/transpiler/{output/codegen → logic/analysis}/helpers/__tests__/ChildStatementCollector.test.ts +2 -2
  17. package/src/transpiler/{output/codegen → logic/analysis}/helpers/__tests__/StatementExpressionCollector.test.ts +2 -2
  18. package/src/transpiler/logic/symbols/SymbolTable.ts +676 -258
  19. package/src/transpiler/logic/symbols/SymbolUtils.ts +2 -2
  20. package/src/transpiler/logic/symbols/__tests__/SymbolTable.test.ts +290 -782
  21. package/src/transpiler/logic/symbols/c/__tests__/CResolver.integration.test.ts +573 -0
  22. package/src/transpiler/logic/symbols/c/__tests__/testHelpers.ts +20 -0
  23. package/src/transpiler/logic/symbols/c/collectors/EnumCollector.ts +82 -0
  24. package/src/transpiler/logic/symbols/c/collectors/FunctionCollector.ts +106 -0
  25. package/src/transpiler/logic/symbols/c/collectors/StructCollector.ts +173 -0
  26. package/src/transpiler/logic/symbols/c/collectors/TypedefCollector.ts +35 -0
  27. package/src/transpiler/logic/symbols/c/collectors/VariableCollector.ts +80 -0
  28. package/src/transpiler/logic/symbols/c/index.ts +333 -0
  29. package/src/transpiler/logic/symbols/c/utils/DeclaratorUtils.ts +269 -0
  30. package/src/transpiler/logic/symbols/cnext/__tests__/BitmapCollector.test.ts +50 -11
  31. package/src/transpiler/logic/symbols/cnext/__tests__/CNextResolver.integration.test.ts +45 -34
  32. package/src/transpiler/logic/symbols/cnext/__tests__/EnumCollector.test.ts +30 -13
  33. package/src/transpiler/logic/symbols/cnext/__tests__/FunctionCollector.test.ts +279 -64
  34. package/src/transpiler/logic/symbols/cnext/__tests__/RegisterCollector.test.ts +60 -13
  35. package/src/transpiler/logic/symbols/cnext/__tests__/ScopeCollector.test.ts +40 -37
  36. package/src/transpiler/logic/symbols/cnext/__tests__/StructCollector.test.ts +131 -45
  37. package/src/transpiler/logic/symbols/cnext/__tests__/TSymbolInfoAdapter.test.ts +223 -139
  38. package/src/transpiler/logic/symbols/cnext/__tests__/VariableCollector.test.ts +79 -25
  39. package/src/transpiler/logic/symbols/cnext/__tests__/testUtils.ts +53 -0
  40. package/src/transpiler/logic/symbols/cnext/adapters/TSymbolInfoAdapter.ts +83 -43
  41. package/src/transpiler/logic/symbols/cnext/collectors/BitmapCollector.ts +14 -13
  42. package/src/transpiler/logic/symbols/cnext/collectors/EnumCollector.ts +11 -10
  43. package/src/transpiler/logic/symbols/cnext/collectors/FunctionCollector.ts +83 -34
  44. package/src/transpiler/logic/symbols/cnext/collectors/RegisterCollector.ts +22 -18
  45. package/src/transpiler/logic/symbols/cnext/collectors/ScopeCollector.ts +53 -35
  46. package/src/transpiler/logic/symbols/cnext/collectors/StructCollector.ts +30 -23
  47. package/src/transpiler/logic/symbols/cnext/collectors/VariableCollector.ts +18 -19
  48. package/src/transpiler/logic/symbols/cnext/index.ts +36 -14
  49. package/src/transpiler/logic/symbols/cnext/types/IScopeCollectorResult.ts +2 -2
  50. package/src/transpiler/logic/symbols/cnext/utils/SymbolNameUtils.ts +27 -0
  51. package/src/transpiler/logic/symbols/cpp/__tests__/CppResolver.integration.test.ts +270 -0
  52. package/src/transpiler/logic/symbols/cpp/__tests__/testHelpers.ts +20 -0
  53. package/src/transpiler/logic/symbols/cpp/collectors/ClassCollector.ts +317 -0
  54. package/src/transpiler/logic/symbols/cpp/collectors/EnumCollector.ts +71 -0
  55. package/src/transpiler/logic/symbols/cpp/collectors/FunctionCollector.ts +155 -0
  56. package/src/transpiler/logic/symbols/cpp/collectors/NamespaceCollector.ts +65 -0
  57. package/src/transpiler/logic/symbols/cpp/collectors/TypeAliasCollector.ts +46 -0
  58. package/src/transpiler/logic/symbols/cpp/collectors/VariableCollector.ts +54 -0
  59. package/src/transpiler/logic/symbols/cpp/index.ts +366 -0
  60. package/src/transpiler/logic/symbols/cpp/utils/DeclaratorUtils.ts +248 -0
  61. package/src/transpiler/logic/symbols/shared/IExtractedParameter.ts +18 -0
  62. package/src/transpiler/logic/symbols/shared/ParameterExtractorUtils.ts +73 -0
  63. package/src/transpiler/output/codegen/CodeGenerator.ts +310 -2288
  64. package/src/transpiler/output/codegen/TypeRegistrationUtils.ts +4 -6
  65. package/src/transpiler/output/codegen/TypeResolver.ts +2 -2
  66. package/src/transpiler/output/codegen/TypeValidator.ts +5 -5
  67. package/src/transpiler/output/codegen/__tests__/CodeGenerator.test.ts +7 -1
  68. package/src/transpiler/output/codegen/__tests__/TypeRegistrationUtils.test.ts +36 -51
  69. package/src/transpiler/output/codegen/__tests__/TypeResolver.test.ts +20 -17
  70. package/src/transpiler/output/codegen/__tests__/TypeValidator.resolution.test.ts +3 -3
  71. package/src/transpiler/output/codegen/__tests__/TypeValidator.test.ts +1 -1
  72. package/src/transpiler/output/codegen/analysis/MemberChainAnalyzer.ts +1 -1
  73. package/src/transpiler/output/codegen/analysis/StringLengthCounter.ts +1 -1
  74. package/src/transpiler/output/codegen/analysis/__tests__/MemberChainAnalyzer.test.ts +9 -9
  75. package/src/transpiler/output/codegen/analysis/__tests__/StringLengthCounter.test.ts +12 -12
  76. package/src/transpiler/output/codegen/assignment/AssignmentClassifier.ts +13 -12
  77. package/src/transpiler/output/codegen/assignment/__tests__/AssignmentClassifier.test.ts +23 -17
  78. package/src/transpiler/output/codegen/assignment/handlers/ArrayHandlers.ts +2 -2
  79. package/src/transpiler/output/codegen/assignment/handlers/AssignmentHandlerUtils.ts +7 -1
  80. package/src/transpiler/output/codegen/assignment/handlers/BitAccessHandlers.ts +3 -3
  81. package/src/transpiler/output/codegen/assignment/handlers/BitmapHandlers.ts +9 -5
  82. package/src/transpiler/output/codegen/assignment/handlers/RegisterHandlers.ts +2 -1
  83. package/src/transpiler/output/codegen/assignment/handlers/SpecialHandlers.ts +4 -4
  84. package/src/transpiler/output/codegen/assignment/handlers/StringHandlers.ts +5 -5
  85. package/src/transpiler/output/codegen/assignment/handlers/__tests__/ArrayHandlers.test.ts +23 -25
  86. package/src/transpiler/output/codegen/assignment/handlers/__tests__/BitAccessHandlers.test.ts +20 -36
  87. package/src/transpiler/output/codegen/assignment/handlers/__tests__/BitmapHandlers.test.ts +18 -18
  88. package/src/transpiler/output/codegen/assignment/handlers/__tests__/SpecialHandlers.test.ts +42 -32
  89. package/src/transpiler/output/codegen/assignment/handlers/__tests__/handlerTestUtils.ts +5 -4
  90. package/src/transpiler/output/codegen/generators/declarationGenerators/ScopeGenerator.ts +21 -8
  91. package/src/transpiler/output/codegen/generators/declarationGenerators/ScopedRegisterGenerator.ts +3 -2
  92. package/src/transpiler/output/codegen/generators/expressions/CallExprGenerator.ts +14 -6
  93. package/src/transpiler/output/codegen/generators/expressions/CallExprUtils.ts +9 -3
  94. package/src/transpiler/output/codegen/generators/expressions/PostfixExpressionGenerator.ts +19 -16
  95. package/src/transpiler/output/codegen/generators/expressions/__tests__/CallExprGenerator.test.ts +24 -8
  96. package/src/transpiler/output/codegen/generators/expressions/__tests__/CallExprUtils.test.ts +4 -8
  97. package/src/transpiler/output/codegen/generators/expressions/__tests__/PostfixExpressionGenerator.test.ts +15 -2
  98. package/src/transpiler/output/codegen/helpers/ArgumentGenerator.ts +236 -0
  99. package/src/transpiler/output/codegen/helpers/ArrayInitHelper.ts +2 -1
  100. package/src/transpiler/output/codegen/helpers/AssignmentExpectedTypeResolver.ts +2 -2
  101. package/src/transpiler/output/codegen/helpers/AssignmentValidator.ts +3 -3
  102. package/src/transpiler/output/codegen/helpers/CppConstructorHelper.ts +3 -3
  103. package/src/transpiler/output/codegen/helpers/EnumAssignmentValidator.ts +1 -1
  104. package/src/transpiler/output/codegen/helpers/FunctionContextManager.ts +435 -0
  105. package/src/transpiler/output/codegen/helpers/StringDeclHelper.ts +2 -2
  106. package/src/transpiler/output/codegen/helpers/StringOperationsHelper.ts +203 -0
  107. package/src/transpiler/output/codegen/helpers/SymbolLookupHelper.ts +8 -12
  108. package/src/transpiler/output/codegen/helpers/TypeRegistrationEngine.ts +520 -0
  109. package/src/transpiler/output/codegen/helpers/VariableDeclHelper.ts +735 -0
  110. package/src/transpiler/output/codegen/helpers/VariableDeclarationFormatter.ts +1 -1
  111. package/src/transpiler/output/codegen/helpers/__tests__/ArgumentGenerator.test.ts +521 -0
  112. package/src/transpiler/output/codegen/helpers/__tests__/ArrayInitHelper.test.ts +1 -1
  113. package/src/transpiler/output/codegen/helpers/__tests__/AssignmentExpectedTypeResolver.test.ts +7 -7
  114. package/src/transpiler/output/codegen/helpers/__tests__/AssignmentValidator.test.ts +7 -7
  115. package/src/transpiler/output/codegen/helpers/__tests__/CppConstructorHelper.test.ts +4 -5
  116. package/src/transpiler/output/codegen/helpers/__tests__/EnumAssignmentValidator.test.ts +2 -2
  117. package/src/transpiler/output/codegen/helpers/__tests__/FunctionContextManager.test.ts +983 -0
  118. package/src/transpiler/output/codegen/helpers/__tests__/StringDeclHelper.test.ts +4 -4
  119. package/src/transpiler/output/codegen/helpers/__tests__/StringOperationsHelper.test.ts +269 -0
  120. package/src/transpiler/output/codegen/helpers/__tests__/SymbolLookupHelper.test.ts +31 -32
  121. package/src/transpiler/output/codegen/helpers/__tests__/TypeRegistrationEngine.test.ts +186 -0
  122. package/src/transpiler/output/codegen/helpers/__tests__/VariableDeclHelper.test.ts +460 -0
  123. package/src/transpiler/output/codegen/helpers/types/IArgumentGeneratorCallbacks.ts +32 -0
  124. package/src/transpiler/output/codegen/resolution/EnumTypeResolver.ts +7 -3
  125. package/src/transpiler/output/codegen/resolution/__tests__/EnumTypeResolver.test.ts +5 -5
  126. package/src/transpiler/output/codegen/types/IFunctionContextCallbacks.ts +12 -0
  127. package/src/transpiler/output/codegen/types/IVariableFormatInput.ts +1 -1
  128. package/src/transpiler/output/codegen/utils/QualifiedNameGenerator.ts +114 -0
  129. package/src/transpiler/output/codegen/utils/__tests__/QualifiedNameGenerator.test.ts +183 -0
  130. package/src/transpiler/output/headers/BaseHeaderGenerator.ts +4 -4
  131. package/src/transpiler/output/headers/ExternalTypeHeaderBuilder.ts +7 -7
  132. package/src/transpiler/output/headers/HeaderGenerator.ts +9 -7
  133. package/src/transpiler/output/headers/HeaderGeneratorUtils.ts +19 -20
  134. package/src/transpiler/output/headers/__tests__/BaseHeaderGenerator.test.ts +15 -18
  135. package/src/transpiler/output/headers/__tests__/CHeaderGenerator.test.ts +63 -64
  136. package/src/transpiler/output/headers/__tests__/CppHeaderGenerator.test.ts +36 -32
  137. package/src/transpiler/output/headers/__tests__/ExternalTypeHeaderBuilder.test.ts +26 -26
  138. package/src/transpiler/output/headers/__tests__/HeaderGenerator.test.ts +87 -59
  139. package/src/transpiler/output/headers/__tests__/HeaderGeneratorUtils.test.ts +57 -58
  140. package/src/transpiler/output/headers/adapters/HeaderSymbolAdapter.ts +222 -0
  141. package/src/transpiler/output/headers/adapters/__tests__/HeaderSymbolAdapter.test.ts +538 -0
  142. package/src/transpiler/output/headers/types/IGroupedSymbols.ts +8 -8
  143. package/src/transpiler/output/headers/types/IHeaderSymbol.ts +62 -0
  144. package/src/transpiler/state/CodeGenState.ts +109 -4
  145. package/src/transpiler/state/SymbolRegistry.ts +181 -0
  146. package/src/transpiler/{types → state}/TranspilerState.ts +1 -1
  147. package/src/transpiler/state/__tests__/CodeGenState.test.ts +277 -1
  148. package/src/transpiler/state/__tests__/SymbolRegistry.test.ts +249 -0
  149. package/src/transpiler/{types → state}/__tests__/TranspilerState.test.ts +1 -1
  150. package/src/transpiler/types/ICachedFileEntry.ts +1 -1
  151. package/src/transpiler/types/IConflict.ts +14 -0
  152. package/src/transpiler/types/ISerializedSymbol.ts +11 -0
  153. package/src/transpiler/types/TPrimitiveKind.ts +20 -0
  154. package/src/transpiler/types/TType.ts +103 -0
  155. package/src/transpiler/types/TVisibility.ts +6 -0
  156. package/src/transpiler/types/symbol-kinds/TSymbolKind.ts +10 -0
  157. package/src/transpiler/types/symbol-kinds/TSymbolKindC.ts +12 -0
  158. package/src/transpiler/types/symbol-kinds/TSymbolKindCNext.ts +16 -0
  159. package/src/transpiler/types/symbol-kinds/TSymbolKindCpp.ts +14 -0
  160. package/src/transpiler/types/symbols/IBaseSymbol.ts +31 -0
  161. package/src/transpiler/{logic/symbols/types → types/symbols}/IBitmapFieldInfo.ts +2 -2
  162. package/src/transpiler/types/symbols/IBitmapSymbol.ts +21 -0
  163. package/src/transpiler/{logic/symbols/types → types/symbols}/IEnumSymbol.ts +5 -6
  164. package/src/transpiler/types/symbols/IFieldInfo.ts +26 -0
  165. package/src/transpiler/types/symbols/IFunctionSymbol.ts +30 -0
  166. package/src/transpiler/types/symbols/IParameterInfo.ts +26 -0
  167. package/src/transpiler/{logic/symbols/types → types/symbols}/IRegisterMemberInfo.ts +4 -4
  168. package/src/transpiler/types/symbols/IRegisterSymbol.ts +18 -0
  169. package/src/transpiler/types/symbols/IScopeSymbol.ts +32 -0
  170. package/src/transpiler/{logic/symbols/types → types/symbols}/IStructFieldInfo.ts +2 -1
  171. package/src/transpiler/types/symbols/IStructSymbol.ts +15 -0
  172. package/src/transpiler/types/symbols/IVariableSymbol.ts +30 -0
  173. package/src/transpiler/types/symbols/SymbolGuards.ts +43 -0
  174. package/src/transpiler/types/symbols/TAnySymbol.ts +22 -0
  175. package/src/transpiler/types/symbols/TSymbol.ts +32 -0
  176. package/src/transpiler/types/symbols/__tests__/IBaseSymbol.test.ts +56 -0
  177. package/src/transpiler/types/symbols/__tests__/SymbolGuards.test.ts +57 -0
  178. package/src/transpiler/types/symbols/c/ICBaseSymbol.ts +28 -0
  179. package/src/transpiler/types/symbols/c/ICEnumMemberSymbol.ts +17 -0
  180. package/src/transpiler/types/symbols/c/ICEnumSymbol.ts +17 -0
  181. package/src/transpiler/types/symbols/c/ICFieldInfo.ts +16 -0
  182. package/src/transpiler/types/symbols/c/ICFunctionSymbol.ts +21 -0
  183. package/src/transpiler/types/symbols/c/ICParameterInfo.ts +19 -0
  184. package/src/transpiler/types/symbols/c/ICStructSymbol.ts +21 -0
  185. package/src/transpiler/types/symbols/c/ICTypedefSymbol.ts +14 -0
  186. package/src/transpiler/types/symbols/c/ICVariableSymbol.ts +26 -0
  187. package/src/transpiler/types/symbols/c/TCSymbol.ts +26 -0
  188. package/src/transpiler/types/symbols/cpp/ICppBaseSymbol.ts +31 -0
  189. package/src/transpiler/types/symbols/cpp/ICppClassSymbol.ts +15 -0
  190. package/src/transpiler/types/symbols/cpp/ICppEnumMemberSymbol.ts +14 -0
  191. package/src/transpiler/types/symbols/cpp/ICppEnumSymbol.ts +14 -0
  192. package/src/transpiler/types/symbols/cpp/ICppFieldInfo.ts +16 -0
  193. package/src/transpiler/types/symbols/cpp/ICppFunctionSymbol.ts +21 -0
  194. package/src/transpiler/types/symbols/cpp/ICppNamespaceSymbol.ts +11 -0
  195. package/src/transpiler/types/symbols/cpp/ICppParameterInfo.ts +19 -0
  196. package/src/transpiler/types/symbols/cpp/ICppStructSymbol.ts +16 -0
  197. package/src/transpiler/types/symbols/cpp/ICppTypeAliasSymbol.ts +14 -0
  198. package/src/transpiler/types/symbols/cpp/ICppVariableSymbol.ts +23 -0
  199. package/src/transpiler/types/symbols/cpp/TCppSymbol.ts +30 -0
  200. package/src/utils/CppNamespaceUtils.ts +3 -4
  201. package/src/utils/FunctionUtils.ts +92 -0
  202. package/src/utils/ParameterUtils.ts +55 -0
  203. package/src/utils/PrimitiveKindUtils.ts +33 -0
  204. package/src/utils/ScopeUtils.ts +105 -0
  205. package/src/utils/TTypeUtils.ts +159 -0
  206. package/src/utils/TypeResolver.ts +132 -0
  207. package/src/utils/__tests__/CppNamespaceUtils.test.ts +92 -99
  208. package/src/utils/__tests__/FunctionUtils.test.ts +284 -0
  209. package/src/utils/__tests__/ParameterUtils.test.ts +174 -0
  210. package/src/utils/__tests__/PrimitiveKindUtils.test.ts +59 -0
  211. package/src/utils/__tests__/ScopeUtils.test.ts +53 -0
  212. package/src/utils/__tests__/TTypeUtils.test.ts +245 -0
  213. package/src/utils/__tests__/TypeResolver.test.ts +332 -0
  214. package/src/utils/cache/CacheManager.ts +91 -50
  215. package/src/utils/cache/__tests__/CacheManager.test.ts +180 -114
  216. package/src/transpiler/logic/symbols/AutoConstUpdater.ts +0 -93
  217. package/src/transpiler/logic/symbols/CSymbolCollector.ts +0 -648
  218. package/src/transpiler/logic/symbols/CppSymbolCollector.ts +0 -874
  219. package/src/transpiler/logic/symbols/SymbolCollectorContext.ts +0 -68
  220. package/src/transpiler/logic/symbols/__tests__/AutoConstUpdater.test.ts +0 -418
  221. package/src/transpiler/logic/symbols/__tests__/CSymbolCollector.test.ts +0 -685
  222. package/src/transpiler/logic/symbols/__tests__/CppSymbolCollector.test.ts +0 -1146
  223. package/src/transpiler/logic/symbols/__tests__/SymbolCollectorContext.test.ts +0 -290
  224. package/src/transpiler/logic/symbols/__tests__/cTestHelpers.ts +0 -43
  225. package/src/transpiler/logic/symbols/__tests__/cppTestHelpers.ts +0 -40
  226. package/src/transpiler/logic/symbols/cnext/__tests__/TSymbolAdapter.test.ts +0 -595
  227. package/src/transpiler/logic/symbols/cnext/adapters/TSymbolAdapter.ts +0 -345
  228. package/src/transpiler/logic/symbols/types/IBaseSymbol.ts +0 -27
  229. package/src/transpiler/logic/symbols/types/IBitmapSymbol.ts +0 -23
  230. package/src/transpiler/logic/symbols/types/ICollectorContext.ts +0 -19
  231. package/src/transpiler/logic/symbols/types/IConflict.ts +0 -20
  232. package/src/transpiler/logic/symbols/types/IFieldInfo.ts +0 -18
  233. package/src/transpiler/logic/symbols/types/IFunctionSymbol.ts +0 -25
  234. package/src/transpiler/logic/symbols/types/IParameterInfo.ts +0 -24
  235. package/src/transpiler/logic/symbols/types/IRegisterSymbol.ts +0 -20
  236. package/src/transpiler/logic/symbols/types/IScopeSymbol.ts +0 -19
  237. package/src/transpiler/logic/symbols/types/IStructSymbol.ts +0 -16
  238. package/src/transpiler/logic/symbols/types/IVariableSymbol.ts +0 -30
  239. package/src/transpiler/logic/symbols/types/TSymbol.ts +0 -36
  240. package/src/transpiler/logic/symbols/types/__tests__/SymbolGuards.test.ts +0 -244
  241. package/src/transpiler/logic/symbols/types/typeGuards.ts +0 -44
  242. package/src/utils/types/ESymbolKind.ts +0 -19
  243. package/src/utils/types/ISymbol.ts +0 -64
  244. /package/src/transpiler/{types → constants}/BITMAP_BACKING_TYPE.ts +0 -0
  245. /package/src/transpiler/{types → constants}/BITMAP_SIZE.ts +0 -0
  246. /package/src/transpiler/{output/codegen → logic/analysis}/helpers/TransitiveModificationPropagator.ts +0 -0
  247. /package/src/transpiler/{output/codegen → logic/analysis}/helpers/__tests__/TransitiveModificationPropagator.test.ts +0 -0
@@ -183,9 +183,9 @@ describe("ArrayHandlers", () => {
183
183
  });
184
184
 
185
185
  it("performs bounds checking when type info available", () => {
186
- CodeGenState.typeRegistry = new Map([
186
+ HandlerTestUtils.setupMockTypeRegistry([
187
187
  ["matrix", { arrayDimensions: [10, 10], baseType: "i32" }],
188
- ]) as any;
188
+ ]);
189
189
  mockCheckArrayBounds.mockClear();
190
190
  HandlerTestUtils.setupMockGenerator({
191
191
  generateExpression: vi
@@ -242,9 +242,9 @@ describe("ArrayHandlers", () => {
242
242
  arrayHandlers.find(([kind]) => kind === AssignmentKind.ARRAY_SLICE)?.[1];
243
243
 
244
244
  it("generates memcpy for valid slice assignment", () => {
245
- CodeGenState.typeRegistry = new Map([
245
+ HandlerTestUtils.setupMockTypeRegistry([
246
246
  ["buffer", { arrayDimensions: [100], baseType: "u8" }],
247
- ]) as any;
247
+ ]);
248
248
  HandlerTestUtils.setupMockGenerator({
249
249
  tryEvaluateConstant: vi
250
250
  .fn()
@@ -267,7 +267,7 @@ describe("ArrayHandlers", () => {
267
267
  });
268
268
 
269
269
  it("generates memcpy for string slice", () => {
270
- CodeGenState.typeRegistry = new Map([
270
+ HandlerTestUtils.setupMockTypeRegistry([
271
271
  [
272
272
  "str",
273
273
  {
@@ -277,7 +277,7 @@ describe("ArrayHandlers", () => {
277
277
  baseType: "string",
278
278
  },
279
279
  ],
280
- ]) as any;
280
+ ]);
281
281
  HandlerTestUtils.setupMockGenerator({
282
282
  tryEvaluateConstant: vi
283
283
  .fn()
@@ -299,9 +299,9 @@ describe("ArrayHandlers", () => {
299
299
  });
300
300
 
301
301
  it("throws on compound assignment", () => {
302
- CodeGenState.typeRegistry = new Map([
302
+ HandlerTestUtils.setupMockTypeRegistry([
303
303
  ["buffer", { arrayDimensions: [100], baseType: "u8" }],
304
- ]) as any;
304
+ ]);
305
305
  HandlerTestUtils.setupMockGenerator({
306
306
  tryEvaluateConstant: vi
307
307
  .fn()
@@ -323,9 +323,9 @@ describe("ArrayHandlers", () => {
323
323
  });
324
324
 
325
325
  it("throws on multi-dimensional array", () => {
326
- CodeGenState.typeRegistry = new Map([
326
+ HandlerTestUtils.setupMockTypeRegistry([
327
327
  ["matrix", { arrayDimensions: [10, 10], baseType: "u8" }],
328
- ]) as any;
328
+ ]);
329
329
  const ctx = createMockContext({
330
330
  identifiers: ["matrix"],
331
331
  subscripts: [
@@ -340,9 +340,9 @@ describe("ArrayHandlers", () => {
340
340
  });
341
341
 
342
342
  it("throws on non-constant offset", () => {
343
- CodeGenState.typeRegistry = new Map([
343
+ HandlerTestUtils.setupMockTypeRegistry([
344
344
  ["buffer", { arrayDimensions: [100], baseType: "u8" }],
345
- ]) as any;
345
+ ]);
346
346
  HandlerTestUtils.setupMockGenerator({
347
347
  tryEvaluateConstant: vi.fn().mockReturnValue(undefined),
348
348
  });
@@ -359,9 +359,9 @@ describe("ArrayHandlers", () => {
359
359
  });
360
360
 
361
361
  it("throws on non-constant length", () => {
362
- CodeGenState.typeRegistry = new Map([
362
+ HandlerTestUtils.setupMockTypeRegistry([
363
363
  ["buffer", { arrayDimensions: [100], baseType: "u8" }],
364
- ]) as any;
364
+ ]);
365
365
  HandlerTestUtils.setupMockGenerator({
366
366
  tryEvaluateConstant: vi
367
367
  .fn()
@@ -381,9 +381,9 @@ describe("ArrayHandlers", () => {
381
381
  });
382
382
 
383
383
  it("throws on out of bounds access", () => {
384
- CodeGenState.typeRegistry = new Map([
384
+ HandlerTestUtils.setupMockTypeRegistry([
385
385
  ["buffer", { arrayDimensions: [50], baseType: "u8" }],
386
- ]) as any;
386
+ ]);
387
387
  HandlerTestUtils.setupMockGenerator({
388
388
  tryEvaluateConstant: vi
389
389
  .fn()
@@ -404,9 +404,9 @@ describe("ArrayHandlers", () => {
404
404
  });
405
405
 
406
406
  it("throws on negative offset", () => {
407
- CodeGenState.typeRegistry = new Map([
407
+ HandlerTestUtils.setupMockTypeRegistry([
408
408
  ["buffer", { arrayDimensions: [100], baseType: "u8" }],
409
- ]) as any;
409
+ ]);
410
410
  HandlerTestUtils.setupMockGenerator({
411
411
  tryEvaluateConstant: vi
412
412
  .fn()
@@ -427,9 +427,9 @@ describe("ArrayHandlers", () => {
427
427
  });
428
428
 
429
429
  it("throws on zero length", () => {
430
- CodeGenState.typeRegistry = new Map([
430
+ HandlerTestUtils.setupMockTypeRegistry([
431
431
  ["buffer", { arrayDimensions: [100], baseType: "u8" }],
432
- ]) as any;
432
+ ]);
433
433
  HandlerTestUtils.setupMockGenerator({
434
434
  tryEvaluateConstant: vi
435
435
  .fn()
@@ -450,9 +450,9 @@ describe("ArrayHandlers", () => {
450
450
  });
451
451
 
452
452
  it("throws on negative length", () => {
453
- CodeGenState.typeRegistry = new Map([
453
+ HandlerTestUtils.setupMockTypeRegistry([
454
454
  ["buffer", { arrayDimensions: [100], baseType: "u8" }],
455
- ]) as any;
455
+ ]);
456
456
  HandlerTestUtils.setupMockGenerator({
457
457
  tryEvaluateConstant: vi
458
458
  .fn()
@@ -473,9 +473,7 @@ describe("ArrayHandlers", () => {
473
473
  });
474
474
 
475
475
  it("throws when buffer size cannot be determined", () => {
476
- CodeGenState.typeRegistry = new Map([
477
- ["unknown", { baseType: "u8" }],
478
- ]) as any;
476
+ HandlerTestUtils.setupMockTypeRegistry([["unknown", { baseType: "u8" }]]);
479
477
  HandlerTestUtils.setupMockGenerator({
480
478
  tryEvaluateConstant: vi
481
479
  .fn()
@@ -76,9 +76,7 @@ describe("BitAccessHandlers", () => {
76
76
  )?.[1];
77
77
 
78
78
  it("generates single bit read-modify-write", () => {
79
- CodeGenState.typeRegistry = new Map([
80
- ["flags", { baseType: "u32" }],
81
- ]) as any;
79
+ HandlerTestUtils.setupMockTypeRegistry([["flags", { baseType: "u32" }]]);
82
80
  HandlerTestUtils.setupMockGenerator({
83
81
  generateExpression: vi.fn().mockReturnValue("3"),
84
82
  });
@@ -92,9 +90,7 @@ describe("BitAccessHandlers", () => {
92
90
  });
93
91
 
94
92
  it("uses 1ULL for 64-bit types", () => {
95
- CodeGenState.typeRegistry = new Map([
96
- ["flags", { baseType: "u64" }],
97
- ]) as any;
93
+ HandlerTestUtils.setupMockTypeRegistry([["flags", { baseType: "u64" }]]);
98
94
  HandlerTestUtils.setupMockGenerator({
99
95
  generateExpression: vi.fn().mockReturnValue("32"),
100
96
  });
@@ -108,9 +104,7 @@ describe("BitAccessHandlers", () => {
108
104
  });
109
105
 
110
106
  it("uses 1ULL for signed 64-bit types", () => {
111
- CodeGenState.typeRegistry = new Map([
112
- ["flags", { baseType: "i64" }],
113
- ]) as any;
107
+ HandlerTestUtils.setupMockTypeRegistry([["flags", { baseType: "i64" }]]);
114
108
  HandlerTestUtils.setupMockGenerator({
115
109
  generateExpression: vi.fn().mockReturnValue("bit"),
116
110
  });
@@ -123,9 +117,7 @@ describe("BitAccessHandlers", () => {
123
117
  });
124
118
 
125
119
  it("converts true to 1", () => {
126
- CodeGenState.typeRegistry = new Map([
127
- ["flags", { baseType: "u8" }],
128
- ]) as any;
120
+ HandlerTestUtils.setupMockTypeRegistry([["flags", { baseType: "u8" }]]);
129
121
  HandlerTestUtils.setupMockGenerator({
130
122
  generateExpression: vi.fn().mockReturnValue("0"),
131
123
  });
@@ -139,9 +131,7 @@ describe("BitAccessHandlers", () => {
139
131
  });
140
132
 
141
133
  it("converts false to 0", () => {
142
- CodeGenState.typeRegistry = new Map([
143
- ["flags", { baseType: "u8" }],
144
- ]) as any;
134
+ HandlerTestUtils.setupMockTypeRegistry([["flags", { baseType: "u8" }]]);
145
135
  HandlerTestUtils.setupMockGenerator({
146
136
  generateExpression: vi.fn().mockReturnValue("0"),
147
137
  });
@@ -155,7 +145,7 @@ describe("BitAccessHandlers", () => {
155
145
  });
156
146
 
157
147
  it("delegates to float bit write for float types", () => {
158
- CodeGenState.typeRegistry = new Map([["f", { baseType: "f32" }]]) as any;
148
+ HandlerTestUtils.setupMockTypeRegistry([["f", { baseType: "f32" }]]);
159
149
  const generateFloatBitWrite = vi
160
150
  .fn()
161
151
  .mockReturnValue("float_bit_write_result");
@@ -192,9 +182,7 @@ describe("BitAccessHandlers", () => {
192
182
  )?.[1];
193
183
 
194
184
  it("generates bit range read-modify-write", () => {
195
- CodeGenState.typeRegistry = new Map([
196
- ["flags", { baseType: "u32" }],
197
- ]) as any;
185
+ HandlerTestUtils.setupMockTypeRegistry([["flags", { baseType: "u32" }]]);
198
186
  HandlerTestUtils.setupMockGenerator({
199
187
  generateExpression: vi
200
188
  .fn()
@@ -214,9 +202,7 @@ describe("BitAccessHandlers", () => {
214
202
  });
215
203
 
216
204
  it("uses correct mask for bit range", () => {
217
- CodeGenState.typeRegistry = new Map([
218
- ["data", { baseType: "u16" }],
219
- ]) as any;
205
+ HandlerTestUtils.setupMockTypeRegistry([["data", { baseType: "u16" }]]);
220
206
  HandlerTestUtils.setupMockGenerator({
221
207
  generateExpression: vi
222
208
  .fn()
@@ -237,9 +223,7 @@ describe("BitAccessHandlers", () => {
237
223
  });
238
224
 
239
225
  it("uses ULL suffix for 64-bit bit range mask", () => {
240
- CodeGenState.typeRegistry = new Map([
241
- ["flags", { baseType: "u64" }],
242
- ]) as any;
226
+ HandlerTestUtils.setupMockTypeRegistry([["flags", { baseType: "u64" }]]);
243
227
  HandlerTestUtils.setupMockGenerator({
244
228
  generateExpression: vi
245
229
  .fn()
@@ -261,7 +245,7 @@ describe("BitAccessHandlers", () => {
261
245
  });
262
246
 
263
247
  it("delegates to float bit write for float types", () => {
264
- CodeGenState.typeRegistry = new Map([["f", { baseType: "f32" }]]) as any;
248
+ HandlerTestUtils.setupMockTypeRegistry([["f", { baseType: "f32" }]]);
265
249
  const generateFloatBitWrite = vi
266
250
  .fn()
267
251
  .mockReturnValue("float_range_write_result");
@@ -344,9 +328,9 @@ describe("BitAccessHandlers", () => {
344
328
  )?.[1];
345
329
 
346
330
  it("generates array element bit assignment for 1D array", () => {
347
- CodeGenState.typeRegistry = new Map([
331
+ HandlerTestUtils.setupMockTypeRegistry([
348
332
  ["arr", { baseType: "u32", arrayDimensions: [10] }],
349
- ]) as any;
333
+ ]);
350
334
  HandlerTestUtils.setupMockGenerator({
351
335
  generateExpression: vi
352
336
  .fn()
@@ -368,9 +352,9 @@ describe("BitAccessHandlers", () => {
368
352
  });
369
353
 
370
354
  it("generates array element bit assignment for 2D array", () => {
371
- CodeGenState.typeRegistry = new Map([
355
+ HandlerTestUtils.setupMockTypeRegistry([
372
356
  ["matrix", { baseType: "u16", arrayDimensions: [10, 10] }],
373
- ]) as any;
357
+ ]);
374
358
  HandlerTestUtils.setupMockGenerator({
375
359
  generateExpression: vi
376
360
  .fn()
@@ -394,9 +378,9 @@ describe("BitAccessHandlers", () => {
394
378
  });
395
379
 
396
380
  it("uses 1ULL for 64-bit array element", () => {
397
- CodeGenState.typeRegistry = new Map([
381
+ HandlerTestUtils.setupMockTypeRegistry([
398
382
  ["arr", { baseType: "u64", arrayDimensions: [5] }],
399
- ]) as any;
383
+ ]);
400
384
  HandlerTestUtils.setupMockGenerator({
401
385
  generateExpression: vi
402
386
  .fn()
@@ -414,9 +398,9 @@ describe("BitAccessHandlers", () => {
414
398
  });
415
399
 
416
400
  it("throws when variable is not an array", () => {
417
- CodeGenState.typeRegistry = new Map([
401
+ HandlerTestUtils.setupMockTypeRegistry([
418
402
  ["notArray", { baseType: "u32" }],
419
- ]) as any;
403
+ ]);
420
404
  const ctx = createMockContext({
421
405
  identifiers: ["notArray"],
422
406
  });
@@ -425,9 +409,9 @@ describe("BitAccessHandlers", () => {
425
409
  });
426
410
 
427
411
  it("throws on compound assignment", () => {
428
- CodeGenState.typeRegistry = new Map([
412
+ HandlerTestUtils.setupMockTypeRegistry([
429
413
  ["arr", { baseType: "u32", arrayDimensions: [10] }],
430
- ]) as any;
414
+ ]);
431
415
  const ctx = createMockContext({
432
416
  isCompound: true,
433
417
  cnextOp: "+<-",
@@ -89,9 +89,9 @@ describe("BitmapHandlers", () => {
89
89
  )?.[1];
90
90
 
91
91
  it("generates single-bit read-modify-write", () => {
92
- CodeGenState.typeRegistry = new Map([
92
+ HandlerTestUtils.setupMockTypeRegistry([
93
93
  ["flags", { bitmapTypeName: "StatusFlags", baseType: "u8" }],
94
- ]) as any;
94
+ ]);
95
95
  HandlerTestUtils.setupMockSymbols({
96
96
  bitmapFields: new Map([
97
97
  ["StatusFlags", new Map([["Running", { offset: 0, width: 1 }]])],
@@ -107,9 +107,9 @@ describe("BitmapHandlers", () => {
107
107
  });
108
108
 
109
109
  it("generates single-bit write with correct offset", () => {
110
- CodeGenState.typeRegistry = new Map([
110
+ HandlerTestUtils.setupMockTypeRegistry([
111
111
  ["flags", { bitmapTypeName: "StatusFlags", baseType: "u8" }],
112
- ]) as any;
112
+ ]);
113
113
  HandlerTestUtils.setupMockSymbols({
114
114
  bitmapFields: new Map([
115
115
  ["StatusFlags", new Map([["Active", { offset: 3, width: 1 }]])],
@@ -125,9 +125,9 @@ describe("BitmapHandlers", () => {
125
125
  });
126
126
 
127
127
  it("throws on unknown bitmap field", () => {
128
- CodeGenState.typeRegistry = new Map([
128
+ HandlerTestUtils.setupMockTypeRegistry([
129
129
  ["flags", { bitmapTypeName: "StatusFlags", baseType: "u8" }],
130
- ]) as any;
130
+ ]);
131
131
  HandlerTestUtils.setupMockSymbols({
132
132
  bitmapFields: new Map([["StatusFlags", new Map()]]),
133
133
  });
@@ -141,9 +141,9 @@ describe("BitmapHandlers", () => {
141
141
  });
142
142
 
143
143
  it("throws on compound assignment", () => {
144
- CodeGenState.typeRegistry = new Map([
144
+ HandlerTestUtils.setupMockTypeRegistry([
145
145
  ["flags", { bitmapTypeName: "StatusFlags", baseType: "u8" }],
146
- ]) as any;
146
+ ]);
147
147
  HandlerTestUtils.setupMockSymbols({
148
148
  bitmapFields: new Map([
149
149
  ["StatusFlags", new Map([["Running", { offset: 0, width: 1 }]])],
@@ -160,9 +160,9 @@ describe("BitmapHandlers", () => {
160
160
  });
161
161
 
162
162
  it("validates bitmap field literal", () => {
163
- CodeGenState.typeRegistry = new Map([
163
+ HandlerTestUtils.setupMockTypeRegistry([
164
164
  ["flags", { bitmapTypeName: "StatusFlags", baseType: "u8" }],
165
- ]) as any;
165
+ ]);
166
166
  HandlerTestUtils.setupMockSymbols({
167
167
  bitmapFields: new Map([
168
168
  ["StatusFlags", new Map([["Running", { offset: 0, width: 1 }]])],
@@ -188,9 +188,9 @@ describe("BitmapHandlers", () => {
188
188
  )?.[1];
189
189
 
190
190
  it("generates multi-bit read-modify-write with mask", () => {
191
- CodeGenState.typeRegistry = new Map([
191
+ HandlerTestUtils.setupMockTypeRegistry([
192
192
  ["flags", { bitmapTypeName: "StatusFlags", baseType: "u8" }],
193
- ]) as any;
193
+ ]);
194
194
  HandlerTestUtils.setupMockSymbols({
195
195
  bitmapFields: new Map([
196
196
  ["StatusFlags", new Map([["Mode", { offset: 4, width: 3 }]])],
@@ -210,9 +210,9 @@ describe("BitmapHandlers", () => {
210
210
  });
211
211
 
212
212
  it("generates correct mask for 2-bit field", () => {
213
- CodeGenState.typeRegistry = new Map([
213
+ HandlerTestUtils.setupMockTypeRegistry([
214
214
  ["config", { bitmapTypeName: "Config", baseType: "u8" }],
215
- ]) as any;
215
+ ]);
216
216
  HandlerTestUtils.setupMockSymbols({
217
217
  bitmapFields: new Map([
218
218
  ["Config", new Map([["Priority", { offset: 0, width: 2 }]])],
@@ -236,9 +236,9 @@ describe("BitmapHandlers", () => {
236
236
  )?.[1];
237
237
 
238
238
  it("generates array element bitmap field assignment", () => {
239
- CodeGenState.typeRegistry = new Map([
239
+ HandlerTestUtils.setupMockTypeRegistry([
240
240
  ["flagsArray", { bitmapTypeName: "StatusFlags", baseType: "u8" }],
241
- ]) as any;
241
+ ]);
242
242
  HandlerTestUtils.setupMockGenerator({
243
243
  generateExpression: vi.fn().mockReturnValue("i"),
244
244
  });
@@ -266,9 +266,9 @@ describe("BitmapHandlers", () => {
266
266
  )?.[1];
267
267
 
268
268
  it("generates struct member bitmap field assignment", () => {
269
- CodeGenState.typeRegistry = new Map([
269
+ HandlerTestUtils.setupMockTypeRegistry([
270
270
  ["device", { baseType: "Device" }],
271
- ]) as any;
271
+ ]);
272
272
  HandlerTestUtils.setupMockSymbols({
273
273
  bitmapFields: new Map([
274
274
  ["StatusFlags", new Map([["Active", { offset: 2, width: 1 }]])],
@@ -71,9 +71,9 @@ describe("SpecialHandlers", () => {
71
71
  specialHandlers.find(([kind]) => kind === AssignmentKind.ATOMIC_RMW)?.[1];
72
72
 
73
73
  it("delegates to generateAtomicRMW for simple identifier", () => {
74
- CodeGenState.typeRegistry = new Map([
74
+ HandlerTestUtils.setupMockTypeRegistry([
75
75
  ["counter", { baseType: "u32", isAtomic: true }],
76
- ]) as any;
76
+ ]);
77
77
  const generateAtomicRMW = vi.fn().mockReturnValue("LDREX/STREX pattern");
78
78
  const generateAssignmentTarget = vi.fn().mockReturnValue("counter");
79
79
  HandlerTestUtils.setupMockGenerator({
@@ -84,18 +84,23 @@ describe("SpecialHandlers", () => {
84
84
 
85
85
  const result = getHandler()!(ctx);
86
86
 
87
- expect(generateAtomicRMW).toHaveBeenCalledWith("counter", "+=", "1", {
88
- baseType: "u32",
89
- isAtomic: true,
90
- });
87
+ expect(generateAtomicRMW).toHaveBeenCalledWith(
88
+ "counter",
89
+ "+=",
90
+ "1",
91
+ expect.objectContaining({
92
+ baseType: "u32",
93
+ isAtomic: true,
94
+ }),
95
+ );
91
96
  expect(result).toBe("LDREX/STREX pattern");
92
97
  });
93
98
 
94
99
  it("handles this.member atomic variable", () => {
95
100
  CodeGenState.currentScope = "Motor";
96
- CodeGenState.typeRegistry = new Map([
101
+ HandlerTestUtils.setupMockTypeRegistry([
97
102
  ["Motor_count", { baseType: "u32", isAtomic: true }],
98
- ]) as any;
103
+ ]);
99
104
  const generateAtomicRMW = vi.fn().mockReturnValue("atomic result");
100
105
  const generateAssignmentTarget = vi.fn().mockReturnValue("Motor_count");
101
106
  HandlerTestUtils.setupMockGenerator({
@@ -110,17 +115,22 @@ describe("SpecialHandlers", () => {
110
115
 
111
116
  const result = getHandler()!(ctx);
112
117
 
113
- expect(generateAtomicRMW).toHaveBeenCalledWith("Motor_count", "+=", "1", {
114
- baseType: "u32",
115
- isAtomic: true,
116
- });
118
+ expect(generateAtomicRMW).toHaveBeenCalledWith(
119
+ "Motor_count",
120
+ "+=",
121
+ "1",
122
+ expect.objectContaining({
123
+ baseType: "u32",
124
+ isAtomic: true,
125
+ }),
126
+ );
117
127
  expect(result).toBe("atomic result");
118
128
  });
119
129
 
120
130
  it("handles global.member atomic variable", () => {
121
- CodeGenState.typeRegistry = new Map([
131
+ HandlerTestUtils.setupMockTypeRegistry([
122
132
  ["globalCounter", { baseType: "u32", isAtomic: true }],
123
- ]) as any;
133
+ ]);
124
134
  const generateAtomicRMW = vi.fn().mockReturnValue("global atomic result");
125
135
  const generateAssignmentTarget = vi.fn().mockReturnValue("globalCounter");
126
136
  HandlerTestUtils.setupMockGenerator({
@@ -139,9 +149,9 @@ describe("SpecialHandlers", () => {
139
149
  });
140
150
 
141
151
  it("handles subtract operation", () => {
142
- CodeGenState.typeRegistry = new Map([
152
+ HandlerTestUtils.setupMockTypeRegistry([
143
153
  ["counter", { baseType: "u32", isAtomic: true }],
144
- ]) as any;
154
+ ]);
145
155
  const generateAtomicRMW = vi.fn().mockReturnValue("atomic sub");
146
156
  const generateAssignmentTarget = vi.fn().mockReturnValue("counter");
147
157
  HandlerTestUtils.setupMockGenerator({
@@ -171,9 +181,9 @@ describe("SpecialHandlers", () => {
171
181
  )?.[1];
172
182
 
173
183
  it("generates clamp add helper for u8", () => {
174
- CodeGenState.typeRegistry = new Map([
184
+ HandlerTestUtils.setupMockTypeRegistry([
175
185
  ["saturated", { baseType: "u8", overflowBehavior: "clamp" }],
176
- ]) as any;
186
+ ]);
177
187
  const generateAssignmentTarget = vi.fn().mockReturnValue("saturated");
178
188
  HandlerTestUtils.setupMockGenerator({
179
189
  generateAssignmentTarget,
@@ -190,9 +200,9 @@ describe("SpecialHandlers", () => {
190
200
  });
191
201
 
192
202
  it("generates clamp sub helper for u16", () => {
193
- CodeGenState.typeRegistry = new Map([
203
+ HandlerTestUtils.setupMockTypeRegistry([
194
204
  ["value", { baseType: "u16", overflowBehavior: "clamp" }],
195
- ]) as any;
205
+ ]);
196
206
  const generateAssignmentTarget = vi.fn().mockReturnValue("value");
197
207
  HandlerTestUtils.setupMockGenerator({
198
208
  generateAssignmentTarget,
@@ -211,9 +221,9 @@ describe("SpecialHandlers", () => {
211
221
  });
212
222
 
213
223
  it("generates clamp mul helper for u32", () => {
214
- CodeGenState.typeRegistry = new Map([
224
+ HandlerTestUtils.setupMockTypeRegistry([
215
225
  ["result", { baseType: "u32", overflowBehavior: "clamp" }],
216
- ]) as any;
226
+ ]);
217
227
  const generateAssignmentTarget = vi.fn().mockReturnValue("result");
218
228
  HandlerTestUtils.setupMockGenerator({
219
229
  generateAssignmentTarget,
@@ -232,9 +242,9 @@ describe("SpecialHandlers", () => {
232
242
  });
233
243
 
234
244
  it("uses native arithmetic for float types", () => {
235
- CodeGenState.typeRegistry = new Map([
245
+ HandlerTestUtils.setupMockTypeRegistry([
236
246
  ["f", { baseType: "f32", overflowBehavior: "clamp" }],
237
- ]) as any;
247
+ ]);
238
248
  const generateAssignmentTarget = vi.fn().mockReturnValue("f");
239
249
  HandlerTestUtils.setupMockGenerator({
240
250
  generateAssignmentTarget,
@@ -251,9 +261,9 @@ describe("SpecialHandlers", () => {
251
261
  });
252
262
 
253
263
  it("uses native arithmetic for f64 type", () => {
254
- CodeGenState.typeRegistry = new Map([
264
+ HandlerTestUtils.setupMockTypeRegistry([
255
265
  ["d", { baseType: "f64", overflowBehavior: "clamp" }],
256
- ]) as any;
266
+ ]);
257
267
  const generateAssignmentTarget = vi.fn().mockReturnValue("d");
258
268
  HandlerTestUtils.setupMockGenerator({
259
269
  generateAssignmentTarget,
@@ -270,9 +280,9 @@ describe("SpecialHandlers", () => {
270
280
  });
271
281
 
272
282
  it("falls back to native for unsupported operators", () => {
273
- CodeGenState.typeRegistry = new Map([
283
+ HandlerTestUtils.setupMockTypeRegistry([
274
284
  ["value", { baseType: "u32", overflowBehavior: "clamp" }],
275
- ]) as any;
285
+ ]);
276
286
  const generateAssignmentTarget = vi.fn().mockReturnValue("value");
277
287
  HandlerTestUtils.setupMockGenerator({
278
288
  generateAssignmentTarget,
@@ -292,9 +302,9 @@ describe("SpecialHandlers", () => {
292
302
 
293
303
  it("handles this.member with clamp", () => {
294
304
  CodeGenState.currentScope = "Motor";
295
- CodeGenState.typeRegistry = new Map([
305
+ HandlerTestUtils.setupMockTypeRegistry([
296
306
  ["Motor_speed", { baseType: "u8", overflowBehavior: "clamp" }],
297
- ]) as any;
307
+ ]);
298
308
  const generateAssignmentTarget = vi.fn().mockReturnValue("Motor_speed");
299
309
  HandlerTestUtils.setupMockGenerator({
300
310
  generateAssignmentTarget,
@@ -313,9 +323,9 @@ describe("SpecialHandlers", () => {
313
323
  });
314
324
 
315
325
  it("handles global.member with clamp", () => {
316
- CodeGenState.typeRegistry = new Map([
326
+ HandlerTestUtils.setupMockTypeRegistry([
317
327
  ["globalValue", { baseType: "i16", overflowBehavior: "clamp" }],
318
- ]) as any;
328
+ ]);
319
329
  const generateAssignmentTarget = vi.fn().mockReturnValue("globalValue");
320
330
  HandlerTestUtils.setupMockGenerator({
321
331
  generateAssignmentTarget,
@@ -141,15 +141,16 @@ function createTypeInfo(overrides: Partial<TTypeInfo> = {}): TTypeInfo {
141
141
  }
142
142
 
143
143
  /**
144
- * Set up CodeGenState.typeRegistry with typed entries.
144
+ * Set up CodeGenState type registry with typed entries.
145
145
  * Entries only need to specify the fields relevant to the test.
146
+ * Uses setVariableTypeInfo to properly populate the registry.
146
147
  */
147
148
  function setupMockTypeRegistry(
148
149
  entries: Array<[string, Partial<TTypeInfo>]>,
149
150
  ): void {
150
- CodeGenState.typeRegistry = new Map(
151
- entries.map(([name, partial]) => [name, createTypeInfo(partial)]),
152
- );
151
+ for (const [name, partial] of entries) {
152
+ CodeGenState.setVariableTypeInfo(name, createTypeInfo(partial));
153
+ }
153
154
  }
154
155
 
155
156
  export default class HandlerTestUtils {