2.1 KiB
2.1 KiB
PR-05.0.1 - Frontend Phase Shared NameTable Context
Briefing
Hoje o frontend PBS cria NameTable em componentes diferentes (linking, declarative semantics, rules), o que fragmenta identidade de nome por fase.
Esta PR centraliza NameTable no FrontendPhaseContext para toda a fase de frontend, com um ciclo de vida unico por compilacao.
Motivation
Dor que esta PR resolve
- Mesma string pode receber
NameIddiferente dependendo da fase. - Dificulta evoluir para identidades tipadas cross-phase sem adaptadores de conversao.
- Complica debug e rastreabilidade de diagnosticos semanticos entre linking e lowering.
Target
Uniformizar identidade de nomes no FE inteiro, com NameId estavel durante a fase de frontend.
Scope
FrontendPhaseContextpassa a exporNameTable.- Validators e binders do PBS passam a receber
NameTabledo contexto, sem criar tabela local. - Ajuste de testes que dependem de instanciacao direta.
Non-Goals
- Nao altera regras semanticas.
- Nao altera parser/AST.
Method
O que deve ser feito explicitamente
- Adicionar
NameTableao contexto da fase de frontend. - Remover
new NameTable()locais em linking/semantics. - Injetar o
NameTablecompartilhado em:PbsModuleVisibilityValidator,PbsDeclarationSemanticsValidator,PbsDeclarationRuleValidator,PbsNamespaceBinder.
- Garantir que o ciclo de vida da tabela seja por execucao de fase, nao global estatico.
Acceptance Criteria
- Nao existe mais alocacao local de
NameTablenas fases PBS do frontend. - Mesmo nome gera mesmo
NameIdem linking e semantica na mesma compilacao. - Testes de linking/semantica continuam passando sem regressao comportamental.
Tests
- Teste de identidade cruzada (linking vs declaration validation) para nomes iguais.
- Teste de isolamento entre duas compilacoes diferentes (nao vazar IDs entre runs).
Affected Documents
docs/pbs/specs/11. AST Specification.mddocs/pbs/specs/13. Lowering IRBackend Specification.md
Open Questions
Sem bloqueios arquiteturais.