-
Erwan Jahier authored
CALL_BY_NAME -> STRUCT_n STRUCT_EXP_n -> STRUCT_anonymous_n flaged -> flagged
Erwan Jahier authoredCALL_BY_NAME -> STRUCT_n STRUCT_EXP_n -> STRUCT_anonymous_n flaged -> flagged
expandPack.mli 1.83 KiB
(** Time-stamp: <modified the 07/02/2008 (at 11:25) by Erwan Jahier> *)
(*----------------------------------------------------------------------
MODULE : ExpandPack
------------------------------------------------------------------------
DESCRIPTION :
Une seule fonctionnalité : transformer au niveau "quasi-syntaxique" des
instances de pack du style "package toto = titi(....)" en package "donné",
SI BESOIN.
(i.e. pack_info -> pack_given)
----------------------------------------------------------------------*)
(*----------------------------------------------------------------------
MODULE : ExpandPack
------------------------------------------------------------------------
DESCRIPTION :
Entrée, deux tables d'infos syntaxique :
- une table ptab : (string, SyntaxTree.pack_info srcflagged) Hashtbl.t
- une table mtab : (string, SyntaxTree.model_info srcflagged) Hashtbl.t
Sortie, une table d'info de package expansées :
- une table xptab : (string, t) Hashtbl.t
Fonctionnement :
On met en relation les couples (param formel, arg effectif) :
(type t, id/type_exp) : on crée l'alias "type t = id/type_exp",
qu'on met à la fois dans les export et dans le body
=> LES DÉCLARATIONS DE TYPES SONT EXPORTÉES
(const c : t, id/val_exp) : on crée l'alias "const c : t = id/val_exp",
qu'on met à la fois dans les export et dans le body
=> LES DÉCLARATIONS DE CONST SONT EXPORTÉES
(node n(..)returns(...), id/node_exp) :
- on garde le noeud "abstrait" dans export => node n(..)returns(...)
- on définit l'alias "node n(..)returns(...) = id/node_exp" dans body
----------------------------------------------------------------------*)
val doit :
(* la table des sources de modeles *)
(Ident.t, SyntaxTree.model_info Lxm.srcflagged) Hashtbl.t ->
(* la def de pack à traiter *)
(SyntaxTree.pack_info Lxm.srcflagged) ->
SyntaxTree.pack_given