From 7c5036878c6ee4833d29f7914d0cbe73a0298197 Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Sat, 23 Apr 2022 17:17:47 +0200 Subject: [PATCH] Add --preamble(default),--no-preamble option When `--no-preamble` is used, pugs do not print execution info. This at least is useful for documentation generation. --- src/language/PugsParser.cpp | 14 +++++++++---- src/language/ast/ASTModulesImporter.cpp | 16 ++++++++++---- src/language/ast/ASTNodeDataTypeBuilder.cpp | 5 ++++- src/language/ast/ASTNodeDataTypeChecker.cpp | 6 +++++- src/language/ast/ASTSymbolTableBuilder.cpp | 6 +++++- src/utils/ConsoleManager.cpp | 14 +++++++++++++ src/utils/ConsoleManager.hpp | 8 ++++++- src/utils/PugsUtils.cpp | 23 ++++++++++++++------- src/utils/RandomEngine.cpp | 12 +++++++---- 9 files changed, 80 insertions(+), 24 deletions(-) diff --git a/src/language/PugsParser.cpp b/src/language/PugsParser.cpp index 1c02a820a..368e86c83 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 fa3f479e3..4154a7d8c 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 cb9e479df..ac1d36a54 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 3e6774849..76a153f22 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 2e019d8db..d2eb7d77c 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 f55004ac7..7006d373f 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 b9ee7cbfb..a2afe46fb 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 3214ba653..705fbd5e0 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 9b7efc162..dd463af53 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 -- GitLab