Select Git revision
CoreModule.cpp
-
Stéphane Del Pino authored
This function allow to interrupt the script execution. The parameter exit code is returned by pugs when leaving.
Stéphane Del Pino authoredThis function allow to interrupt the script execution. The parameter exit code is returned by pugs when leaving.
CoreModule.cpp 6.97 KiB
#include <language/modules/CoreModule.hpp>
#include <language/modules/CoreModule.hpp>
#include <language/modules/ModuleRepository.hpp>
#include <language/utils/ASTExecutionInfo.hpp>
#include <language/utils/AffectationProcessorBuilder.hpp>
#include <language/utils/AffectationRegisterForB.hpp>
#include <language/utils/AffectationRegisterForN.hpp>
#include <language/utils/AffectationRegisterForR.hpp>
#include <language/utils/AffectationRegisterForRn.hpp>
#include <language/utils/AffectationRegisterForRnxn.hpp>
#include <language/utils/AffectationRegisterForString.hpp>
#include <language/utils/AffectationRegisterForZ.hpp>
#include <language/utils/BinaryOperatorRegisterForB.hpp>
#include <language/utils/BinaryOperatorRegisterForN.hpp>
#include <language/utils/BinaryOperatorRegisterForR.hpp>
#include <language/utils/BinaryOperatorRegisterForRn.hpp>
#include <language/utils/BinaryOperatorRegisterForRnxn.hpp>
#include <language/utils/BinaryOperatorRegisterForString.hpp>
#include <language/utils/BinaryOperatorRegisterForZ.hpp>
#include <language/utils/BuiltinFunctionEmbedder.hpp>
#include <language/utils/Exit.hpp>
#include <language/utils/IncDecOperatorRegisterForN.hpp>
#include <language/utils/IncDecOperatorRegisterForZ.hpp>
#include <language/utils/OFStream.hpp>
#include <language/utils/OStream.hpp>
#include <language/utils/UnaryOperatorRegisterForB.hpp>
#include <language/utils/UnaryOperatorRegisterForN.hpp>
#include <language/utils/UnaryOperatorRegisterForR.hpp>
#include <language/utils/UnaryOperatorRegisterForRn.hpp>
#include <language/utils/UnaryOperatorRegisterForRnxn.hpp>
#include <language/utils/UnaryOperatorRegisterForZ.hpp>
#include <utils/Messenger.hpp>
#include <utils/PugsUtils.hpp>
#include <utils/RandomEngine.hpp>
#include <random>
CoreModule::CoreModule() : BuiltinModule(true)
{
this->_addBuiltinFunction("getPugsVersion", std::function(
[]() -> std::string { return pugsVersion(); }
));
this->_addBuiltinFunction("getPugsBuildInfo", std::function(
[]() -> std::string { return pugsBuildInfo(); }
));
this->_addBuiltinFunction("getAvailableModules", std::function(
[]() -> std::string {
const ModuleRepository& repository =
ASTExecutionInfo::current().moduleRepository();
return repository.getAvailableModules();
}
));
this->_addBuiltinFunction("getModuleInfo", std::function(
[](const std::string& module_name) -> std::string {
const ModuleRepository& repository =
ASTExecutionInfo::current().moduleRepository();
return repository.getModuleInfo(module_name);
}
));
this->_addBuiltinFunction("setRandomSeed", std::function(
[](const int64_t& random_seed) -> void {
RandomEngine::instance().setRandomSeed(random_seed);
}
));
this->_addBuiltinFunction("resetRandomSeed", std::function(
[]() -> void { RandomEngine::instance().resetRandomSeed(); }
));
this->_addTypeDescriptor(ast_node_data_type_from<std::shared_ptr<const OStream>>);
this->_addBuiltinFunction("ofstream", std::function(
[](const std::string& filename) -> std::shared_ptr<const OStream> {
return std::make_shared<const OFStream>(filename);
}
));
this->_addBuiltinFunction("exit", std::function(
[](const int64_t& exit_code) -> void {
const auto& location = ASTBacktrace::getInstance().sourceLocation();
std::cout << "\n** " << rang::fgB::yellow << "exit" << rang::fg::reset
<< " explicitly called with code " << rang::fgB::cyan << exit_code
<< rang::fg::reset << "\n from " << rang::style::underline
<< location.filename() << rang::style::reset << ':'
<< rang::fgB::yellow << location.line() << rang::fg::reset << '\n';
throw language::Exit(exit_code);
}
));
this->_addNameValue("cout", ast_node_data_type_from<std::shared_ptr<const OStream>>,
EmbeddedData{std::make_shared<DataHandler<const OStream>>(std::make_shared<OStream>(std::cout))});
this->_addNameValue("cerr", ast_node_data_type_from<std::shared_ptr<const OStream>>,
EmbeddedData{std::make_shared<DataHandler<const OStream>>(std::make_shared<OStream>(std::cerr))});
this->_addNameValue("clog", ast_node_data_type_from<std::shared_ptr<const OStream>>,
EmbeddedData{std::make_shared<DataHandler<const OStream>>(std::make_shared<OStream>(std::clog))});
}
void
CoreModule::registerOperators() const
{
AffectationRegisterForB{};
AffectationRegisterForN{};
AffectationRegisterForZ{};
AffectationRegisterForR{};
AffectationRegisterForRn<1>{};
AffectationRegisterForRn<2>{};
AffectationRegisterForRn<3>{};
AffectationRegisterForRnxn<1>{};
AffectationRegisterForRnxn<2>{};
AffectationRegisterForRnxn<3>{};
AffectationRegisterForString{};
BinaryOperatorRegisterForB{};
BinaryOperatorRegisterForN{};
BinaryOperatorRegisterForZ{};
BinaryOperatorRegisterForR{};
BinaryOperatorRegisterForRn<1>{};
BinaryOperatorRegisterForRn<2>{};
BinaryOperatorRegisterForRn<3>{};
BinaryOperatorRegisterForRnxn<1>{};
BinaryOperatorRegisterForRnxn<2>{};
BinaryOperatorRegisterForRnxn<3>{};
BinaryOperatorRegisterForString{};
IncDecOperatorRegisterForN{};
IncDecOperatorRegisterForZ{};
UnaryOperatorRegisterForB{};
UnaryOperatorRegisterForN{};
UnaryOperatorRegisterForZ{};
UnaryOperatorRegisterForR{};
UnaryOperatorRegisterForRn<1>{};
UnaryOperatorRegisterForRn<2>{};
UnaryOperatorRegisterForRn<3>{};
UnaryOperatorRegisterForRnxn<1>{};
UnaryOperatorRegisterForRnxn<2>{};
UnaryOperatorRegisterForRnxn<3>{};
}