prometeu-studio/docs/compiler/pbs/pull-requests/PR-12.2-flow-expression-analyzer-literal-and-structural-expression-splitting.md
2026-03-24 13:42:37 +00:00

2.4 KiB

PR-12.2 - Flow Expression Analyzer Literal and Structural Expression Splitting

Briefing

Grande parte do dispatch de PbsFlowExpressionAnalyzer cobre formas literais e estruturais de expressao: literais, this, identificadores, grupos, tuplas, blocos, unarios, binarios, none/some, new, as, ok/err.

Esta PR extrai essas familias para componentes menores, sem alterar funcionalidade.

Motivation

Dor atual que esta PR resolve

  1. O dispatch principal mistura casos triviais com regras mais complexas de call/member/switch/handle.
  2. Formas estruturais simples podem ser separadas com risco baixo e alta reducao de complexidade.
  3. Sem esse corte, o dispatch central continua inchado mesmo com contexto compartilhado.

Target

Separar a analise de expressoes literais e estruturais:

  1. literais e identificadores,
  2. grupos, tuplas e blocos,
  3. unario/binario,
  4. none/some, new, bind-independent simple forms, as, ok/err.

Dependencies

Prerequisito direto:

  1. PR-12.1

Scope

  1. Extrair casos simples de analyzeExpressionInternal para helpers/colaboradores dedicados.
  2. Manter o resultado em ExprResult exatamente como hoje.
  3. Preservar todas as chamadas a typeOps e blockAnalyzer.

Non-Goals

  1. Nao alterar regras de callback/bind.
  2. Nao alterar member access ou overload resolution.
  3. Nao alterar switch/handle/result propagation.

Method

O que deve ser feito explicitamente

  1. Mover primeiro os casos com menor acoplamento semantico.
  2. Manter o dispatch principal apenas como roteador.
  3. Preservar a ordem atual de recursion para evitar mudanca em diagnosticos acumulados.

Acceptance Criteria

  1. Casos literais e estruturais deixam de ficar todos dentro do dispatch principal.
  2. AST/semantics observados pela suite permanecem equivalentes.
  3. O hotspot principal da classe reduz tamanho e branching sem alterar comportamento.

Tests

  1. :prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsExprParserTest*
  2. :prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsOptionalResultTest*
  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. BindExpr deve entrar aqui ou junto de call resolution. A recomendacao e mantê-lo para PR-12.3, porque ele depende de matching de callback/callable.