Skip to content
Snippets Groups Projects
Commit 7c503687 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

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.
parent eb312dc1
No related branches found
No related tags found
1 merge request!145git subrepo clone git@gitlab.com:OlMon/org-themes.git packages/org-themes
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <language/utils/ASTPrinter.hpp> #include <language/utils/ASTPrinter.hpp>
#include <language/utils/OperatorRepository.hpp> #include <language/utils/OperatorRepository.hpp>
#include <language/utils/SymbolTable.hpp> #include <language/utils/SymbolTable.hpp>
#include <utils/ConsoleManager.hpp>
#include <utils/PugsAssert.hpp> #include <utils/PugsAssert.hpp>
#include <utils/PugsUtils.hpp> #include <utils/PugsUtils.hpp>
#include <utils/SignalManager.hpp> #include <utils/SignalManager.hpp>
...@@ -45,8 +46,10 @@ parser(const std::string& filename) ...@@ -45,8 +46,10 @@ parser(const std::string& filename)
throw UnexpectedError(os.str()); throw UnexpectedError(os.str());
} }
if (ConsoleManager::showPreamble()) {
std::cout << rang::style::bold << "Parsing file " << rang::style::reset << rang::style::underline << filename std::cout << rang::style::bold << "Parsing file " << rang::style::reset << rang::style::underline << filename
<< rang::style::reset << " ...\n"; << rang::style::reset << " ...\n";
}
auto parse_and_execute = [](auto& input) { auto parse_and_execute = [](auto& input) {
OperatorRepository::create(); OperatorRepository::create();
...@@ -75,8 +78,11 @@ parser(const std::string& filename) ...@@ -75,8 +78,11 @@ parser(const std::string& filename)
ASTNodeEmptyBlockCleaner{*root_node}; ASTNodeEmptyBlockCleaner{*root_node};
ASTNodeExpressionBuilder{*root_node}; ASTNodeExpressionBuilder{*root_node};
if (ConsoleManager::showPreamble()) {
std::cout << "-------------------------------------------------------\n"; std::cout << "-------------------------------------------------------\n";
std::cout << rang::style::bold << "Executing AST..." << rang::style::reset << '\n'; std::cout << rang::style::bold << "Executing AST..." << rang::style::reset << '\n';
}
ASTExecutionInfo execution_info{*root_node, module_importer.moduleRepository()}; ASTExecutionInfo execution_info{*root_node, module_importer.moduleRepository()};
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#include <language/PEGGrammar.hpp> #include <language/PEGGrammar.hpp>
#include <language/utils/OperatorRepository.hpp> #include <language/utils/OperatorRepository.hpp>
#include <utils/ConsoleManager.hpp>
void void
ASTModulesImporter::_importModule(ASTNode& import_node) ASTModulesImporter::_importModule(ASTNode& import_node)
...@@ -13,12 +14,16 @@ ASTModulesImporter::_importModule(ASTNode& import_node) ...@@ -13,12 +14,16 @@ ASTModulesImporter::_importModule(ASTNode& import_node)
const std::string module_name = module_name_node.string(); const std::string module_name = module_name_node.string();
if (auto [i_module_name, success] = m_imported_modules.insert(module_name); not success) { if (auto [i_module_name, success] = m_imported_modules.insert(module_name); not success) {
if (ConsoleManager::showPreamble()) {
std::cout << " * ignoring '" << rang::fgB::green << module_name << rang::style::reset std::cout << " * ignoring '" << rang::fgB::green << module_name << rang::style::reset
<< "' module, already imported\n"; << "' module, already imported\n";
}
return; return;
} }
if (ConsoleManager::showPreamble()) {
std::cout << " * importing '" << rang::fgB::green << module_name << rang::style::reset << "' module\n"; 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.populateSymbolTable(module_name_node, m_symbol_table);
m_module_repository.registerOperators(module_name); m_module_repository.registerOperators(module_name);
...@@ -43,5 +48,8 @@ ASTModulesImporter::ASTModulesImporter(ASTNode& root_node) : m_symbol_table{*roo ...@@ -43,5 +48,8 @@ ASTModulesImporter::ASTModulesImporter(ASTNode& root_node) : m_symbol_table{*roo
m_module_repository.populateMandatorySymbolTable(root_node, m_symbol_table); m_module_repository.populateMandatorySymbolTable(root_node, m_symbol_table);
this->_importAllModules(root_node); this->_importAllModules(root_node);
if (ConsoleManager::showPreamble()) {
std::cout << " - loaded modules\n"; std::cout << " - loaded modules\n";
} }
}
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <language/utils/OperatorRepository.hpp> #include <language/utils/OperatorRepository.hpp>
#include <language/utils/ParseError.hpp> #include <language/utils/ParseError.hpp>
#include <language/utils/SymbolTable.hpp> #include <language/utils/SymbolTable.hpp>
#include <utils/ConsoleManager.hpp>
#include <utils/PugsAssert.hpp> #include <utils/PugsAssert.hpp>
void void
...@@ -635,5 +636,7 @@ ASTNodeDataTypeBuilder::ASTNodeDataTypeBuilder(ASTNode& node) ...@@ -635,5 +636,7 @@ ASTNodeDataTypeBuilder::ASTNodeDataTypeBuilder(ASTNode& node)
this->_buildNodeDataTypes(node); this->_buildNodeDataTypes(node);
if (ConsoleManager::showPreamble()) {
std::cout << " - build node data types\n"; std::cout << " - build node data types\n";
} }
}
#include <language/ast/ASTNodeDataTypeChecker.hpp> #include <language/ast/ASTNodeDataTypeChecker.hpp>
#include <language/utils/ParseError.hpp> #include <language/utils/ParseError.hpp>
#include <utils/ConsoleManager.hpp>
void void
ASTNodeDataTypeChecker::_checkNodeDataTypes(const ASTNode& n) ASTNodeDataTypeChecker::_checkNodeDataTypes(const ASTNode& n)
...@@ -18,5 +19,8 @@ ASTNodeDataTypeChecker::ASTNodeDataTypeChecker(const ASTNode& node) ...@@ -18,5 +19,8 @@ ASTNodeDataTypeChecker::ASTNodeDataTypeChecker(const ASTNode& node)
{ {
Assert(node.is_root()); Assert(node.is_root());
this->_checkNodeDataTypes(node); this->_checkNodeDataTypes(node);
if (ConsoleManager::showPreamble()) {
std::cout << " - checked node data types\n"; std::cout << " - checked node data types\n";
} }
}
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include <language/PEGGrammar.hpp> #include <language/PEGGrammar.hpp>
#include <language/utils/ParseError.hpp> #include <language/utils/ParseError.hpp>
#include <language/utils/SymbolTable.hpp> #include <language/utils/SymbolTable.hpp>
#include <utils/ConsoleManager.hpp>
void void
ASTSymbolTableBuilder::buildSymbolTable(ASTNode& n, std::shared_ptr<SymbolTable>& symbol_table) ASTSymbolTableBuilder::buildSymbolTable(ASTNode& n, std::shared_ptr<SymbolTable>& symbol_table)
...@@ -124,5 +125,8 @@ ASTSymbolTableBuilder::ASTSymbolTableBuilder(ASTNode& node) ...@@ -124,5 +125,8 @@ ASTSymbolTableBuilder::ASTSymbolTableBuilder(ASTNode& node)
Assert(node.is_root()); Assert(node.is_root());
this->buildSymbolTable(node, node.m_symbol_table); this->buildSymbolTable(node, node.m_symbol_table);
if (ConsoleManager::showPreamble()) {
std::cout << " - checked symbols declaration\n"; std::cout << " - checked symbols declaration\n";
} }
}
...@@ -2,6 +2,20 @@ ...@@ -2,6 +2,20 @@
#include <rang.hpp> #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 bool
ConsoleManager::isTerminal(std::ostream& os) ConsoleManager::isTerminal(std::ostream& os)
{ {
......
...@@ -3,8 +3,14 @@ ...@@ -3,8 +3,14 @@
#include <string> #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 bool isTerminal(std::ostream& os);
static void init(bool colorize); static void init(bool colorize);
}; };
......
...@@ -105,6 +105,9 @@ initialize(int& argc, char* argv[]) ...@@ -105,6 +105,9 @@ initialize(int& argc, char* argv[])
app.add_flag("--fpe,!--no-fpe", enable_fpe, "Trap floating point exceptions [default: true]"); 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; bool show_backtrace = false;
app.add_flag("-b,--backtrace,!--no-backtrace", show_backtrace, "Show backtrace on failure [default: 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[]) ...@@ -123,6 +126,7 @@ initialize(int& argc, char* argv[])
} }
BacktraceManager::setShow(show_backtrace); BacktraceManager::setShow(show_backtrace);
ConsoleManager::setShowPreamble(show_preamble);
ConsoleManager::init(enable_color); ConsoleManager::init(enable_color);
SignalManager::setPauseForDebug(pause_on_error); SignalManager::setPauseForDebug(pause_on_error);
} }
...@@ -135,6 +139,8 @@ initialize(int& argc, char* argv[]) ...@@ -135,6 +139,8 @@ initialize(int& argc, char* argv[])
setDefaultOMPEnvironment(); setDefaultOMPEnvironment();
Kokkos::initialize(argc, argv); Kokkos::initialize(argc, argv);
if (ConsoleManager::showPreamble()) {
std::cout << "----------------- " << rang::fg::green << "pugs exec info" << rang::fg::reset std::cout << "----------------- " << rang::fg::green << "pugs exec info" << rang::fg::reset
<< " ----------------------" << '\n'; << " ----------------------" << '\n';
...@@ -147,6 +153,7 @@ initialize(int& argc, char* argv[]) ...@@ -147,6 +153,7 @@ initialize(int& argc, char* argv[])
Kokkos::DefaultExecutionSpace::print_configuration(std::cout); Kokkos::DefaultExecutionSpace::print_configuration(std::cout);
std::cout << rang::style::reset; std::cout << rang::style::reset;
std::cout << "-------------------------------------------------------\n"; std::cout << "-------------------------------------------------------\n";
}
return filename; return filename;
} }
......
#include <utils/ConsoleManager.hpp>
#include <utils/Messenger.hpp> #include <utils/Messenger.hpp>
#include <utils/RandomEngine.hpp> #include <utils/RandomEngine.hpp>
...@@ -48,10 +49,13 @@ void ...@@ -48,10 +49,13 @@ void
RandomEngine::setRandomSeed(const uint64_t random_seed) RandomEngine::setRandomSeed(const uint64_t random_seed)
{ {
m_random_engine = std::default_random_engine(random_seed); 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 std::cout << " * setting " << rang::fgB::green << "random seed" << rang::style::reset << " to " << rang::fgB::yellow
<< random_seed << rang::style::reset << '\n'; << random_seed << rang::style::reset << '\n';
} }
init = false;
}
void void
RandomEngine::resetRandomSeed() RandomEngine::resetRandomSeed()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment