73 lines
2.6 KiB
Markdown
73 lines
2.6 KiB
Markdown
# PR-12.3 - Flow Expression Analyzer Call and Member Resolution Decomposition
|
|
|
|
## Briefing
|
|
|
|
`analyzeCallExpression`, `analyzeApplyExpression`, `resolveCallableApplication`, `analyzeMemberExpression` e parte de `BindExpr` concentram a logica de resolucao mais sensivel do analisador.
|
|
|
|
Esta PR extrai essa superficie para colaboradores menores, sem alterar regras de overload, bare method extraction, acesso a campos ou matching de callback.
|
|
|
|
## Motivation
|
|
|
|
### Dor atual que esta PR resolve
|
|
|
|
1. Member access e callable resolution sao os clusters mais densos depois do dispatch principal.
|
|
2. A classe mistura regras de acesso a tuple/struct/service/contract com overload resolution e bind matching.
|
|
3. Qualquer ajuste nessas regras hoje exige tocar um arquivo muito central e com alta chance de regressao.
|
|
|
|
## Target
|
|
|
|
Separar a analise de resolucao:
|
|
|
|
1. member access,
|
|
2. call/apply overload resolution,
|
|
3. bind-to-callback matching,
|
|
4. field access permission checks.
|
|
|
|
## Dependencies
|
|
|
|
Prerequisitos diretos:
|
|
|
|
1. `PR-12.1`
|
|
2. `PR-12.2`
|
|
|
|
## Scope
|
|
|
|
1. Extrair `analyzeCallExpression`, `analyzeApplyExpression`, `resolveCallableApplication`.
|
|
2. Extrair `analyzeMemberExpression` e `canReadStructField`.
|
|
3. Mover a parte especifica de `BindExpr` para o mesmo cluster de resolucao.
|
|
|
|
## Non-Goals
|
|
|
|
1. Nao alterar diagnosticos de overload ambiguous/unresolved.
|
|
2. Nao alterar regras de leitura de campo privado/publico.
|
|
3. Nao alterar a proibicao de bare method extraction.
|
|
|
|
## Method
|
|
|
|
### O que deve ser feito explicitamente
|
|
|
|
1. Criar um resolver focado em call/member semantics.
|
|
2. Preservar o mesmo uso de `TypeView`, `CallableSymbol` e `ExprResult`.
|
|
3. Garantir que o order of checks permaneça equivalente, especialmente em erros e narrowing por `expectedType`.
|
|
|
|
## Acceptance Criteria
|
|
|
|
1. Call/member resolution deixa de ficar concentrada em `PbsFlowExpressionAnalyzer`.
|
|
2. Bare method extraction, field access e overload matching permanecem equivalentes.
|
|
3. Suite semantica continua verde sem mudancas funcionais.
|
|
|
|
## Tests
|
|
|
|
1. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsApplyResolutionTest*`
|
|
2. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsAssignmentTest*`
|
|
3. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsFrontendCompilerTest*`
|
|
4. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test`
|
|
|
|
## Affected Documents
|
|
|
|
1. Nenhum documento normativo.
|
|
|
|
## Open Questions
|
|
|
|
1. `BindExpr` deve compartilhar exatamente o mesmo narrowing path de `call/apply` ou ficar em helper proprio. A recomendacao e helper proprio dentro do mesmo resolver, para evitar acoplamento artificial.
|