3.5 KiB
3.5 KiB
PR-05.1 - PBS Frontend Semantic Executable Lowering (CFG)
Briefing
O frontend PBS ainda gera IRBackendExecutableFunction por varredura de callsites no AST, o que perde semântica de execução real.
Esta PR substitui esse caminho por lowering semântico baseado em fluxo de controle (CFG), preservando ordem de execução, terminadores e formas de desvio.
Motivation
Dor atual que esta PR resolve
- Execução divergente entre programa fonte e artefato gerado em cenários com
if,while,for,switch,handleereturnantecipado. - Impossibilidade de elevar o backend para JVM-grade porque o contrato executável nasce semanticamente incompleto.
- Falsos positivos de conformidade: testes passam para casos lineares, mas o modelo quebra em fluxo real.
Target
Esta PR altera o frontend PBS para que IRBackendExecutableFunction.instructions represente fluxo executável real, não apenas uma lista de chamadas encontradas.
Dependencies
Prerequisitos diretos:
PR-05.0.1(NameTable compartilhada por fase).PR-05.0.2(identidade de modulo porModuleId).PR-05.0.3(IDs tipados de callable/intrinseco no contrato).PR-05.0.4(internacao de shape/signature).
Scope
- Gerador de IR executável no frontend PBS.
- Emissão de labels e jumps para estruturas de controle.
- Recalculo de
maxStackSlotscom base no fluxo emitido. - Testes de fidelidade semântica do FE para IR executável.
Non-Goals
- Não introduz otimizações.
- Não altera formato binário PBX.
- Não altera runtime.
Method
O que deve ser feito explicitamente
- Substituir o mecanismo de
collectCallsFrom*por lowering orientado a nós semânticos de statements/expressions. - Emitir instruções de controle (
LABEL,JMP,JMP_IF_TRUE,JMP_IF_FALSE,RET) para cada forma de fluxo suportada. - Garantir que
returntermine bloco/caminho e que caminhos alcançáveis terminem em instrução terminadora. - Preservar spans de origem em cada instrução emitida para diagnóstico.
- Manter validação fail-fast quando existir forma semântica não lowerável em v1.
- Atualizar análise de stack para operar sobre o programa realmente emitido.
- Emitir referências de chamada via IDs tipados (
CallableId/IntrinsicId) sem chave textual ad-hoc.
Acceptance Criteria
IRBackendExecutableFunctiondeixa de ser construído por varredura cega de callsites.- Para casos com ramificação e laço, a ordem de execução no IR executável é semanticamente equivalente ao AST validado.
- Funções com
returnantecipado não emitem execução espúria após ponto de saída. maxStackSlotscalculado bate com programa emitido e passa em validação backend.- Diagnósticos de lowering preservam fase e span corretamente.
- Não há lookup de identidade de callsite baseado em concatenação string no caminho principal.
Tests
- Testes positivos com fixtures de
if/else,while,for,switch,handle,returnantecipado. - Testes negativos para caminhos sem terminador, labels inválidos e formas não suportadas.
- Teste de regressão comparando resultado anterior vs novo para provar correção em casos não lineares.
Affected Documents
docs/pbs/specs/13. Lowering IRBackend Specification.mddocs/general/specs/20. IRBackend to IRVM Lowering Specification.mddocs/general/specs/19. Verification and Safety Checks Specification.md
Open Questions
Sem bloqueios arquiteturais. Implementação deve seguir decisões já fechadas na Agenda 18.