Version courante : 1.0.0
Ce document définit le contrat de sérialisation JSON de l’IR normatif.
Le document JSON doit avoir la forme :
{
"ir_version": "1.0.0",
"format": "ProtoScriptIR",
"module": { "...": "..." }
}Contraintes :
formatMUST êtreProtoScriptIRir_versionMUST être1.0.0(pour cette version)module.kindMUST êtreModule
module contient :
functions: array deFunction
Function contient :
kind:Functionname: string non videparams: arrayreturnType:IRTypeblocks: array non vide deBlock
IRType contient :
kind:IRTypename: string (ex:int,list<int>,view<int>)repr: optionnel (ex:(ptr,len),(ptr,len,cap))
Block contient :
kind:Blocklabel: string non vide, unique dans la fonctioninstrs: array d’instructions
Le validateur structurel vérifie :
- labels de blocs uniques par fonction
- cibles de
jump/branch_if/branch_iter_has_nextexistantes opconnue pour chaque instruction- présence d’un bloc
entry - instructions non vides par bloc
- paramètres : noms non vides, uniques, types
IRType IRType.namevalide (identifiant simple oulist<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.)
Émettre l’IR JSON :
bin/protoscriptc --emit-ir-json file.ptsValider un document IR JSON :
bin/protoscriptc --validate-ir file.json- 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.