32 lines
1.2 KiB
Markdown
32 lines
1.2 KiB
Markdown
# PR-O4.3 - Semantic Lowering, CFG, and Stack Analysis
|
|
|
|
## Briefing
|
|
|
|
Trocar lowering executável baseado em coleta de callsites por lowering semântico real com construção de CFG e cálculo formal de `max_stack_slots`.
|
|
|
|
## Target
|
|
|
|
- `PbsFrontendCompiler` (lowering executável).
|
|
- Modelo `IRBackendExecutableFunction` para instruções semânticas.
|
|
- Regras de stack/slot no handoff FE -> BE.
|
|
|
|
## Method
|
|
|
|
- Introduzir lowering de statements/expressões para instruções executáveis (não apenas calls + RET).
|
|
- Construir CFG por função e resolver blocos/jumps explicitamente.
|
|
- Calcular `max_stack_slots` por análise de fluxo em vez de heurística fixa.
|
|
- Preservar spans por instrução para debug e diagnóstico.
|
|
|
|
## Acceptance Criteria
|
|
|
|
- Programas com controle de fluxo e expressões produzem IR executável semântico.
|
|
- `max_stack_slots` é derivado por análise, não constante heurística.
|
|
- Paths não terminados e inconsistências de stack são detectados no FE/BE boundary.
|
|
- Contrato de lowering mantém determinismo para o mesmo AST admitido.
|
|
|
|
## Tests
|
|
|
|
- Fixtures com `if/while/for/switch/handle` e joins de controle.
|
|
- Testes de stack-depth máximo e mismatch em join.
|
|
- Regressão de spans e call classification.
|