prometeu-studio/docs/compiler/pbs/pull-requests/PR-05.0.1-frontend-phase-shared-name-table-context.md
2026-03-24 13:42:37 +00:00

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

  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.