summaryrefslogtreecommitdiff
path: root/src/module.cc
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2012-02-04 00:43:53 (GMT)
committerMarius Kintel <marius@kintel.net>2012-02-15 00:32:37 (GMT)
commitb9d218e13760f21be5aa94c15631d63b29439e18 (patch)
treef01d1e16766b5af06939aa531e84b40bcf6f2f31 /src/module.cc
parent44ff85399011ea1bd3eb812ce97d312ccc4f32eb (diff)
Initial implementation of ModuleCache and dependency tracking of used modules
Diffstat (limited to 'src/module.cc')
-rw-r--r--src/module.cc17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/module.cc b/src/module.cc
index 6641ff7..7ad2e33 100644
--- a/src/module.cc
+++ b/src/module.cc
@@ -25,11 +25,13 @@
*/
#include "module.h"
+#include "ModuleCache.h"
#include "node.h"
#include "context.h"
#include "expression.h"
#include "function.h"
#include "printutils.h"
+
#include <boost/foreach.hpp>
#include <sstream>
@@ -201,7 +203,18 @@ std::string Module::dump(const std::string &indent, const std::string &name) con
return dump.str();
}
-void Module::clear_library_cache()
+void Module::handleDependencies()
{
- Module::libs_cache.clear();
+ PRINTB_NOCACHE("Module::handleDependencies(): %p (%d libs %p)", this % this->usedlibs.size() % &this->usedlibs);
+ // Iterating manually since we want to modify the container while iterating
+ Module::ModuleContainer::iterator iter = this->usedlibs.begin();
+ while (iter != this->usedlibs.end()) {
+ Module::ModuleContainer::iterator curr = iter++;
+ curr->second = ModuleCache::instance()->evaluate(curr->first);
+ PRINTB_NOCACHE(" %s: %p", curr->first % curr->second);
+ if (!curr->second) {
+ PRINTB_NOCACHE("WARNING: Failed to compile library '%s'.", curr->first);
+ this->usedlibs.erase(curr);
+ }
+ }
}
contact: Jan Huwald // Impressum