73 lines
3.1 KiB
Markdown
73 lines
3.1 KiB
Markdown
# 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-facing` quando 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 `slotStart` automaticamente 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:color` etc.) removendo `Slot`.
|
|
|
|
## Scope
|
|
|
|
- `frontends/prometeu-frontend-pbs` (semantica + metadata extraction + testes).
|
|
- Atualizacao de specs PBS relacionadas a builtin layout e diagnosticos.
|
|
|
|
## Method
|
|
|
|
1. Introduzir um resolvedor de layout builtin na fase semantica.
|
|
2. Calcular largura flattenada por tipo builtin e mapear offsets por campo.
|
|
3. Banir `Slot(...)` no parser (erro de sintaxe deterministico) com remocao da forma da superficie da linguagem.
|
|
4. Produzir diagnosticos `E_SEM_*` deterministicos para:
|
|
- tipo de campo nao admissivel para layout builtin,
|
|
- composicao ciclica de builtin layout,
|
|
- impossibilidade de resolver largura flattenada.
|
|
5. Persistir offsets inferidos no metadata model de lowering (`IRReservedMetadata`).
|
|
6. Remover a exigencia de `Slot` no loader/extractor.
|
|
|
|
## Acceptance Criteria
|
|
|
|
- Builtin fields sem `Slot` compilam 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: `Slot` manual 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.md`
|
|
- `docs/pbs/specs/3. Core Syntax Specification.md`
|
|
- `docs/pbs/specs/6.1. Intrinsics and Builtin Types Specification.md`
|
|
- `docs/pbs/specs/8. Stdlib Environment Packaging and Loading Specification.md`
|
|
- `docs/pbs/specs/12. Diagnostics Specification.md`
|