From d30c600eb2a3afe286193d4bebfb10d35e61cf81 Mon Sep 17 00:00:00 2001 From: Leonardo de Moura Date: Fri, 23 May 2014 16:23:47 -0700 Subject: [PATCH] fix(library/module): bug in module import Signed-off-by: Leonardo de Moura --- src/library/module.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/library/module.cpp b/src/library/module.cpp index 743a898121..578b33a80c 100644 --- a/src/library/module.cpp +++ b/src/library/module.cpp @@ -211,9 +211,11 @@ struct import_modules_fn { r->m_module_idx = m_import_counter; m_import_counter++; std::swap(r->m_obj_code, code); + m_module_info.insert(mk_pair(mname, r)); for (auto i : imports) { - r->m_dependents.push_back(load_module_file(i)); + auto d = load_module_file(i); + d->m_dependents.push_back(r); } if (imports.empty()) @@ -344,7 +346,17 @@ struct import_modules_fn { return env; } + void store_direct_imports(unsigned num_modules, std::string const * modules) { + m_senv.update([&](environment const & env) -> environment { + module_ext ext = get_extension(env); + for (unsigned i = 0; i < num_modules; i++) + ext.m_direct_imports = list(modules[i], ext.m_direct_imports); + return update(env, ext); + }); + } + environment operator()(unsigned num_modules, std::string const * modules) { + store_direct_imports(num_modules, modules); for (unsigned i = 0; i < num_modules; i++) load_module_file(modules[i]); process_asynch_tasks();