--- /dev/null
+let rec assert_ng mapath ngpath =
+ let to_be_compiled =
+ if exists_file ngpath then
+ let preamble = preamble_of_ngpath ngpath in
+ let children_bad = List.exists assert_ng preamble in
+ children_bad || date mapath > date ngpath
+ else
+ true
+ in
+ if to_be_compiled then
+ if already_loaded ngpath then
+ (* maybe recompiling it I would get the same... *)
+ raise (AlreadyLoaded mapath)
+ else
+ begin
+ compile mapath;
+ true
+ end
+ else
+ false
+
+and compile mapath =
+ let oldstatus = status in
+ let status = toplevel (new status) (content_of mapath) in
+ salva_su_disco status;
+ oldstatus
+
+and toplevel status testo =
+ List.fold
+ (fun status cmd ->
+ match cmd with
+ Include mapath ->
+ let ngpath = ... mapath in
+ assert_ng mapath ngpath;
+ carico ngpath
+ | -> ...
+ ) status testo
+;;