c-next 0.1.65 → 0.1.67

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 (73) hide show
  1. package/package.json +5 -1
  2. package/src/transpiler/Transpiler.ts +49 -42
  3. package/src/transpiler/logic/symbols/cnext/__tests__/TSymbolAdapter.test.ts +129 -0
  4. package/src/transpiler/logic/symbols/cnext/adapters/TSymbolAdapter.ts +27 -3
  5. package/src/transpiler/output/codegen/CodeGenerator.ts +131 -186
  6. package/src/transpiler/output/codegen/TypeResolver.ts +2 -2
  7. package/src/transpiler/output/codegen/TypeValidator.ts +1 -1
  8. package/src/transpiler/output/codegen/__tests__/CodeGenerator.coverage.test.ts +1087 -0
  9. package/src/transpiler/output/codegen/__tests__/CodeGenerator.test.ts +665 -1315
  10. package/src/transpiler/output/codegen/__tests__/TypeResolver.test.ts +1 -1
  11. package/src/transpiler/output/codegen/__tests__/TypeValidator.resolution.test.ts +1 -1
  12. package/src/transpiler/output/codegen/__tests__/TypeValidator.test.ts +1 -1
  13. package/src/transpiler/output/codegen/analysis/MemberChainAnalyzer.ts +1 -1
  14. package/src/transpiler/output/codegen/analysis/StringLengthCounter.ts +1 -1
  15. package/src/transpiler/output/codegen/analysis/__tests__/MemberChainAnalyzer.test.ts +1 -1
  16. package/src/transpiler/output/codegen/analysis/__tests__/StringLengthCounter.test.ts +1 -1
  17. package/src/transpiler/output/codegen/assignment/AssignmentClassifier.ts +1 -1
  18. package/src/transpiler/output/codegen/assignment/__tests__/AssignmentClassifier.test.ts +1 -1
  19. package/src/transpiler/output/codegen/assignment/handlers/AccessPatternHandlers.ts +24 -27
  20. package/src/transpiler/output/codegen/assignment/handlers/ArrayHandlers.ts +25 -18
  21. package/src/transpiler/output/codegen/assignment/handlers/BitAccessHandlers.ts +27 -33
  22. package/src/transpiler/output/codegen/assignment/handlers/BitmapHandlers.ts +39 -42
  23. package/src/transpiler/output/codegen/assignment/handlers/RegisterHandlers.ts +39 -97
  24. package/src/transpiler/output/codegen/assignment/handlers/RegisterUtils.ts +75 -0
  25. package/src/transpiler/output/codegen/assignment/handlers/SimpleHandler.ts +9 -6
  26. package/src/transpiler/output/codegen/assignment/handlers/SpecialHandlers.ts +30 -22
  27. package/src/transpiler/output/codegen/assignment/handlers/StringHandlers.ts +42 -50
  28. package/src/transpiler/output/codegen/assignment/handlers/TAssignmentHandler.ts +6 -5
  29. package/src/transpiler/output/codegen/assignment/handlers/__tests__/AccessPatternHandlers.test.ts +81 -134
  30. package/src/transpiler/output/codegen/assignment/handlers/__tests__/ArrayHandlers.test.ts +85 -124
  31. package/src/transpiler/output/codegen/assignment/handlers/__tests__/BitAccessHandlers.test.ts +82 -124
  32. package/src/transpiler/output/codegen/assignment/handlers/__tests__/BitmapHandlers.test.ts +135 -297
  33. package/src/transpiler/output/codegen/assignment/handlers/__tests__/RegisterHandlers.test.ts +105 -227
  34. package/src/transpiler/output/codegen/assignment/handlers/__tests__/RegisterUtils.test.ts +214 -1
  35. package/src/transpiler/output/codegen/assignment/handlers/__tests__/SpecialHandlers.test.ts +66 -127
  36. package/src/transpiler/output/codegen/assignment/handlers/__tests__/StringHandlers.test.ts +37 -83
  37. package/src/transpiler/output/codegen/assignment/handlers/__tests__/handlerTestUtils.ts +162 -0
  38. package/src/transpiler/output/codegen/generators/expressions/PostfixExpressionGenerator.ts +618 -12
  39. package/src/transpiler/output/codegen/generators/expressions/__tests__/PostfixExpressionGenerator.test.ts +819 -0
  40. package/src/transpiler/output/codegen/helpers/ArrayInitHelper.ts +1 -1
  41. package/src/transpiler/output/codegen/helpers/AssignmentExpectedTypeResolver.ts +1 -1
  42. package/src/transpiler/output/codegen/helpers/AssignmentValidator.ts +1 -1
  43. package/src/transpiler/output/codegen/helpers/CppModeHelper.ts +1 -1
  44. package/src/transpiler/output/codegen/helpers/EnumAssignmentValidator.ts +1 -1
  45. package/src/transpiler/output/codegen/helpers/FloatBitHelper.ts +1 -1
  46. package/src/transpiler/output/codegen/helpers/ParameterInputAdapter.ts +337 -0
  47. package/src/transpiler/output/codegen/helpers/ParameterSignatureBuilder.ts +135 -0
  48. package/src/transpiler/output/codegen/helpers/StringDeclHelper.ts +1 -1
  49. package/src/transpiler/output/codegen/helpers/VariableDeclarationFormatter.ts +118 -0
  50. package/src/transpiler/output/codegen/helpers/__tests__/ArrayInitHelper.test.ts +1 -1
  51. package/src/transpiler/output/codegen/helpers/__tests__/AssignmentExpectedTypeResolver.test.ts +1 -1
  52. package/src/transpiler/output/codegen/helpers/__tests__/AssignmentValidator.test.ts +1 -1
  53. package/src/transpiler/output/codegen/helpers/__tests__/CppModeHelper.test.ts +1 -1
  54. package/src/transpiler/output/codegen/helpers/__tests__/EnumAssignmentValidator.test.ts +1 -1
  55. package/src/transpiler/output/codegen/helpers/__tests__/FloatBitHelper.test.ts +1 -1
  56. package/src/transpiler/output/codegen/helpers/__tests__/ParameterInputAdapter.test.ts +426 -0
  57. package/src/transpiler/output/codegen/helpers/__tests__/ParameterSignatureBuilder.test.ts +315 -0
  58. package/src/transpiler/output/codegen/helpers/__tests__/StringDeclHelper.test.ts +1 -1
  59. package/src/transpiler/output/codegen/helpers/__tests__/VariableDeclarationFormatter.test.ts +333 -0
  60. package/src/transpiler/output/codegen/resolution/EnumTypeResolver.ts +1 -1
  61. package/src/transpiler/output/codegen/resolution/ScopeResolver.ts +1 -1
  62. package/src/transpiler/output/codegen/resolution/SizeofResolver.ts +1 -1
  63. package/src/transpiler/output/codegen/resolution/__tests__/EnumTypeResolver.test.ts +1 -1
  64. package/src/transpiler/output/codegen/resolution/__tests__/SizeofResolver.test.ts +1 -1
  65. package/src/transpiler/output/codegen/types/ICodeGenApi.ts +57 -0
  66. package/src/transpiler/output/codegen/types/IParameterInput.ts +58 -0
  67. package/src/transpiler/output/codegen/types/IVariableFormatInput.ts +51 -0
  68. package/src/transpiler/output/headers/BaseHeaderGenerator.ts +20 -35
  69. package/src/transpiler/output/headers/HeaderGeneratorUtils.ts +21 -48
  70. package/src/transpiler/output/headers/__tests__/HeaderGeneratorUtils.test.ts +0 -64
  71. package/src/transpiler/{output/codegen → state}/CodeGenState.ts +46 -26
  72. package/src/transpiler/{output/codegen → state}/__tests__/CodeGenState.test.ts +12 -2
  73. package/src/transpiler/output/codegen/assignment/handlers/IHandlerDeps.ts +0 -161
