From 30fd651e22157a19e94cc5674b836857b7fa45ce Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Fri, 21 Feb 2020 12:33:36 +0100 Subject: [PATCH] Add the BuiltinModule base class in preparation to multiple modules Now MathModule inherits from BuiltinModule and not directly from IModule BuiltinModule defines filling mechanisms for concrete built-in modules --- src/language/BuiltinModule.cpp | 17 +++++++++++++++++ src/language/BuiltinModule.hpp | 28 ++++++++++++++++++++++++++++ src/language/CMakeLists.txt | 1 + src/language/MathModule.cpp | 14 -------------- src/language/MathModule.hpp | 15 ++------------- src/language/ModuleRepository.cpp | 2 -- 6 files changed, 48 insertions(+), 29 deletions(-) create mode 100644 src/language/BuiltinModule.cpp create mode 100644 src/language/BuiltinModule.hpp diff --git a/src/language/BuiltinModule.cpp b/src/language/BuiltinModule.cpp new file mode 100644 index 000000000..2d2b1b556 --- /dev/null +++ b/src/language/BuiltinModule.cpp @@ -0,0 +1,17 @@ +#include <BuiltinModule.hpp> + +#include <CFunctionEmbedder.hpp> + +#include <iostream> + +void +BuiltinModule::_addFunction(const std::string& name, std::shared_ptr<ICFunctionEmbedder> c_function_embedder) +{ + auto [i_function, success] = m_name_cfunction_map.insert(std::make_pair(name, c_function_embedder)); + // LCOV_EXCL_START + if (not success) { + std::cerr << "function " << name << " cannot be add!\n"; + std::exit(1); + } + // LCOV_EXCL_STOP +} diff --git a/src/language/BuiltinModule.hpp b/src/language/BuiltinModule.hpp new file mode 100644 index 000000000..2a076f511 --- /dev/null +++ b/src/language/BuiltinModule.hpp @@ -0,0 +1,28 @@ +#ifndef BUILTIN_MODULE_HPP +#define BUILTIN_MODULE_HPP + +#include <PugsMacros.hpp> + +#include <IModule.hpp> + +class ICFunctionEmbedder; +class BuiltinModule : public IModule +{ + protected: + NameCFunctionMap m_name_cfunction_map; + + void _addFunction(const std::string& name, std::shared_ptr<ICFunctionEmbedder> c_function_embedder); + + public: + const NameCFunctionMap& + getNameCFunctionsMap() const final + { + return m_name_cfunction_map; + } + + BuiltinModule() = default; + + ~BuiltinModule() = default; +}; + +#endif // BUILTIN_MODULE_HPP diff --git a/src/language/CMakeLists.txt b/src/language/CMakeLists.txt index 8086dfbca..e901374f5 100644 --- a/src/language/CMakeLists.txt +++ b/src/language/CMakeLists.txt @@ -31,6 +31,7 @@ add_library( ASTPrinter.cpp ASTSymbolTableBuilder.cpp ASTSymbolInitializationChecker.cpp + BuiltinModule.cpp MathModule.cpp ModuleRepository.cpp PugsParser.cpp) diff --git a/src/language/MathModule.cpp b/src/language/MathModule.cpp index 934b55be8..440ad9290 100644 --- a/src/language/MathModule.cpp +++ b/src/language/MathModule.cpp @@ -2,20 +2,6 @@ #include <CFunctionEmbedder.hpp> -#include <iostream> - -void -MathModule::_addFunction(const std::string& name, std::shared_ptr<ICFunctionEmbedder> c_function_embedder) -{ - auto [i_function, success] = m_name_cfunction_map.insert(std::make_pair(name, c_function_embedder)); - // LCOV_EXCL_START - if (not success) { - std::cerr << "function " << name << " cannot be add!\n"; - std::exit(1); - } - // LCOV_EXCL_STOP -} - MathModule::MathModule() { this->_addFunction("sqrt", std::make_shared<CFunctionEmbedder<double, double>>( diff --git a/src/language/MathModule.hpp b/src/language/MathModule.hpp index c3ca3ed0a..8a897c812 100644 --- a/src/language/MathModule.hpp +++ b/src/language/MathModule.hpp @@ -1,15 +1,10 @@ #ifndef MATH_MODULE_HPP #define MATH_MODULE_HPP -#include <IModule.hpp> +#include <BuiltinModule.hpp> -class MathModule : public IModule +class MathModule : public BuiltinModule { - private: - NameCFunctionMap m_name_cfunction_map; - - void _addFunction(const std::string& name, std::shared_ptr<ICFunctionEmbedder> c_function_embedder); - public: std::string_view name() const final @@ -17,12 +12,6 @@ class MathModule : public IModule return "math"; } - const NameCFunctionMap& - getNameCFunctionsMap() const final - { - return m_name_cfunction_map; - } - MathModule(); ~MathModule() = default; diff --git a/src/language/ModuleRepository.cpp b/src/language/ModuleRepository.cpp index 4eb46c0ae..1b3fee7d3 100644 --- a/src/language/ModuleRepository.cpp +++ b/src/language/ModuleRepository.cpp @@ -48,8 +48,6 @@ ModuleRepository::populateSymbolTable(const ASTNode& module_name_node, SymbolTab c_function_embedder_table.add(c_function); } - - std::cout << "populating ..."; } else { throw parse_error(std::string{"could not find module "} + module_name, std::vector{module_name_node.begin()}); } -- GitLab