72 lines
2.4 KiB
Markdown
72 lines
2.4 KiB
Markdown
# PR-12.2 - Flow Expression Analyzer Literal and Structural Expression Splitting
|
|
|
|
## Briefing
|
|
|
|
Grande parte do dispatch de `PbsFlowExpressionAnalyzer` cobre formas literais e estruturais de expressao: literais, `this`, identificadores, grupos, tuplas, blocos, unarios, binarios, `none/some`, `new`, `as`, `ok/err`.
|
|
|
|
Esta PR extrai essas familias para componentes menores, sem alterar funcionalidade.
|
|
|
|
## Motivation
|
|
|
|
### Dor atual que esta PR resolve
|
|
|
|
1. O dispatch principal mistura casos triviais com regras mais complexas de call/member/switch/handle.
|
|
2. Formas estruturais simples podem ser separadas com risco baixo e alta reducao de complexidade.
|
|
3. Sem esse corte, o dispatch central continua inchado mesmo com contexto compartilhado.
|
|
|
|
## Target
|
|
|
|
Separar a analise de expressoes literais e estruturais:
|
|
|
|
1. literais e identificadores,
|
|
2. grupos, tuplas e blocos,
|
|
3. unario/binario,
|
|
4. `none/some`, `new`, `bind`-independent simple forms, `as`, `ok/err`.
|
|
|
|
## Dependencies
|
|
|
|
Prerequisito direto:
|
|
|
|
1. `PR-12.1`
|
|
|
|
## Scope
|
|
|
|
1. Extrair casos simples de `analyzeExpressionInternal` para helpers/colaboradores dedicados.
|
|
2. Manter o resultado em `ExprResult` exatamente como hoje.
|
|
3. Preservar todas as chamadas a `typeOps` e `blockAnalyzer`.
|
|
|
|
## Non-Goals
|
|
|
|
1. Nao alterar regras de callback/bind.
|
|
2. Nao alterar member access ou overload resolution.
|
|
3. Nao alterar switch/handle/result propagation.
|
|
|
|
## Method
|
|
|
|
### O que deve ser feito explicitamente
|
|
|
|
1. Mover primeiro os casos com menor acoplamento semantico.
|
|
2. Manter o dispatch principal apenas como roteador.
|
|
3. Preservar a ordem atual de recursion para evitar mudanca em diagnosticos acumulados.
|
|
|
|
## Acceptance Criteria
|
|
|
|
1. Casos literais e estruturais deixam de ficar todos dentro do dispatch principal.
|
|
2. AST/semantics observados pela suite permanecem equivalentes.
|
|
3. O hotspot principal da classe reduz tamanho e branching sem alterar comportamento.
|
|
|
|
## Tests
|
|
|
|
1. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsExprParserTest*`
|
|
2. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsOptionalResultTest*`
|
|
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. `BindExpr` deve entrar aqui ou junto de call resolution. A recomendacao e mantê-lo para `PR-12.3`, porque ele depende de matching de callback/callable.
|