Skip to content

typescript: --closed-world on narrows the dispatch fan to constructible types, and records it - #1788

Merged
swapnilpaliwal-sd merged 1 commit into
0.1.9from
loop/ty-is473
Sep 29, 2026
Merged

swapnilpaliwal-sd merged 1 commit into
0.1.9from
loop/ty-is473

Conversation

@swapnilpaliwal-sd

Copy link
Copy Markdown
Contributor

TypeScript multi_inferred dispatch was class-hierarchy wide because type_instantiated was never read. New opt-in --closed-world on (env AXIOM_DISPATCH_CLOSED_WORLD): an implementor stays in the set only if the program can construct a type that conforms to it (a typed new, or the class used as a value, locally or imported). Each edge removed is exported as a dispatch_assumes_closed_world assumption row; run.dispatch_closed_world records the mode. Default behaviour unchanged.

Closes #473

…le types, and records it

type_instantiated was computed and never read, so a TypeScript multi_inferred fan was
every override the hierarchy admits (CHA), while Python's is narrowed to what the program
builds. Narrowing is only sound when every construction is visible, so it is opt-in:

- --closed-world on (env AXIOM_DISPATCH_CLOSED_WORLD) admits an implementor only if a
  constructible type conforms to it: a typed `new`, or the class used as a value anywhere,
  in its own module (TYPE) or imported into another (IMPORT_BINDING, the container
  `useClass: X` shape);
- each edge the premise removes is a dispatch_assumes_closed_world row
  (assumption-dispatch-closed-world.csv), and run.dispatch_closed_world says which mode ran;
- the default fan and every golden are unchanged.

Case 83 pins the default fan; closed-world-dispatch-test.sh solves it with the flag on:
Unused, Orphan and TypeOnly drop (3 assumption rows), Built, Registered, Base (inherited
by a constructed Leaf) and Provided (imported, handed over as useClass) stay.

Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant