open Parsetree let filter_out_directives lb = List.concat (List.map (function | Ptop_def s -> s | Ptop_dir _ -> []) lb) let parse_mod_use_file parse_use_file name lb = let modname = String.capitalize (Filename.chop_extension (Filename.basename name)) in let items = filter_out_directives (parse_use_file lb) in [ Ptop_def [{pstr_desc = Pstr_module ( Location.mknoloc modname , { pmod_desc = Pmod_structure items; pmod_loc = Location.none } ); pstr_loc = Location.none }] ] let dir_mod_use name = let parse_use_file = !Toploop.parse_use_file in Toploop.parse_use_file := parse_mod_use_file parse_use_file name; ignore (Toploop.use_file Format.std_formatter name); Toploop.parse_use_file := parse_use_file let () = Hashtbl.add Toploop.directive_table "mod_use" (Toploop.Directive_string dir_mod_use)