Select Git revision
SignalManager.cpp
-
Stéphane Del Pino authored
pause is activated automatically if output runs in a terminal
Stéphane Del Pino authoredpause is activated automatically if output runs in a terminal
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>{};
}