73 lines
2.5 KiB
Markdown
73 lines
2.5 KiB
Markdown
# PR-13.3 - Flow Body Analyzer Statement Analysis Splitting
|
|
|
|
## Briefing
|
|
|
|
Depois de separar entry/completion, o maior hotspot restante em `PbsFlowBodyAnalyzer` passa a ser `analyzeBlock` e `analyzeStatement`, com tratamento de `let`, `return`, `if`, `for`, `while`, expression statement e delegacao para `PbsFlowExpressionAnalyzer`.
|
|
|
|
Esta PR extrai essa superficie para colaboradores menores, sem alterar funcionalidade.
|
|
|
|
## Motivation
|
|
|
|
### Dor atual que esta PR resolve
|
|
|
|
1. `analyzeStatement` concentra varias formas de statement com regras semanticas distintas.
|
|
2. Loops, `if` e `return` usam os mesmos parametros e diagnosticos, mas pertencem a clusters semanticos diferentes.
|
|
3. A manutencao dessa logica em um unico metodo torna a classe dificil de evoluir.
|
|
|
|
## Target
|
|
|
|
Separar a analise de statements:
|
|
|
|
1. blocos e escopos,
|
|
2. `let` e expression statements,
|
|
3. `return` flow,
|
|
4. `if/for/while`.
|
|
|
|
## Dependencies
|
|
|
|
Prerequisitos diretos:
|
|
|
|
1. `PR-13.1`
|
|
2. `PR-13.2`
|
|
|
|
## Scope
|
|
|
|
1. Extrair `analyzeBlock` e o dispatch de `analyzeStatement`.
|
|
2. Extrair regras de `let`, `if`, `for`, `while` e expression statement para helpers/colaboradores dedicados.
|
|
3. Deixar `return` bootstrap pronto para corte proprio, sem ainda mexer em assignment target resolution.
|
|
|
|
## Non-Goals
|
|
|
|
1. Nao alterar mutabilidade de escopo local.
|
|
2. Nao alterar validacao de tipos de condicao ou bounds de loop.
|
|
3. Nao alterar assignment resolution.
|
|
|
|
## Method
|
|
|
|
### O que deve ser feito explicitamente
|
|
|
|
1. Introduzir um statement analyzer ou divisao equivalente por familias.
|
|
2. Reusar o contexto compartilhado da `PR-13.1`.
|
|
3. Preservar a ordem atual de chamadas ao `expressionAnalyzer`.
|
|
|
|
## Acceptance Criteria
|
|
|
|
1. `analyzeStatement` deixa de concentrar todas as formas de statement.
|
|
2. Scoping, condition checks e loop bound checks permanecem equivalentes.
|
|
3. Suite semantica continua verde sem mudanca funcional.
|
|
|
|
## Tests
|
|
|
|
1. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsControlFlowTest*`
|
|
2. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsAssignmentTest*`
|
|
3. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsDeclarationsTest*`
|
|
4. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test`
|
|
|
|
## Affected Documents
|
|
|
|
1. Nenhum documento normativo.
|
|
|
|
## Open Questions
|
|
|
|
1. `return` deve ficar no statement analyzer ou em um colaborador proprio de result flow. A recomendacao e deixar o corte final para a PR seguinte se isso simplificar mais a classe.
|