Skip to content

Latest commit

 

History

History
86 lines (58 loc) · 1.96 KB

File metadata and controls

86 lines (58 loc) · 1.96 KB

ProtoScript2


ProtoScript V2 — IR Serialized Format

Version courante : 1.0.0

Ce document définit le contrat de sérialisation JSON de l’IR normatif.

1. Enveloppe

Le document JSON doit avoir la forme :

{
  "ir_version": "1.0.0",
  "format": "ProtoScriptIR",
  "module": { "...": "..." }
}

Contraintes :

  • format MUST être ProtoScriptIR
  • ir_version MUST être 1.0.0 (pour cette version)
  • module.kind MUST être Module

2. Structure minimale

module contient :

  • functions: array de Function

Function contient :

  • kind: Function
  • name: string non vide
  • params: array
  • returnType: IRType
  • blocks: array non vide de Block

IRType contient :

  • kind: IRType
  • name: string (ex: int, list<int>, view<int>)
  • repr: optionnel (ex: (ptr,len), (ptr,len,cap))

Block contient :

  • kind: Block
  • label: string non vide, unique dans la fonction
  • instrs: array d’instructions

3. Invariants validés

Le validateur structurel vérifie :

  • labels de blocs uniques par fonction
  • cibles de jump/branch_if/branch_iter_has_next existantes
  • op connue pour chaque instruction
  • présence d’un bloc entry
  • instructions non vides par bloc
  • paramètres : noms non vides, uniques, types IRType
  • IRType.name valide (identifiant simple ou list<T>, view<T>, slice<T>, map<K,V>)
  • présence des champs obligatoires par instruction (ex. jump.target, branch_if.cond/then/else, call_static.callee, etc.)

4. Outils CLI

Émettre l’IR JSON :

bin/protoscriptc --emit-ir-json file.pts

Valider un document IR JSON :

bin/protoscriptc --validate-ir file.json

5. Politique d’évolution

  • Toute rupture de compatibilité du schéma MUST changer ir_version.
  • Les changements backward-compatible SHOULD conserver la lecture des anciens champs.
  • Les backends C MUST valider le document IR avant consommation.