1 #pragma once
2 
3 #include <string>
4 #include "AST.h"
5 #include "feature.h"
6 
7 class AbstractModule
8 {
9 private:
10 	const Feature *feature;
11 public:
AbstractModule()12 	AbstractModule() : feature(nullptr) {}
AbstractModule(const Feature & feature)13 	AbstractModule(const Feature& feature) : feature(&feature) {}
14 	virtual ~AbstractModule();
is_experimental()15 	virtual bool is_experimental() const { return feature != nullptr; }
is_enabled()16 	virtual bool is_enabled() const { return (feature == nullptr) || feature->is_enabled(); }
17 	virtual class AbstractNode *instantiate(const std::shared_ptr<class Context>& ctx, const class ModuleInstantiation *inst, const std::shared_ptr<class EvalContext>& evalctx = {}) const = 0;
18 };
19