/*ARGSUSED*/ static int p_import(value library, type tlib, value import_mod, type tim) { module_item *export_prop, *import_prop; pri *pe, *pi; didlist *lib_scan; Check_Module_And_Access(import_mod, tim); Check_Module(tlib, library); a_mutex_lock(&ModuleLock); export_prop = ModuleItem(library.did); import_prop = ModuleItem(import_mod.did); /* check that the module is not already imported */ lib_scan = import_prop->imports; while (lib_scan) { if (lib_scan->name == library.did) { a_mutex_unlock(&ModuleLock); Succeed_; /* the library is already imported */ } lib_scan = lib_scan->next; } /* add library to the lists of the mods imported by import_mod */ _add_module(library.did, &(import_prop->imports)); /* now perform the pending imports */ resolve_pending_imports(import_prop->procedures); a_mutex_unlock(&ModuleLock); Succeed_; }
Definition::Definition(int seq, const char *name, InitFunction init, int order) { _add_module(this, seq, order, new module_info{name, init}); }