diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/modcontext.cc | 4 | ||||
| -rw-r--r-- | src/module.h | 7 | 
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; | 
