blob: c9e65eafcda1619894d31b360465921a8bb82d86 [file] [log] [blame] [edit]
open Source
open Ast
module Unknown = Error.Make ()
exception Unknown = Unknown.Error (* indicates unknown import name *)
module Registry = Map.Make(struct type t = Ast.name let compare = compare end)
let registry = ref Registry.empty
let register name lookup = registry := Registry.add name lookup !registry
let lookup (m : module_) (im : import) : Instance.extern =
let {module_name; item_name; idesc} = im.it in
let t = import_type m im in
try Registry.find module_name !registry item_name t with Not_found ->
Unknown.error im.at
("unknown import \"" ^ string_of_name module_name ^
"\".\"" ^ string_of_name item_name ^ "\"")
let link m = List.map (lookup m) m.it.imports