@@ -3,53 +3,24 @@
3
3
  * Tests array assignment handler functions.
4
4
  */
5
5
 
6
- import { describe, expect, it, vi } from "vitest";
6
+ import { beforeEach, describe, expect, it, vi } from "vitest";
7
+
8
+ // Mock TypeValidator before imports (use vi.hoisted for hoisted mock reference)
9
+ const { mockCheckArrayBounds } = vi.hoisted(() => ({
10
+ mockCheckArrayBounds: vi.fn(),
11
+ }));
12
+
13
+ vi.mock("../../../TypeValidator", () => ({
14
+ default: {
15
+ checkArrayBounds: mockCheckArrayBounds,
16
+ },
17
+ }));
18
+
7
19
  import arrayHandlers from "../ArrayHandlers";
8
20
  import AssignmentKind from "../../AssignmentKind";
9
21
  import IAssignmentContext from "../../IAssignmentContext";
10
- import IHandlerDeps from "../IHandlerDeps";
11
-
12
- /**
13
- * Create mock dependencies for testing.
14
- */
15
- function createMockDeps(overrides: Record<string, unknown> = {}): IHandlerDeps {
16
- const base = {
17
- typeRegistry: new Map(),
18
- symbols: {
19
- structFields: new Map(),
20
- structFieldDimensions: new Map(),
21
- bitmapFields: new Map(),
22
- registerMemberAccess: new Map(),
23
- registerBaseAddresses: new Map(),
24
- registerMemberOffsets: new Map(),
25
- registerMemberTypes: new Map(),
26
- },
27
- currentScope: null,
28
- currentParameters: new Map(),
29
- targetCapabilities: { hasLDREX: false },
30
- generateAssignmentTarget: vi.fn().mockReturnValue("target"),
31
- generateExpression: vi
32
- .fn()
33
- .mockImplementation((ctx) => ctx?.mockValue ?? "0"),
34
- markNeedsString: vi.fn(),
35
- markClampOpUsed: vi.fn(),
36
- isKnownScope: vi.fn().mockReturnValue(false),
37
- isKnownStruct: vi.fn().mockReturnValue(false),
38
- validateCrossScopeVisibility: vi.fn(),
39
- validateBitmapFieldLiteral: vi.fn(),
40
- checkArrayBounds: vi.fn(),
41
- analyzeMemberChainForBitAccess: vi
42
- .fn()
43
- .mockReturnValue({ isBitAccess: false }),
44
- tryEvaluateConstant: vi.fn().mockReturnValue(undefined),
45
- getMemberTypeInfo: vi.fn().mockReturnValue(null),
46
- generateFloatBitWrite: vi.fn().mockReturnValue(null),
47
- foldBooleanToInt: vi.fn().mockImplementation((expr) => expr),
48
- generateAtomicRMW: vi.fn().mockReturnValue("atomic_rmw"),
49
- ...overrides,
50
- };
51
- return base as unknown as IHandlerDeps;
52
- }
22
+ import CodeGenState from "../../../../../state/CodeGenState";
23
+ import HandlerTestUtils from "./handlerTestUtils";
53
24
 
