summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorsten Paul <Torsten.Paul@gmx.de>2014-01-02 21:50:04 (GMT)
committerTorsten Paul <Torsten.Paul@gmx.de>2014-01-02 22:28:02 (GMT)
commit09f8e80a7d49188ff18195e40e3c02a2d8768257 (patch)
tree88f711ffae5863c8673f7bdd3c34b5f7faf74cb2
parent7f3659907358f57e912f76291f8c9500b3032fbd (diff)
Integrate feature registry with functions.
In case a function is attached to a disabled feature, the function lookup will give a warning message and ignore that (builtin) function.
-rw-r--r--src/function.h9
-rw-r--r--src/modcontext.cc7
2 files changed, 15 insertions, 1 deletions
diff --git a/src/function.h b/src/function.h
index a1fde3c..2491809 100644
--- a/src/function.h
+++ b/src/function.h
@@ -3,13 +3,21 @@
#include "value.h"
#include "typedefs.h"
+#include "feature.h"
+
#include <string>
#include <vector>
+
class AbstractFunction
{
+private:
+ const Feature *feature;
public:
+ AbstractFunction() : feature(NULL) {}
+ AbstractFunction(const Feature& feature) : feature(&feature) {}
virtual ~AbstractFunction();
+ virtual bool is_enabled() const { return (feature == NULL) || feature->is_enabled(); };
virtual Value evaluate(const class Context *ctx, const class EvalContext *evalctx) const;
virtual std::string dump(const std::string &indent, const std::string &name) const;
};
@@ -21,6 +29,7 @@ public:
eval_func_t eval_func;
BuiltinFunction(eval_func_t f) : eval_func(f) { }
+ BuiltinFunction(eval_func_t f, const Feature& feature) : AbstractFunction(feature), eval_func(f) { }
virtual ~BuiltinFunction();
virtual Value evaluate(const Context *ctx, const EvalContext *evalctx) const;
diff --git a/src/modcontext.cc b/src/modcontext.cc
index 7b8cb07..21b04fd 100644
--- a/src/modcontext.cc
+++ b/src/modcontext.cc
@@ -95,7 +95,12 @@ void ModuleContext::registerBuiltin()
const AbstractFunction *ModuleContext::findLocalFunction(const std::string &name) const
{
if (this->functions_p && this->functions_p->find(name) != this->functions_p->end()) {
- return this->functions_p->find(name)->second;
+ AbstractFunction *f = this->functions_p->find(name)->second;
+ if (!f->is_enabled()) {
+ PRINTB("WARNING: Experimental builtin function '%s' is not enabled.", name);
+ return NULL;
+ }
+ return f;
}
return NULL;
}
contact: Jan Huwald // Impressum