From c5eb832ef15a20bcdccc4a4c62c4f9812fb52674 Mon Sep 17 00:00:00 2001 From: Chris Tate Date: Tue, 20 Oct 2026 18:36:38 -0500 Subject: [PATCH] Keep the process.versions scan flag on the lowerer --- .../src/frontend/lowering/builtins/process.ts | 14 ++++---------- packages/compiler/src/frontend/lowering/lowerer.ts | 3 +++ 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/packages/compiler/src/frontend/lowering/builtins/process.ts b/packages/compiler/src/frontend/lowering/builtins/process.ts index 2db62d675..25653f541 100644 --- a/packages/compiler/src/frontend/lowering/builtins/process.ts +++ b/packages/compiler/src/frontend/lowering/builtins/process.ts @@ -304,19 +304,13 @@ export function isOptionalProcessVersionsRead(lowerer: Lowerer, node: ts.Node): ); } -const mentionsVersions = new WeakMap(); - /** Whether any implementation source spells `versions`. Programs that * never do skip the per-read checker queries above entirely. */ function programMentionsVersions(lowerer: Lowerer): boolean { - let known = mentionsVersions.get(lowerer); - if (known === undefined) { - known = lowerer.program - .getImplementationSourceFiles() - .some((sf) => !sf.isDeclarationFile && sf.text.includes("versions")); - mentionsVersions.set(lowerer, known); - } - return known; + lowerer.mentionsProcessVersions ??= lowerer.program + .getImplementationSourceFiles() + .some((sf) => !sf.isDeclarationFile && sf.text.includes("versions")); + return lowerer.mentionsProcessVersions; } export function lowerProcessStreamProperty( diff --git a/packages/compiler/src/frontend/lowering/lowerer.ts b/packages/compiler/src/frontend/lowering/lowerer.ts index 9c31d96d7..7addaabf2 100644 --- a/packages/compiler/src/frontend/lowering/lowerer.ts +++ b/packages/compiler/src/frontend/lowering/lowerer.ts @@ -1846,6 +1846,9 @@ export class Lowerer { * NaN, which lower to plain doubles (see nan-coded-reads.ts). Settled by * analyzeRuntimeOptionalArrayReads before any body lowers. */ nanCodedReads: NanCodedReads | null = null; + /** Whether any implementation source spells `versions` + * (programMentionsVersions in builtins/process.ts). */ + mentionsProcessVersions: boolean | undefined = undefined; private stringIndexBoundsCache: StringIndexBounds | null = null; /** Proofs that a string element read names an existing code unit. The * indexed-read analysis and expression lowering share one instance, so a