aboutsummaryrefslogtreecommitdiff
path: root/build/module.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'build/module.cxx')
-rw-r--r--build/module.cxx114
1 files changed, 0 insertions, 114 deletions
diff --git a/build/module.cxx b/build/module.cxx
deleted file mode 100644
index 79a9bdb..0000000
--- a/build/module.cxx
+++ /dev/null
@@ -1,114 +0,0 @@
-// file : build/module.cxx -*- C++ -*-
-// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd
-// license : MIT; see accompanying LICENSE file
-
-#include <build/module>
-
-#include <utility> // make_pair()
-
-#include <build/scope>
-#include <build/variable>
-#include <build/diagnostics>
-
-using namespace std;
-
-namespace build
-{
- available_module_map builtin_modules;
-
- void
- boot_module (const string& name, scope& rs, const location& loc)
- {
- // First see if this modules has already been loaded for this project.
- //
- loaded_module_map& lm (rs.modules);
- auto i (lm.find (name));
-
- if (i != lm.end ())
- {
- module_state& s (i->second);
-
- // The only valid situation here is if the module has already been
- // bootstrapped.
- //
- assert (s.boot);
- return;
- }
-
- // Otherwise search for this module.
- //
- auto j (builtin_modules.find (name));
-
- if (j == builtin_modules.end ())
- fail (loc) << "unknown module " << name;
-
- const module_functions& mf (j->second);
-
- if (mf.boot == nullptr)
- fail (loc) << "module " << name << " shouldn't be loaded in bootstrap";
-
- i = lm.emplace (name, module_state {true, mf.init, nullptr, loc}).first;
- mf.boot (rs, loc, i->second.module);
- }
-
- bool
- load_module (bool opt,
- const string& name,
- scope& rs,
- scope& bs,
- const location& loc)
- {
- // First see if this modules has already been loaded for this project.
- //
- loaded_module_map& lm (rs.modules);
- auto i (lm.find (name));
- bool f (i == lm.end ());
-
- if (f)
- {
- // Otherwise search for this module.
- //
- auto j (builtin_modules.find (name));
-
- if (j == builtin_modules.end ())
- {
- if (!opt)
- fail (loc) << "unknown module " << name;
- }
- else
- {
- const module_functions& mf (j->second);
-
- if (mf.boot != nullptr)
- fail (loc) << "module " << name << " should be loaded in bootstrap";
-
- i = lm.emplace (
- name, module_state {false, mf.init, nullptr, loc}).first;
- }
- }
- else
- {
- module_state& s (i->second);
-
- if (s.boot)
- {
- s.boot = false;
- f = true; // This is a first call to init.
- }
- }
-
- bool l (i != lm.end ());
- bool c (l && i->second.init (rs, bs, loc, i->second.module, f, opt));
-
- const variable& lv (var_pool.find (name + ".loaded",
- variable_visibility::project,
- bool_type));
- const variable& cv (var_pool.find (name + ".configured",
- variable_visibility::project,
- bool_type));
- bs.assign (lv) = l;
- bs.assign (cv) = c;
-
- return l && c;
- }
-}