3.1 KiB
3.1 KiB
PR-029 - PBS Builtin Slot Inference and Canonical Layout Semantics
Briefing
Hoje o frontend aceita Slot(index=...) manual em declare builtin type, e parte da validacao de layout fica empurrada para load-facing.
Isso abre espaco para inconsistencias entre declaracao de campos, flattening e offsets.
Esta PR move ownership de slot para o compilador: offsets passam a ser inferidos deterministicamente a partir do layout canonico flattenado, sem autoria manual de Slot.
Motivation
- Reduzir superficie de erro humano em builtin layout.
- Alinhar semantica estatica com o contrato de layout flattenado.
- Evitar que erros de layout aparecam tarde em
load-facingquando sao semanticos.
Target
- Tornar
Slot(index=...)proibido na superficie de fonte de builtin field. - Banir
Slot(...)da gramatica PBS (erro de sintaxe), sem fallback transitorio. - Inferir
slotStartautomaticamente no frontend com base em:- ordem canonica dos campos,
- largura flattenada dos tipos admissiveis,
- composicao builtin aninhada.
- Mover validacoes de layout para
static semantics. - Atualizar extracao de metadata reservada para usar slots inferidos (nao lidos de atributo).
- Atualizar fixtures do SDK minimo (
@core:coloretc.) removendoSlot.
Scope
frontends/prometeu-frontend-pbs(semantica + metadata extraction + testes).- Atualizacao de specs PBS relacionadas a builtin layout e diagnosticos.
Method
- Introduzir um resolvedor de layout builtin na fase semantica.
- Calcular largura flattenada por tipo builtin e mapear offsets por campo.
- Banir
Slot(...)no parser (erro de sintaxe deterministico) com remocao da forma da superficie da linguagem. - Produzir diagnosticos
E_SEM_*deterministicos para:- tipo de campo nao admissivel para layout builtin,
- composicao ciclica de builtin layout,
- impossibilidade de resolver largura flattenada.
- Persistir offsets inferidos no metadata model de lowering (
IRReservedMetadata). - Remover a exigencia de
Slotno loader/extractor.
Acceptance Criteria
- Builtin fields sem
Slotcompilam quando o layout e admissivel. - Qualquer
Slot(...)manual e rejeitado como erro de sintaxe (breaking imediato). Pixel(x:int, y:int, color:Color)recebe offsets inferidos consistentes com flattening.- Erros de layout builtin deixam de depender de
E_LOAD_*para serem detectados. - Suite Gate U cobre positivo e negativo para inferencia de slot.
Tests
- Positivo: inferencia de offsets em builtin simples e composto.
- Negativo:
Slotmanual presente (falha de parser). - Negativo: campo com tipo nao admissivel.
- Negativo: ciclo de composicao builtin.
- Asserts por
code,phase,templateId,span.
Non-Goals
- Alterar o contrato de runtime/verifier para alem da inferencia de layout no frontend.
- Definir encoding final de artifact/PBX.
Affected Documents
docs/pbs/specs/4. Static Semantics Specification.mddocs/pbs/specs/3. Core Syntax Specification.mddocs/pbs/specs/6.1. Intrinsics and Builtin Types Specification.mddocs/pbs/specs/8. Stdlib Environment Packaging and Loading Specification.mddocs/pbs/specs/12. Diagnostics Specification.md