diff --git a/src/language/PugsParser.cpp b/src/language/PugsParser.cpp index 1c02a820abda8b89a0e789703b547bb9b96ee2b1..368e86c834c63935bdc1316e66c9459b96645fe2 100644 --- a/src/language/PugsParser.cpp +++ b/src/language/PugsParser.cpp @@ -18,6 +18,7 @@ #include <language/utils/ASTPrinter.hpp> #include <language/utils/OperatorRepository.hpp> #include <language/utils/SymbolTable.hpp> +#include <utils/ConsoleManager.hpp> #include <utils/PugsAssert.hpp> #include <utils/PugsUtils.hpp> #include <utils/SignalManager.hpp> @@ -45,8 +46,10 @@ parser(const std::string& filename) throw UnexpectedError(os.str()); } - std::cout << rang::style::bold << "Parsing file " << rang::style::reset << rang::style::underline << filename - << rang::style::reset << " ...\n"; + if (ConsoleManager::showPreamble()) { + std::cout << rang::style::bold << "Parsing file " << rang::style::reset << rang::style::underline << filename + << rang::style::reset << " ...\n"; + } auto parse_and_execute = [](auto& input) { OperatorRepository::create(); @@ -75,8 +78,11 @@ parser(const std::string& filename) ASTNodeEmptyBlockCleaner{*root_node}; ASTNodeExpressionBuilder{*root_node}; - std::cout << "-------------------------------------------------------\n"; - std::cout << rang::style::bold << "Executing AST..." << rang::style::reset << '\n'; + + if (ConsoleManager::showPreamble()) { + std::cout << "-------------------------------------------------------\n"; + std::cout << rang::style::bold << "Executing AST..." << rang::style::reset << '\n'; + } ASTExecutionInfo execution_info{*root_node, module_importer.moduleRepository()}; diff --git a/src/language/ast/ASTModulesImporter.cpp b/src/language/ast/ASTModulesImporter.cpp index fa3f479e307fd2b0c78d265879c22157dfec85b8..4154a7d8ca2bc874ba7df224c14a23838a21f493 100644 --- a/src/language/ast/ASTModulesImporter.cpp +++ b/src/language/ast/ASTModulesImporter.cpp @@ -2,6 +2,7 @@ #include <language/PEGGrammar.hpp> #include <language/utils/OperatorRepository.hpp> +#include <utils/ConsoleManager.hpp> void ASTModulesImporter::_importModule(ASTNode& import_node) @@ -13,12 +14,16 @@ ASTModulesImporter::_importModule(ASTNode& import_node) const std::string module_name = module_name_node.string(); if (auto [i_module_name, success] = m_imported_modules.insert(module_name); not success) { - std::cout << " * ignoring '" << rang::fgB::green << module_name << rang::style::reset - << "' module, already imported\n"; + if (ConsoleManager::showPreamble()) { + std::cout << " * ignoring '" << rang::fgB::green << module_name << rang::style::reset + << "' module, already imported\n"; + } return; } - std::cout << " * importing '" << rang::fgB::green << module_name << rang::style::reset << "' module\n"; + if (ConsoleManager::showPreamble()) { + std::cout << " * importing '" << rang::fgB::green << module_name << rang::style::reset << "' module\n"; + } m_module_repository.populateSymbolTable(module_name_node, m_symbol_table); m_module_repository.registerOperators(module_name); @@ -43,5 +48,8 @@ ASTModulesImporter::ASTModulesImporter(ASTNode& root_node) : m_symbol_table{*roo m_module_repository.populateMandatorySymbolTable(root_node, m_symbol_table); this->_importAllModules(root_node); - std::cout << " - loaded modules\n"; + + if (ConsoleManager::showPreamble()) { + std::cout << " - loaded modules\n"; + } } diff --git a/src/language/ast/ASTNodeDataTypeBuilder.cpp b/src/language/ast/ASTNodeDataTypeBuilder.cpp index cb9e479df5f2e1f64edb4d5cb732acebcb505af6..ac1d36a5401bb372aefe2b8190acd04938e9bb54 100644 --- a/src/language/ast/ASTNodeDataTypeBuilder.cpp +++ b/src/language/ast/ASTNodeDataTypeBuilder.cpp @@ -7,6 +7,7 @@ #include <language/utils/OperatorRepository.hpp> #include <language/utils/ParseError.hpp> #include <language/utils/SymbolTable.hpp> +#include <utils/ConsoleManager.hpp> #include <utils/PugsAssert.hpp> void @@ -635,5 +636,7 @@ ASTNodeDataTypeBuilder::ASTNodeDataTypeBuilder(ASTNode& node) this->_buildNodeDataTypes(node); - std::cout << " - build node data types\n"; + if (ConsoleManager::showPreamble()) { + std::cout << " - build node data types\n"; + } } diff --git a/src/language/ast/ASTNodeDataTypeChecker.cpp b/src/language/ast/ASTNodeDataTypeChecker.cpp index 3e6774849a5bbef6386f606a1bfe8a6993a84192..76a153f22a9c76670e33fa732f748c960e3bc393 100644 --- a/src/language/ast/ASTNodeDataTypeChecker.cpp +++ b/src/language/ast/ASTNodeDataTypeChecker.cpp @@ -1,6 +1,7 @@ #include <language/ast/ASTNodeDataTypeChecker.hpp> #include <language/utils/ParseError.hpp> +#include <utils/ConsoleManager.hpp> void ASTNodeDataTypeChecker::_checkNodeDataTypes(const ASTNode& n) @@ -18,5 +19,8 @@ ASTNodeDataTypeChecker::ASTNodeDataTypeChecker(const ASTNode& node) { Assert(node.is_root()); this->_checkNodeDataTypes(node); - std::cout << " - checked node data types\n"; + + if (ConsoleManager::showPreamble()) { + std::cout << " - checked node data types\n"; + } } diff --git a/src/language/ast/ASTSymbolTableBuilder.cpp b/src/language/ast/ASTSymbolTableBuilder.cpp index 2e019d8db10301f274cfa2946d39f290ed5a4da5..d2eb7d77c8abb454a8db76818af01227ba400fcc 100644 --- a/src/language/ast/ASTSymbolTableBuilder.cpp +++ b/src/language/ast/ASTSymbolTableBuilder.cpp @@ -3,6 +3,7 @@ #include <language/PEGGrammar.hpp> #include <language/utils/ParseError.hpp> #include <language/utils/SymbolTable.hpp> +#include <utils/ConsoleManager.hpp> void ASTSymbolTableBuilder::buildSymbolTable(ASTNode& n, std::shared_ptr<SymbolTable>& symbol_table) @@ -124,5 +125,8 @@ ASTSymbolTableBuilder::ASTSymbolTableBuilder(ASTNode& node) Assert(node.is_root()); this->buildSymbolTable(node, node.m_symbol_table); - std::cout << " - checked symbols declaration\n"; + + if (ConsoleManager::showPreamble()) { + std::cout << " - checked symbols declaration\n"; + } } diff --git a/src/utils/ConsoleManager.cpp b/src/utils/ConsoleManager.cpp index f55004ac7dd2181256404b486ad1eaa0c05abd85..7006d373f17715e7b521b81501f970bc1ab0f3c2 100644 --- a/src/utils/ConsoleManager.cpp +++ b/src/utils/ConsoleManager.cpp @@ -2,6 +2,20 @@ #include <rang.hpp> +bool ConsoleManager::s_show_preamble = true; + +bool +ConsoleManager::showPreamble() +{ + return s_show_preamble; +} + +void +ConsoleManager::setShowPreamble(bool show_preamble) +{ + s_show_preamble = show_preamble; +} + bool ConsoleManager::isTerminal(std::ostream& os) { diff --git a/src/utils/ConsoleManager.hpp b/src/utils/ConsoleManager.hpp index b9ee7cbfbf123af63f131d07df8655c6f6ba4f85..a2afe46fbc0ad16e263d1f5a9b3f8a84d5202d94 100644 --- a/src/utils/ConsoleManager.hpp +++ b/src/utils/ConsoleManager.hpp @@ -3,8 +3,14 @@ #include <string> -struct ConsoleManager +class ConsoleManager { + private: + static bool s_show_preamble; + + public: + static bool showPreamble(); + static void setShowPreamble(bool show_preamble); static bool isTerminal(std::ostream& os); static void init(bool colorize); }; diff --git a/src/utils/PugsUtils.cpp b/src/utils/PugsUtils.cpp index 3214ba653989b13805181b7c54e3502182cf9e63..705fbd5e0a349ff60ef3a1c680dd3d3e0a4d25ec 100644 --- a/src/utils/PugsUtils.cpp +++ b/src/utils/PugsUtils.cpp @@ -105,6 +105,9 @@ initialize(int& argc, char* argv[]) app.add_flag("--fpe,!--no-fpe", enable_fpe, "Trap floating point exceptions [default: true]"); + bool show_preamble = true; + app.add_flag("--preamble,!--no-preamble", show_preamble, "Show execution info preamble [default: true]"); + bool show_backtrace = false; app.add_flag("-b,--backtrace,!--no-backtrace", show_backtrace, "Show backtrace on failure [default: false]"); @@ -123,6 +126,7 @@ initialize(int& argc, char* argv[]) } BacktraceManager::setShow(show_backtrace); + ConsoleManager::setShowPreamble(show_preamble); ConsoleManager::init(enable_color); SignalManager::setPauseForDebug(pause_on_error); } @@ -135,18 +139,21 @@ initialize(int& argc, char* argv[]) setDefaultOMPEnvironment(); Kokkos::initialize(argc, argv); - std::cout << "----------------- " << rang::fg::green << "pugs exec info" << rang::fg::reset - << " ----------------------" << '\n'; - std::cout << rang::style::bold; + if (ConsoleManager::showPreamble()) { + std::cout << "----------------- " << rang::fg::green << "pugs exec info" << rang::fg::reset + << " ----------------------" << '\n'; + + std::cout << rang::style::bold; #ifdef PUGS_HAS_MPI - std::cout << "MPI number of ranks " << parallel::size() << '\n'; + std::cout << "MPI number of ranks " << parallel::size() << '\n'; #else // PUGS_HAS_MPI - std::cout << "Sequential build\n"; + std::cout << "Sequential build\n"; #endif // PUGS_HAS_MPI - Kokkos::DefaultExecutionSpace::print_configuration(std::cout); - std::cout << rang::style::reset; - std::cout << "-------------------------------------------------------\n"; + Kokkos::DefaultExecutionSpace::print_configuration(std::cout); + std::cout << rang::style::reset; + std::cout << "-------------------------------------------------------\n"; + } return filename; } diff --git a/src/utils/RandomEngine.cpp b/src/utils/RandomEngine.cpp index 9b7efc162c4d2d7b0ff912689b9f718eae39af5b..dd463af5322c7af4d60b9b6e26ac1a0f9bf7a5ea 100644 --- a/src/utils/RandomEngine.cpp +++ b/src/utils/RandomEngine.cpp @@ -1,4 +1,5 @@ +#include <utils/ConsoleManager.hpp> #include <utils/Messenger.hpp> #include <utils/RandomEngine.hpp> @@ -47,10 +48,13 @@ RandomEngine::RandomEngine() void RandomEngine::setRandomSeed(const uint64_t random_seed) { - m_random_engine = std::default_random_engine(random_seed); - - std::cout << " * setting " << rang::fgB::green << "random seed" << rang::style::reset << " to " << rang::fgB::yellow - << random_seed << rang::style::reset << '\n'; + m_random_engine = std::default_random_engine(random_seed); + static bool init = true; + if (ConsoleManager::showPreamble() or not init) { + std::cout << " * setting " << rang::fgB::green << "random seed" << rang::style::reset << " to " << rang::fgB::yellow + << random_seed << rang::style::reset << '\n'; + } + init = false; } void