prometeu-studio/docs/compiler/pbs/pull-requests/PR-13.4-flow-body-analyzer-assignment-target-resolution-decomposition.md
2026-03-24 13:42:37 +00:00

2.5 KiB

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.