summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorsten Paul <Torsten.Paul@gmx.de>2014-01-02 21:41:21 (GMT)
committerTorsten Paul <Torsten.Paul@gmx.de>2014-01-02 22:28:02 (GMT)
commit7f3659907358f57e912f76291f8c9500b3032fbd (patch)
treeaba281f10d0ef87ae55feaaf8cb6246b1fdc5102
parent72865e17dae7f51c60e0db54c1aa070f8125f273 (diff)
Integrate feature registry with modules.
In case a module is attached to a disabled feature, the module lookup will give a warning message and ignore that (builtin) module.
-rw-r--r--src/modcontext.cc4
-rw-r--r--src/module.h7
2 files changed, 11 insertions, 0 deletions
diff --git a/src/modcontext.cc b/src/modcontext.cc
index 7941cf5..7b8cb07 100644
--- a/src/modcontext.cc
+++ b/src/modcontext.cc
@@ -104,6 +104,10 @@ const AbstractModule *ModuleContext::findLocalModule(const std::string &name) co
{
if (this->modules_p && this->modules_p->find(name) != this->modules_p->end()) {
AbstractModule *m = this->modules_p->find(name)->second;
+ if (!m->is_enabled()) {
+ PRINTB("WARNING: Experimental builtin module '%s' is not enabled.", name);
+ return NULL;
+ }
std::string replacement = Builtins::instance()->isDeprecated(name);
if (!replacement.empty()) {
PRINTB("DEPRECATED: The %s() module will be removed in future releases. Use %s() instead.", name % replacement);
diff --git a/src/module.h b/src/module.h
index 8414706..81e5f10 100644
--- a/src/module.h
+++ b/src/module.h
@@ -13,6 +13,7 @@
#include "value.h"
#include "typedefs.h"
#include "localscope.h"
+#include "feature.h"
class ModuleInstantiation
{
@@ -60,8 +61,13 @@ public:
class AbstractModule
{
+private:
+ const Feature *feature;
public:
+ AbstractModule() : feature(NULL) {}
+ AbstractModule(const Feature& feature) : feature(&feature) {}
virtual ~AbstractModule();
+ virtual bool is_enabled() const { return (feature == NULL) || feature->is_enabled(); };
virtual class AbstractNode *instantiate(const Context *ctx, const ModuleInstantiation *inst, const class EvalContext *evalctx = NULL) const;
virtual std::string dump(const std::string &indent, const std::string &name) const;
};
@@ -70,6 +76,7 @@ class Module : public AbstractModule
{
public:
Module() { }
+ Module(const Feature& feature) : AbstractModule(feature) { }
virtual ~Module();
virtual AbstractNode *instantiate(const Context *ctx, const ModuleInstantiation *inst, const EvalContext *evalctx = NULL) const;
contact: Jan Huwald // Impressum