3.1 KiB
3.1 KiB
PR-08.1 - Intrinsic Resolution by Canonical Identity (Owner+Name+Version)
Briefing
Hoje a resolucao de intrinsic no frontend PBS ainda depende de chave por sourceMethodName simples.
Isso permite ambiguidade quando existem metodos com o mesmo nome em owners diferentes e enfraquece o contrato de canonical addressing.
Motivation
Dor atual que esta PR resolve
- Ambiguidade potencial de resolucao de intrinsic por nome de metodo sem owner.
- Dependencia implícita de heuristica textual ao inves de identidade canonica.
- Risco de regressao quando ampliar superficie de builtins/intrinsics stateful.
Target
Tornar a resolucao de CALL_INTRINSIC no frontend semanticamente canonica e nao ambigua, usando chave composta deterministica:
owner canonical,intrinsic name canonical,canonical version.
Dependencies
Prerequisitos diretos:
PR-05.2(classificacao de callsite sem heuristica textual).PR-07.2(regressao contra heuristica textual de categoria).
Scope
- Substituir o map por
sourceMethodNameno lowering executavel por indice por identidade canonica. - Ajustar
PbsReservedMetadataExtractor/surface helper para expor owner canonical explicitamente na chave de resolucao. - Tornar erro de ambiguidade explicito quando mais de uma intrinsic disputar o mesmo callsite apos resolver receiver/owner.
- Cobrir cenarios com nomes repetidos em owners diferentes.
Non-Goals
- Nao alterar ids finais de intrinsics no bytecode/runtime nesta PR.
- Nao introduzir novo opcode.
- Nao expandir parser/sintaxe de
IntrinsicCall.
Method
O que deve ser feito explicitamente
- Introduzir chave tipada para intrinsic de lowering (ex.:
IntrinsicResolutionKey(ownerCanonical, nameCanonical, version)). - Popular lookup de intrinsics com essa chave em vez de
sourceMethodName. - Resolver owner canonical a partir do receiver sem fallback textual opaco.
- Rejeitar deterministicamente callsite intrinsic sem mapeamento canonico univoco.
- Adicionar testes positivos/negativos para:
- owners distintos com mesmo metodo,
- override de versao,
- callsite sem receiver compativel.
Acceptance Criteria
- Nenhum callsite intrinsic e resolvido apenas por
sourceMethodName. - Colisao de metodo entre owners diferentes nao gera escolha implicita.
- Diagnosticos de ambiguidade/nao resolucao sao estaveis e testados.
- Build equivalente gera mesma classificacao e mesmo
intrinsicPool.
Tests
:prometeu-compiler:frontends:prometeu-frontend-pbs:test:prometeu-compiler:prometeu-build-pipeline:test --tests *LowerToIRVMServiceTest*- Regressao dedicada para callsites
input.pad.*vs outros owners com nome coincidente.
Affected Documents
docs/pbs/specs/6.1. Intrinsics and Builtin Types Specification.mddocs/pbs/specs/13. Lowering IRBackend Specification.mddocs/general/specs/20. IRBackend to IRVM Lowering Specification.mddocs/general/specs/22. Backend Spec-to-Test Conformance Matrix.md
Open Questions
- O contrato final deve expor owner canonico como campo separado em
IntrinsicSurface, ou apenas como nome canonico fully-qualified?