73 lines
2.5 KiB
Markdown
73 lines
2.5 KiB
Markdown
# PR-13.4 - Flow Body Analyzer Assignment Target Resolution Decomposition
|
|
|
|
## Briefing
|
|
|
|
`resolveAssignmentTarget` e a logica correlata de assignment compatibility concentram um dos trechos mais densos e sensiveis de `PbsFlowBodyAnalyzer`.
|
|
|
|
Esta PR extrai a resolucao de assignment target e as regras de acesso/leitura/escrita de campo para colaboradores dedicados, sem alterar funcionalidade.
|
|
|
|
## Motivation
|
|
|
|
### Dor atual que esta PR resolve
|
|
|
|
1. Assignment resolution mistura lookup de locals, `this`, singleton services, consts e navegação em campos de struct.
|
|
2. Regras de leitura e escrita de campo estao acopladas ao fluxo do statement analyzer.
|
|
3. A superficie e densa e merece um resolver proprio com foco em diagnósticos de assignability.
|
|
|
|
## Target
|
|
|
|
Separar a camada de assignment semantics:
|
|
|
|
1. resolucao de assignment target,
|
|
2. assignability de roots conhecidos,
|
|
3. leitura/escrita de campos,
|
|
4. type compatibility por operador de atribuicao.
|
|
|
|
## Dependencies
|
|
|
|
Prerequisitos diretos:
|
|
|
|
1. `PR-13.1`
|
|
2. `PR-13.2`
|
|
3. `PR-13.3`
|
|
|
|
## Scope
|
|
|
|
1. Extrair `analyzeAssignmentStatement`.
|
|
2. Extrair `resolveAssignmentTarget`, `assignmentCompatible`, `canReadStructField`, `canWriteStructField`, `isKnownNonAssignableRoot`.
|
|
3. Manter `AssignmentTargetResolution` ou mover para um modelo focado de assignment.
|
|
|
|
## Non-Goals
|
|
|
|
1. Nao alterar regras de mutabilidade/local const.
|
|
2. Nao alterar regras de acesso a campos privados/publicos.
|
|
3. Nao alterar o mapeamento de operadores compostos para inferencia binaria.
|
|
|
|
## Method
|
|
|
|
### O que deve ser feito explicitamente
|
|
|
|
1. Criar um resolver dedicado para assignment targets.
|
|
2. Preservar exatamente os mesmos erros emitidos para target nao resolvido, nao assignable ou field access denied.
|
|
3. Reusar `PbsFlowTypeOps` sem alterar sua logica.
|
|
|
|
## Acceptance Criteria
|
|
|
|
1. Assignment target resolution deixa de ficar centralizada em `PbsFlowBodyAnalyzer`.
|
|
2. Regras de assignability e field access permanecem equivalentes.
|
|
3. Nenhum teste de assignment ou control flow muda comportamento esperado.
|
|
|
|
## Tests
|
|
|
|
1. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsAssignmentTest*`
|
|
2. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsDeclarationsTest*`
|
|
3. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test`
|
|
|
|
## Affected Documents
|
|
|
|
1. Nenhum documento normativo.
|
|
|
|
## Open Questions
|
|
|
|
1. `AssignmentTargetResolution` deve permanecer como record local ou migrar para um modelo package-private dedicado. A recomendacao e mover para o resolver de assignment para reduzir acoplamento.
|