70 lines
2.6 KiB
Markdown
70 lines
2.6 KiB
Markdown
# PR-12.1 - Flow Expression Analyzer Context and Dispatch Foundation
|
|
|
|
## Briefing
|
|
|
|
`PbsFlowExpressionAnalyzer` concentra estado compartilhado e um dispatch grande de `Expression -> semantic analysis` em uma unica classe.
|
|
|
|
Esta PR introduz a base estrutural para decomposicao sem alterar funcionalidade: contexto compartilhado, helpers comuns e uma fronteira clara entre fachada e implementacoes especializadas.
|
|
|
|
## Motivation
|
|
|
|
### Dor atual que esta PR resolve
|
|
|
|
1. A classe combina orquestracao, recursion, block delegation e regras semanticas detalhadas.
|
|
2. Extracoes futuras ficam arriscadas sem um contexto compartilhado explicito.
|
|
3. O maior hotspot da classe e o dispatch principal de `analyzeExpressionInternal`, que hoje depende de muitos parametros repetidos.
|
|
|
|
## Target
|
|
|
|
Estabelecer uma fundacao segura para o refactor:
|
|
|
|
1. contexto compartilhado para analise de expressao,
|
|
2. encapsulamento de argumentos recorrentes,
|
|
3. fachada pequena em `PbsFlowExpressionAnalyzer`.
|
|
|
|
## Dependencies
|
|
|
|
Nenhuma.
|
|
|
|
## Scope
|
|
|
|
1. Introduzir um contexto/request object para `scope`, `expectedType`, `returnType`, `resultErrorName`, `receiverType`, `model`, `diagnostics`, `use` e `valueContext`.
|
|
2. Encapsular a dependencia de `BlockAnalyzer` nessa camada.
|
|
3. Reorganizar o dispatch principal sem mover ainda regras complexas para outras classes.
|
|
|
|
## Non-Goals
|
|
|
|
1. Nao alterar inferencia de tipos.
|
|
2. Nao alterar diagnosticos ou spans.
|
|
3. Nao reescrever `PbsFlowTypeOps` ou `PbsFlowBodyAnalyzer`.
|
|
|
|
## Method
|
|
|
|
### O que deve ser feito explicitamente
|
|
|
|
1. Criar um contexto pequeno e explicito para a analise recursiva.
|
|
2. Manter `PbsFlowExpressionAnalyzer` como entrypoint package-private.
|
|
3. Preservar a ordem atual de recursion e emissao de diagnosticos.
|
|
4. Garantir que esta PR seja puramente estrutural.
|
|
|
|
## Acceptance Criteria
|
|
|
|
1. `PbsFlowExpressionAnalyzer` continua com o mesmo contrato observavel.
|
|
2. A quantidade de parametros repetidos no dispatch recursivo e reduzida.
|
|
3. Nao ha mudanca funcional em inferencia, erros ou comportamento da suite.
|
|
|
|
## Tests
|
|
|
|
1. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsDeclarationsTest*`
|
|
2. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsAssignmentTest*`
|
|
3. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsApplyResolutionTest*`
|
|
4. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test`
|
|
|
|
## Affected Documents
|
|
|
|
1. Nenhum documento normativo.
|
|
|
|
## Open Questions
|
|
|
|
1. O contexto deve ser imutavel por chamada recursiva ou permitir derivacao incremental. A recomendacao e usar derivacao imutavel leve para reduzir risco de regressao.
|