Skip to content

fix type checker for fusions and use type any for unknown - #7539

Open
mccanne wants to merge 1 commit into
mainfrom
checker-any
Open

mccanne wants to merge 1 commit into
mainfrom
checker-any

Conversation

@mccanne

@mccanne mccanne commented Oct 26, 2026

Copy link
Copy Markdown
Collaborator

The type checker previously modeled an unknown type with the placeholder error({}). This commit changes it to the real any type, fusion(all) (added as ontext.TypeAny()), and turns on complete fusion in the checker’s fuser so that any stays wrapped as fusion(all) instead of collapsing to the bare all type when fused.

Since fused types now keep their fusion wrappers, the checker looks at a type’s underlying type through a new under helper, which removes named types and a fusion wrapper (but leaves any alone). This replaces super.TypeUnder throughout the checker. isUnknown is now super.IsTypeAny. The places that recognized the old placeholder through *super.TypeError cases (deref, isContainer, unnestCheck, in, hasString) now check isUnknown up front.

The only test change is in from-type.yaml, where the type checker now more accurately keeps the input’s field fusions,
e.g., {x:fusion(int64|missing),...}.

The type checker previously modeled an unknown type with the
placeholder error({}).  This commit changes it to the real any type,
fusion(all) (added as ontext.TypeAny()), and turns on complete fusion
in the checker’s fuser so that any stays wrapped as fusion(all)
instead of collapsing to the bare all type when fused.

Since fused types now keep their fusion wrappers, the checker looks
at a type’s underlying type through a new under helper, which removes
named types and a fusion wrapper (but leaves any alone). This replaces
super.TypeUnder throughout the checker. isUnknown is now super.IsTypeAny.
The places that recognized the old placeholder through *super.TypeError
cases (deref, isContainer, unnestCheck, in, hasString) now check isUnknown
up front.

The only test change is in from-type.yaml, where the type checker now
more accurately keeps the input’s field fusions,
e.g., {x:fusion(int64|missing),...}.
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