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