From 9ac233420201d199859dee74ee2eb62356a08d8d Mon Sep 17 00:00:00 2001 From: Chris Tate Date: Tue, 6 Oct 2026 16:58:38 -0500 Subject: [PATCH] Update native emission fixtures for direct joins - Exercise the current scalar join helper and verify reuse. - Preserve native and Node emission and refusal contracts. --- tests/fixtures/self-hosting/llvm-layouts.ts | 2 -- tests/harness/self-hosting-emission-cases.ts | 8 +++----- tests/harness/self-hosting-emission.test.ts | 13 ++++++------- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/tests/fixtures/self-hosting/llvm-layouts.ts b/tests/fixtures/self-hosting/llvm-layouts.ts index 183fdfab9..5644ca892 100644 --- a/tests/fixtures/self-hosting/llvm-layouts.ts +++ b/tests/fixtures/self-hosting/llvm-layouts.ts @@ -16,7 +16,6 @@ interface Request { classObjects: string[]; sources: { file: string; text: string }[]; writers?: IrType[]; - textUnions?: string[]; joinUnions?: string[]; indent?: boolean; } @@ -69,7 +68,6 @@ try { const walkers = new LlWalkers(host); const helpers: string[] = []; for (const type of request.writers ?? []) helpers.push(walkers.jsonWriteHelper(type)); - for (const union of request.textUnions ?? []) helpers.push(walkers.unionToStrHelper(union)); for (const union of request.joinUnions ?? []) helpers.push(walkers.unionJoinHelper(union)); if (request.indent) helpers.push(walkers.jsonIndentHelper()); const classes = [...graph.values()].map((meta) => ({ diff --git a/tests/harness/self-hosting-emission-cases.ts b/tests/harness/self-hosting-emission-cases.ts index faa7669e8..894242ac0 100644 --- a/tests/harness/self-hosting-emission-cases.ts +++ b/tests/harness/self-hosting-emission-cases.ts @@ -20,7 +20,6 @@ export interface EmissionRequest { classObjects: string[]; sources: { file: string; text: string }[]; writers?: IrType[]; - textUnions?: string[]; joinUnions?: string[]; indent?: boolean; } @@ -322,12 +321,11 @@ export function emissionCases(): EmissionCase[] { textUnion.unions = [{ id: "text", arms: [BOOL, F64, STRING, { kind: "nullT" }, UNDEFINED_T] }]; const textRequest = emissionRequest(); textRequest.writers = [{ kind: "union", unionId: "text" }]; - textRequest.textUnions = ["text", "text"]; - textRequest.joinUnions = ["text"]; + textRequest.joinUnions = ["text", "text"]; add( - "union JSON, string and join helpers", + "union JSON and direct join helpers", textUnion, - ["switch i32", "@scr_str_retain"], + ["switch i32", "@scr_arr_peek_ref", "@scr_jb_put_number"], textRequest, ); diff --git a/tests/harness/self-hosting-emission.test.ts b/tests/harness/self-hosting-emission.test.ts index a26fc859c..2105d5b4e 100644 --- a/tests/harness/self-hosting-emission.test.ts +++ b/tests/harness/self-hosting-emission.test.ts @@ -119,6 +119,9 @@ for (const backend of ["llvm"] as const) { emitted.debug, ].join("\n"); for (const expected of item.contains) expect(definitions, item.name).toContain(expected); + if ((item.request.joinUnions?.length ?? 0) > 1) { + expect(definitions.match(/define internal ptr @sc_uj_/g), item.name).toHaveLength(1); + } if (item.name.startsWith("class forest")) { expect( emitted.classes.map((meta) => [meta.name, meta.root, meta.pre, meta.post]), @@ -167,10 +170,6 @@ for (const backend of ["llvm"] as const) { request: { ...emissionRequest(), writers: [{ kind: "union", unionId: "Missing" }] }, message: "jsonStringify of unknown union Missing", }, - { - request: { ...emissionRequest(), textUnions: ["Missing"] }, - message: "ToString of unknown union Missing", - }, { request: { ...emissionRequest(), joinUnions: ["Missing"] }, message: "join of unknown union Missing", @@ -189,11 +188,11 @@ for (const backend of ["llvm"] as const) { expect( run( unsupported, - { ...emissionRequest(), textUnions: ["containers"] }, - "unsupported union stringification", + { ...emissionRequest(), joinUnions: ["containers"] }, + "unsupported union join", 1, ), - ).toContain("unionToStr:array"); + ).toContain("unionJoin:array"); for (const source of [ "711-inheritance-dispatch.ts",