Skip to content
Snippets Groups Projects
compile.ml 2.1 KiB
Newer Older
(** Time-stamp: <modified the 18/12/2007 (at 11:10) by Erwan Jahier> *)
Erwan Jahier's avatar
Erwan Jahier committed
(*----------------------------------------------------------------------
	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

----------------------------------------------------------------------*)
Erwan Jahier's avatar
Erwan Jahier committed
open Lxm
open Errors
open SyntaxTree
Erwan Jahier's avatar
Erwan Jahier committed
(*---------------------------------------------------------------------
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")
Erwan Jahier's avatar
Erwan Jahier committed
)

let doit (srclist : SyntaxTree.pack_or_model list) (mnode : Ident.idref) = (
Erwan Jahier's avatar
Erwan Jahier committed
  (* init de la table source *)
Erwan Jahier's avatar
Erwan Jahier committed

Erwan Jahier's avatar
Erwan Jahier committed

Erwan Jahier's avatar
Erwan Jahier committed
    (* le pack par défaut est le premier de la liste ... *)
    Ident.set_dft_pack_name (first_pack_in srclist);
Erwan Jahier's avatar
Erwan Jahier committed

Erwan Jahier's avatar
Erwan Jahier committed
    (* 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
Erwan Jahier's avatar
Erwan Jahier committed

Erwan Jahier's avatar
Erwan Jahier committed
      Verbose.put "-- MAIN NODE: \"%s\"\n" (CompileData.string_of_node_key mnode_key);
Erwan Jahier's avatar
Erwan Jahier committed

Erwan Jahier's avatar
Erwan Jahier committed
      (* 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 *)