64 lines
2.1 KiB
Markdown
64 lines
2.1 KiB
Markdown
# 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
|
|
|
|
1. Mesma string pode receber `NameId` diferente dependendo da fase.
|
|
2. Dificulta evoluir para identidades tipadas cross-phase sem adaptadores de conversao.
|
|
3. 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
|
|
|
|
1. `FrontendPhaseContext` passa a expor `NameTable`.
|
|
2. Validators e binders do PBS passam a receber `NameTable` do contexto, sem criar tabela local.
|
|
3. Ajuste de testes que dependem de instanciacao direta.
|
|
|
|
## Non-Goals
|
|
|
|
1. Nao altera regras semanticas.
|
|
2. Nao altera parser/AST.
|
|
|
|
## Method
|
|
|
|
### O que deve ser feito explicitamente
|
|
|
|
1. Adicionar `NameTable` ao contexto da fase de frontend.
|
|
2. Remover `new NameTable()` locais em linking/semantics.
|
|
3. Injetar o `NameTable` compartilhado em:
|
|
- `PbsModuleVisibilityValidator`,
|
|
- `PbsDeclarationSemanticsValidator`,
|
|
- `PbsDeclarationRuleValidator`,
|
|
- `PbsNamespaceBinder`.
|
|
4. Garantir que o ciclo de vida da tabela seja por execucao de fase, nao global estatico.
|
|
|
|
## Acceptance Criteria
|
|
|
|
1. Nao existe mais alocacao local de `NameTable` nas fases PBS do frontend.
|
|
2. Mesmo nome gera mesmo `NameId` em linking e semantica na mesma compilacao.
|
|
3. Testes de linking/semantica continuam passando sem regressao comportamental.
|
|
|
|
## Tests
|
|
|
|
1. Teste de identidade cruzada (linking vs declaration validation) para nomes iguais.
|
|
2. Teste de isolamento entre duas compilacoes diferentes (nao vazar IDs entre runs).
|
|
|
|
## Affected Documents
|
|
|
|
1. `docs/pbs/specs/11. AST Specification.md`
|
|
2. `docs/pbs/specs/13. Lowering IRBackend Specification.md`
|
|
|
|
## Open Questions
|
|
|
|
Sem bloqueios arquiteturais.
|