Legend:
Library
Module
Module type
Parameter
Class
Class type
Define the Data Structure representing Compiled programs. By compiled we mean that constant are propagated, packages are instanciated, recursive node are inlined, etc.
lic = lustre internal code
Basically it is Lustre with all the suggar removed.
Définition des structures de données utilisée pour la compil, plus des utilitaires pour les messages d'erreurs, de bug etc. N.B. on utilise beaucoup l'adjectif "effectif", qui signifie simplement "correct" (c'est bizzare mais c'est ainsi.
REMARQUE GENERALE :
D'une manière générale, la compil d'une entité syntaxique "toto" est implémentée par une fonction check_toto, qui prend en entrée (entr'autre) un toto et renvoie un toto.
TYPES DE DONNEES :
type_ : dénotation de type effectif, implémente l'équivalence des types, construit à partir d'une type_exp.
const : dénotation de constante effective, construit à partir d'une val_exp => IL S'AGIT DE LA REPRESENTATION INTERNE DES CONSTANTES STATIQUES
var_info : déclaration de variable, construit à partir de var_info.
val : union entre const et var_info.
slice_info : dénotation de tranche de tableau, construit à partir de slice_info.
left : version compilée de left_part
eq_info : version compilée de eq_info
node_exp : dénotation d'opération, peut être predef ou utilisateur, construit à partir de node_exp.
static_arg : déclaration d'un static arg
pack_env : la "grosse" structure de données qui gère la compilation des packages => implémentée dans CheckGlobal pour la partie type/const/function (initialisation) et dans CheckNode pour la partie node/template qui est faite à la demande.
UTILITAIRES :
type_of_const : renvoie le type d'une const
string_of_type : pretty-print d'un type
string_of_const : pretty-print d'une const
string_of_node_key : pretty-print d'un node_key _ string_of_slice :
node_exp correspond à une instance de template (ou, cas limite, de noeud sans param statique).
La clé est un couple ident/liste d'arguments statiques effectifs
N.B. une horloge formelle est soit None (base) soit l'index d'une entrée (0..nb entrées-1). Les formal-clocks sont créées au cours du type-checking (et pas du clock-checking)