prometeu-studio/docs/compiler/pbs/pull-requests/PR-08.4-call-func-callee-module-identity-correctness.md
2026-03-24 13:42:37 +00:00

2.6 KiB

PR-08.4 - CALL_FUNC Callee Module Identity Correctness

Briefing

No lowering executavel PBS, instrucoes CALL_FUNC podem carregar calleeModuleKey do contexto local, e nao necessariamente do callable alvo.

Isso compromete rastreabilidade, debug e futuras validacoes de linking por modulo.

Motivation

Dor atual que esta PR resolve

  1. Metadado de callsite incorreto para chamadas inter-modulo.
  2. Dificulta diagnostico e verificacao de integridade no backend.
  3. Introduz risco de regressao quando modulo vira identidade tipada no contrato.

Target

Garantir que todo CALL_FUNC preserva identidade real do alvo (callee module) de forma deterministica, sem usar contexto local como proxy.

Dependencies

Prerequisitos diretos:

  1. PR-05.0.4 (assinatura/callable internados).
  2. PR-08.2 (quando ModuleId tipado estiver ativo, usar id do alvo).

Scope

  1. Corrigir montagem de callsite para puxar modulo do calleeCallableId resolvido.
  2. Ajustar modelos auxiliares de resolucao de callable para incluir modulo do alvo.
  3. Expandir testes de lowering com chamadas cross-module.

Non-Goals

  1. Nao alterar categoria de callsite.
  2. Nao introduzir linking dinamico de funcoes.
  3. Nao alterar bytecode emitido para opcodes de chamada.

Method

O que deve ser feito explicitamente

  1. Enriquecer lookup de callable para retornar identidade completa (callableId + module identity).
  2. Em CALL_FUNC, preencher callee module com identidade do alvo real.
  3. Adicionar validacao de consistencia em contrato executavel para evitar modulo invalido em chamada.
  4. Criar regressao com:
    • modulo A chamando funcao em modulo B,
    • assert do modulo do callee no IRBackend.

Acceptance Criteria

  1. Nenhuma instrução CALL_FUNC usa modulo local quando alvo e externo.
  2. Testes cross-module passam com metadado correto de callee.
  3. Diagnosticos mantem atribuicao correta em falhas de resolucao.
  4. Contrato segue deterministico em rebuilds equivalentes.

Tests

  1. :prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsFrontendCompilerTest*
  2. :prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PBSFrontendPhaseServiceTest*
  3. :prometeu-compiler:prometeu-build-pipeline:test --tests *LowerToIRVMPipelineStageTest*

Affected Documents

  1. docs/pbs/specs/13. Lowering IRBackend Specification.md
  2. docs/general/specs/20. IRBackend to IRVM Lowering Specification.md
  3. docs/general/specs/22. Backend Spec-to-Test Conformance Matrix.md

Open Questions

  1. Durante a transicao, manter calleeCallableName textual para debug ou derivar sempre da assinatura por id?