Skip to content

Phase-E typed-AST: converge 4 resolvers into canonical typeOf() #595

@cs01

Description

@cs01

Goal

Converge codegen's 4 overlapping type-resolvers into one canonical lookup: ctx.typeOf(expr). Every codegen site reads types through one path that hits the pre-codegen annotator cache first, then falls through to the live resolver.

Why

Before convergence, codegen has 4 ways to ask "what type is this?":

  • typeInference.resolveExpressionType(expr) — flat base lookup
  • typeInference.resolveExpressionTypeRich(expr) — enriched with sourceKind/fields
  • getVariableType(register) — SSA-register-keyed (post-generation)
  • pre-codegen annotator cache (filled by semantic/type-annotator.ts)

Two codegen sites could ask at different moments and get different answers — silent-wrong native code. 397 real divergences measured before PR #580.

Plan

Per memory/refactor-plan-2026-04-19.md step 5 ("TypedAST annotator pass").

Shipped

Remaining

  • Delete dead public passthroughs at llvm-generator.ts:4246-4251 (resolveExpressionType + Rich) — no external consumers after refactor(codegen): migrate member.ts to typeOf() #594
  • Migrate ~212 getVariableType(register) consumers to typeOf(expr) where the AST is available (per-site judgment)
  • Step 6 sema extraction phase 2 (isClass migration) — blocked, see memory/sema-migration-blockers.md
  • Final cleanup: drop any remaining resolveExpressionTypeRich calls outside type-inference.ts internal recursion and semantic/type-annotator.ts (legitimate cache-filling sink)

Done-when

  • Zero callers of typeInference.resolveExpressionType / resolveExpressionTypeRich outside type-inference.ts recursion and type-annotator.ts
  • getVariableType either deleted or used only for SSA-register lookup (not as a type resolver)
  • Stage 2 native self-host green throughout

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions