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