blob: 39f90fec8317946ca7733fe0297f595e8c9b3eeb [file] [log] [blame] [edit]
open Source
open Ast
open Types
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 (ImportT (module_name, item_name, xt)) at : Instance.extern =
try Registry.find module_name !registry item_name xt with Not_found ->
Unknown.error at
("unknown import \"" ^ Types.string_of_name module_name ^
"\".\"" ^ Types.string_of_name item_name ^ "\"")
let link m =
let ModuleT (its, _) = moduletype_of m in
List.map2 lookup its (List.map Source.at m.it.imports)