54
25
  /**
55
26
  * Create mock context for testing.
@@ -80,6 +51,12 @@ function createMockContext(
80
51
  }
81
52
 
82
53
  describe("ArrayHandlers", () => {
54
+ beforeEach(() => {
55
+ CodeGenState.reset();
56
+ HandlerTestUtils.setupMockGenerator();
57
+ HandlerTestUtils.setupMockSymbols();
58
+ });
59
+
83
60
  describe("handler registration", () => {
84
61
  it("registers all expected array assignment kinds", () => {
85
62
  const kinds = arrayHandlers.map(([kind]) => kind);
@@ -101,18 +78,18 @@ describe("ArrayHandlers", () => {
101
78
  )?.[1];
102
79
 
103
80
  it("generates simple array element assignment", () => {
104
- const deps = createMockDeps({
81
+ HandlerTestUtils.setupMockGenerator({
105
82
  generateExpression: vi.fn().mockReturnValue("i"),
106
83
  });
107
84
  const ctx = createMockContext();
108
85
 
109
- const result = getHandler()!(ctx, deps);
86
+ const result = getHandler()!(ctx);
110
87
 
111
88
  expect(result).toBe("arr[i] = value;");
112
89
  });
113
90
 
114
91
  it("handles compound assignment", () => {
115
- const deps = createMockDeps({
92
+ HandlerTestUtils.setupMockGenerator({
116
93
  generateExpression: vi.fn().mockReturnValue("0"),
117
94
  });
118
95
  const ctx = createMockContext({
@@ -121,20 +98,20 @@ describe("ArrayHandlers", () => {
121
98
  cOp: "+=",
122
99
  });
123
100
 
124
- const result = getHandler()!(ctx, deps);
101
+ const result = getHandler()!(ctx);
125
102
 
126
103
  expect(result).toBe("arr[0] += value;");
127
104
  });
128
105
 
129
106
  it("uses correct identifier", () => {
130
- const deps = createMockDeps({
107
+ HandlerTestUtils.setupMockGenerator({
131
108
  generateExpression: vi.fn().mockReturnValue("idx"),
132
109
  });
133
110
  const ctx = createMockContext({
134
111
  identifiers: ["buffer"],
135
112
  });
136
113
 
137
- const result = getHandler()!(ctx, deps);
114
+ const result = getHandler()!(ctx);
138
115
 
139
116
  expect(result).toBe("buffer[idx] = value;");
140
117
  });
@@ -147,7 +124,7 @@ describe("ArrayHandlers", () => {
147
124
  )?.[1];
148
125
 
149
126
  it("generates multi-dimensional array access", () => {
150
- const deps = createMockDeps({
127
+ HandlerTestUtils.setupMockGenerator({
151
128
  generateExpression: vi
152
129
  .fn()
153
130
  .mockReturnValueOnce("i")
@@ -162,13 +139,13 @@ describe("ArrayHandlers", () => {
162
139
  subscriptDepth: 2,
163
140
  });
164
141
 
165
- const result = getHandler()!(ctx, deps);
142
+ const result = getHandler()!(ctx);
166
143
 
167
144
  expect(result).toBe("matrix[i][j] = value;");
168
145
  });
169
146
 
170
147
  it("handles 3D array access", () => {
171
- const deps = createMockDeps({
148
+ HandlerTestUtils.setupMockGenerator({
172
149
  generateExpression: vi
173
150
  .fn()
174
151
  .mockReturnValueOnce("x")
@@ -185,19 +162,17 @@ describe("ArrayHandlers", () => {
185
162
  subscriptDepth: 3,
186
163
  });
187
164
 
188
- const result = getHandler()!(ctx, deps);
165
+ const result = getHandler()!(ctx);
189
166
 
190
167
  expect(result).toBe("cube[x][y][z] = value;");
191
168
  });
192
169
 
193
170
  it("performs bounds checking when type info available", () => {
194
- const typeRegistry = new Map([
171
+ CodeGenState.typeRegistry = new Map([
195
172
  ["matrix", { arrayDimensions: [10, 10], baseType: "i32" }],
196
- ]);
197
- const checkArrayBounds = vi.fn();
198
- const deps = createMockDeps({
199
- typeRegistry,
200
- checkArrayBounds,
173
+ ]) as any;
174
+ mockCheckArrayBounds.mockClear();
175
+ HandlerTestUtils.setupMockGenerator({
201
176
  generateExpression: vi
202
177
  .fn()
203
178
  .mockReturnValueOnce("5")
@@ -211,18 +186,19 @@ describe("ArrayHandlers", () => {
211
186
  ],
212
187
  });
213
188
 
214
- getHandler()!(ctx, deps);
189
+ getHandler()!(ctx);
215
190
 
216
- expect(checkArrayBounds).toHaveBeenCalledWith(
191
+ expect(mockCheckArrayBounds).toHaveBeenCalledWith(
217
192
  "matrix",
218
193
  [10, 10],
219
194
  ctx.subscripts,
220
195
  10,
196
+ expect.any(Function), // tryEvaluateConstant callback
221
197
  );
222
198
  });
223
199
 
224
200
  it("handles compound assignment", () => {
225
- const deps = createMockDeps({
201
+ HandlerTestUtils.setupMockGenerator({
226
202
  generateExpression: vi
227
203
  .fn()
228
204
  .mockReturnValueOnce("0")
@@ -238,7 +214,7 @@ describe("ArrayHandlers", () => {
238
214
  cOp: "-=",
239
215
  });
240
216
 
241
- const result = getHandler()!(ctx, deps);
217
+ const result = getHandler()!(ctx);
242
218
 
243
219
  expect(result).toBe("grid[0][1] -= value;");
244
220
  });
@@ -249,13 +225,10 @@ describe("ArrayHandlers", () => {
249
225
  arrayHandlers.find(([kind]) => kind === AssignmentKind.ARRAY_SLICE)?.[1];
250
226
 
251
227
  it("generates memcpy for valid slice assignment", () => {
252
- const typeRegistry = new Map([
228
+ CodeGenState.typeRegistry = new Map([
253
229
  ["buffer", { arrayDimensions: [100], baseType: "u8" }],
254
- ]);
255
- const markNeedsString = vi.fn();
256
- const deps = createMockDeps({
257
- typeRegistry,
258
- markNeedsString,
230
+ ]) as any;
231
+ HandlerTestUtils.setupMockGenerator({
259
232
  tryEvaluateConstant: vi
260
233
  .fn()
261
234
  .mockReturnValueOnce(0)
@@ -270,14 +243,14 @@ describe("ArrayHandlers", () => {
270
243
  generatedValue: "source",
271
244
  });
272
245
 
273
- const result = getHandler()!(ctx, deps);
246
+ const result = getHandler()!(ctx);
274
247
 
275
248
  expect(result).toBe("memcpy(&buffer[0], &source, 10);");
276
- expect(markNeedsString).toHaveBeenCalled();
249
+ expect(CodeGenState.needsString).toBe(true);
277
250
  });
278
251
 
279
252
  it("generates memcpy for string slice", () => {
280
- const typeRegistry = new Map([
253
+ CodeGenState.typeRegistry = new Map([
281
254
  [
282
255
  "str",
283
256
  {
@@ -287,9 +260,8 @@ describe("ArrayHandlers", () => {
287
260
  baseType: "string",
288
261
  },
289
262
  ],
290
- ]);
291
- const deps = createMockDeps({
292
- typeRegistry,
263
+ ]) as any;
264
+ HandlerTestUtils.setupMockGenerator({
293
265
  tryEvaluateConstant: vi
294
266
  .fn()
295
267
  .mockReturnValueOnce(5)
@@ -304,17 +276,16 @@ describe("ArrayHandlers", () => {
304
276
  generatedValue: "data",
305
277
  });
306
278
 
307
- const result = getHandler()!(ctx, deps);
279
+ const result = getHandler()!(ctx);
308
280
 
309
281
  expect(result).toBe("memcpy(&str[5], &data, 10);");
310
282
  });
311
283
 
312
284
  it("throws on compound assignment", () => {
313
- const typeRegistry = new Map([
285
+ CodeGenState.typeRegistry = new Map([
314
286
  ["buffer", { arrayDimensions: [100], baseType: "u8" }],
315
- ]);
316
- const deps = createMockDeps({
317
- typeRegistry,
287
+ ]) as any;
288
+ HandlerTestUtils.setupMockGenerator({
318
289
  tryEvaluateConstant: vi
319
290
  .fn()
320
291
  .mockReturnValueOnce(0)
@@ -329,18 +300,15 @@ describe("ArrayHandlers", () => {
329
300
  ],
330
301
  });
331
302
 
332
- expect(() => getHandler()!(ctx, deps)).toThrow(
303
+ expect(() => getHandler()!(ctx)).toThrow(
333
304
  "Compound assignment operators not supported for slice assignment",
334
305
  );
335
306
  });
336
307
 
337
308
  it("throws on multi-dimensional array", () => {
338
- const typeRegistry = new Map([
309
+ CodeGenState.typeRegistry = new Map([
339
310
  ["matrix", { arrayDimensions: [10, 10], baseType: "u8" }],
340
- ]);
341
- const deps = createMockDeps({
342
- typeRegistry,
343
- });
311
+ ]) as any;
344
312
  const ctx = createMockContext({
345
313
  identifiers: ["matrix"],
346
314
  subscripts: [
@@ -349,17 +317,16 @@ describe("ArrayHandlers", () => {
349
317
  ],
350
318
  });
351
319
 
352
- expect(() => getHandler()!(ctx, deps)).toThrow(
320
+ expect(() => getHandler()!(ctx)).toThrow(
353
321
  "Slice assignment is only valid on one-dimensional arrays",
354
322
  );
355
323
  });
356
324
 
357
325
  it("throws on non-constant offset", () => {
358
- const typeRegistry = new Map([
326
+ CodeGenState.typeRegistry = new Map([
359
327
  ["buffer", { arrayDimensions: [100], baseType: "u8" }],
360
- ]);
361
- const deps = createMockDeps({
362
- typeRegistry,
328
+ ]) as any;
329
+ HandlerTestUtils.setupMockGenerator({
363
330
  tryEvaluateConstant: vi.fn().mockReturnValue(undefined),
364
331
  });
365
332
  const ctx = createMockContext({
@@ -369,17 +336,16 @@ describe("ArrayHandlers", () => {
369
336
  ],
370
337
  });
371
338
 
372
- expect(() => getHandler()!(ctx, deps)).toThrow(
339
+ expect(() => getHandler()!(ctx)).toThrow(
373
340
  "Slice assignment offset must be a compile-time constant",
374
341
  );
375
342
  });
376
343
 
377
344
  it("throws on non-constant length", () => {
378
- const typeRegistry = new Map([
345
+ CodeGenState.typeRegistry = new Map([
379
346
  ["buffer", { arrayDimensions: [100], baseType: "u8" }],
380
- ]);
381
- const deps = createMockDeps({
382
- typeRegistry,
347
+ ]) as any;
348
+ HandlerTestUtils.setupMockGenerator({
383
349
  tryEvaluateConstant: vi
384
350
  .fn()
385
351
  .mockReturnValueOnce(0)
@@ -392,17 +358,16 @@ describe("ArrayHandlers", () => {
392
358
  ],
393
359
  });
394
360
 
395
- expect(() => getHandler()!(ctx, deps)).toThrow(
361
+ expect(() => getHandler()!(ctx)).toThrow(
396
362
  "Slice assignment length must be a compile-time constant",
397
363
  );
398
364
  });
399
365
 
400
366
  it("throws on out of bounds access", () => {
401
- const typeRegistry = new Map([
367
+ CodeGenState.typeRegistry = new Map([
402
368
  ["buffer", { arrayDimensions: [50], baseType: "u8" }],
403
- ]);
404
- const deps = createMockDeps({
405
- typeRegistry,
369
+ ]) as any;
370
+ HandlerTestUtils.setupMockGenerator({
406
371
  tryEvaluateConstant: vi
407
372
  .fn()
408
373
  .mockReturnValueOnce(40)
@@ -416,17 +381,16 @@ describe("ArrayHandlers", () => {
416
381
  ],
417
382
  });
418
383
 
419
- expect(() => getHandler()!(ctx, deps)).toThrow(
384
+ expect(() => getHandler()!(ctx)).toThrow(
420
385
  "Slice assignment out of bounds",
421
386
  );
422
387
  });
423
388
 
424
389
  it("throws on negative offset", () => {
425
- const typeRegistry = new Map([
390
+ CodeGenState.typeRegistry = new Map([
426
391
  ["buffer", { arrayDimensions: [100], baseType: "u8" }],
427
- ]);
428
- const deps = createMockDeps({
429
- typeRegistry,
392
+ ]) as any;
393
+ HandlerTestUtils.setupMockGenerator({
430
394
  tryEvaluateConstant: vi
431
395
  .fn()
432
396
  .mockReturnValueOnce(-1)
@@ -440,17 +404,16 @@ describe("ArrayHandlers", () => {
440
404
  ],
441
405
  });
442
406
 
443
- expect(() => getHandler()!(ctx, deps)).toThrow(
407
+ expect(() => getHandler()!(ctx)).toThrow(
444
408
  "Slice assignment offset cannot be negative",
445
409
  );
446
410
  });
447
411
 
448
412
  it("throws on zero length", () => {
449
- const typeRegistry = new Map([
413
+ CodeGenState.typeRegistry = new Map([
450
414
  ["buffer", { arrayDimensions: [100], baseType: "u8" }],
451
- ]);
452
- const deps = createMockDeps({
453
- typeRegistry,
415
+ ]) as any;
416
+ HandlerTestUtils.setupMockGenerator({
454
417
  tryEvaluateConstant: vi
455
418
  .fn()
456
419
  .mockReturnValueOnce(0)
@@ -464,17 +427,16 @@ describe("ArrayHandlers", () => {
464
427
  ],
465
428
  });
466
429
 
467
- expect(() => getHandler()!(ctx, deps)).toThrow(
430
+ expect(() => getHandler()!(ctx)).toThrow(
468
431
  "Slice assignment length must be positive",
469
432
  );
470
433
  });
471
434
 
472
435
  it("throws on negative length", () => {
473
- const typeRegistry = new Map([
436
+ CodeGenState.typeRegistry = new Map([
474
437
  ["buffer", { arrayDimensions: [100], baseType: "u8" }],
475
- ]);
476
- const deps = createMockDeps({
477
- typeRegistry,
438
+ ]) as any;
439
+ HandlerTestUtils.setupMockGenerator({
478
440
  tryEvaluateConstant: vi
479
441
  .fn()
480
442
  .mockReturnValueOnce(0)
@@ -488,15 +450,16 @@ describe("ArrayHandlers", () => {
488
450
  ],
489
451
  });
490
452
 
491
- expect(() => getHandler()!(ctx, deps)).toThrow(
453
+ expect(() => getHandler()!(ctx)).toThrow(
492
454
  "Slice assignment length must be positive",
493
455
  );
494
456
  });
495
457
 
496
458
  it("throws when buffer size cannot be determined", () => {
497
- const typeRegistry = new Map([["unknown", { baseType: "u8" }]]);
498
- const deps = createMockDeps({
499
- typeRegistry,
459
+ CodeGenState.typeRegistry = new Map([
460
+ ["unknown", { baseType: "u8" }],
461
+ ]) as any;
462
+ HandlerTestUtils.setupMockGenerator({
500
463
  tryEvaluateConstant: vi
501
464
  .fn()
502
465
  .mockReturnValueOnce(0)
@@ -510,9 +473,7 @@ describe("ArrayHandlers", () => {
510
473
  ],
511
474
  });
512
475
 
513
- expect(() => getHandler()!(ctx, deps)).toThrow(
514
- "Cannot determine buffer size",
515
- );
476
+ expect(() => getHandler()!(ctx)).toThrow("Cannot determine buffer size");
516
477
  });
517
478
  });
518
479
  });