prometeu-studio/docs/compiler/pbs/pull-requests/PR-13.3-flow-body-analyzer-statement-analysis-splitting.md
2026-03-24 13:42:37 +00:00

2.5 KiB

PR-13.3 - Flow Body Analyzer Statement Analysis Splitting

Briefing

Depois de separar entry/completion, o maior hotspot restante em PbsFlowBodyAnalyzer passa a ser analyzeBlock e analyzeStatement, com tratamento de let, return, if, for, while, expression statement e delegacao para PbsFlowExpressionAnalyzer.

Esta PR extrai essa superficie para colaboradores menores, sem alterar funcionalidade.

Motivation

Dor atual que esta PR resolve

  1. analyzeStatement concentra varias formas de statement com regras semanticas distintas.
  2. Loops, if e return usam os mesmos parametros e diagnosticos, mas pertencem a clusters semanticos diferentes.
  3. A manutencao dessa logica em um unico metodo torna a classe dificil de evoluir.

Target

Separar a analise de statements:

  1. blocos e escopos,
  2. let e expression statements,
  3. return flow,
  4. if/for/while.

Dependencies

Prerequisitos diretos:

  1. PR-13.1
  2. PR-13.2

Scope

  1. Extrair analyzeBlock e o dispatch de analyzeStatement.
  2. Extrair regras de let, if, for, while e expression statement para helpers/colaboradores dedicados.
  3. Deixar return bootstrap pronto para corte proprio, sem ainda mexer em assignment target resolution.

Non-Goals

  1. Nao alterar mutabilidade de escopo local.
  2. Nao alterar validacao de tipos de condicao ou bounds de loop.
  3. Nao alterar assignment resolution.

Method

O que deve ser feito explicitamente

  1. Introduzir um statement analyzer ou divisao equivalente por familias.
  2. Reusar o contexto compartilhado da PR-13.1.
  3. Preservar a ordem atual de chamadas ao expressionAnalyzer.

Acceptance Criteria

  1. analyzeStatement deixa de concentrar todas as formas de statement.
  2. Scoping, condition checks e loop bound checks permanecem equivalentes.
  3. Suite semantica continua verde sem mudanca funcional.

Tests

  1. :prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsControlFlowTest*
  2. :prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsAssignmentTest*
  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. return deve ficar no statement analyzer ou em um colaborador proprio de result flow. A recomendacao e deixar o corte final para a PR seguinte se isso simplificar mais a classe.