Source file utils.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
open Gospel

let term_printer text global_loc (t : Tterm.term) =
  let open Ppxlib.Location in
  try
    String.sub text
      (t.t_loc.loc_start.pos_cnum - global_loc.loc_start.pos_cnum)
      (t.t_loc.loc_end.pos_cnum - t.t_loc.loc_start.pos_cnum)
  with Invalid_argument _ -> Fmt.str "%a" Tterm_printer.print_term t

let module_name_of_path p =
  let filename = Filename.basename p in
  String.index filename '.' |> String.sub filename 0 |> String.capitalize_ascii

let type_check load_path name sigs =
  let md = Tmodule.init_muc name in
  let penv =
    module_name_of_path name |> Utils.Sstr.singleton |> Typing.penv load_path
  in
  let gfile = List.fold_left (Typing.type_sig_item penv) md sigs in
  let sigs = Tmodule.wrap_up_muc gfile |> fun file -> file.fl_sigs in
  (gfile.muc_import, sigs)