Newer
Older
Erwan Jahier
committed
(** Time-stamp: <modified the 18/12/2007 (at 11:10) by Erwan Jahier> *)
(*----------------------------------------------------------------------
module : Compile
date :
------------------------------------------------------------------------
DESCRIPTION :
Le top du compilateur
_ init_appli : initialisation de l'appli (links
dynamiques enre les modules caml, nécessaires
à cause des dépendences cycliques)
- test_check : test du check statique du packbody
- compile : compilation standard
----------------------------------------------------------------------*)
(*---------------------------------------------------------------------
init_appli
---------------------------------------------------------------------*)
(* let init_appli () = ( *)
(* CheckExp.call_check_node_key := CheckNode.check_node_key *)
(* ) *)
let rec first_pack_in = (
function
| (NSPack pi)::_ -> pi.it.pa_name
| _::tail -> first_pack_in tail
| [] -> raise (Global_error "No package has been provided")
let doit (srclist : SyntaxTree.pack_or_model list) (mnode : Ident.idref) = (
Erwan Jahier
committed
let srctab = SyntaxTab.create srclist in
Erwan Jahier
committed
SyntaxTab.dump srctab;
Ident.set_dft_pack_name (first_pack_in srclist);
(* la clée "absolue" du main node (pas d'args statiques) *)
let mnode_key = CompileData.make_simple_node_key (Ident.long_of_idref mnode) in
Verbose.put "-- MAIN NODE: \"%s\"\n" (CompileData.string_of_node_key mnode_key);
(* Pour chaque package, on a un solveur de références
globales, pour les types, const et oper :
- les références pointées (p::n) sont recherchées
directement dans la srctab puisqu'il n'y a pas
d'ambiguité
- les références simple sont recherchées :
. dans le pack lui-même
. dans un des packs déclarés "uses", avec
priorité dans l'ordre
*)
let lzcomp = LazyCompiler.create srctab in
(* let res = LazyCompiler.do_node lzcomp mnode_key in *)
LazyCompiler.test_types lzcomp ; (* XXX : a virer *)