73 lines
2.6 KiB
Markdown
73 lines
2.6 KiB
Markdown
# 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?
|