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 @@
#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());
}
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};
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()};
......
......@@ -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) {
if (ConsoleManager::showPreamble()) {
std::cout << " * ignoring '" << rang::fgB::green << module_name << rang::style::reset
<< "' module, already imported\n";
}
return;
}
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);
if (ConsoleManager::showPreamble()) {
std::cout << " - loaded modules\n";
}
}
......@@ -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);
if (ConsoleManager::showPreamble()) {
std::cout << " - build node data types\n";
}
}
#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);
if (ConsoleManager::showPreamble()) {
std::cout << " - checked node data types\n";
}
}
......@@ -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);
if (ConsoleManager::showPreamble()) {
std::cout << " - checked symbols declaration\n";
}
}
......@@ -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)
{
......
......@@ -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);
};
......
......@@ -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,6 +139,8 @@ initialize(int& argc, char* argv[])
setDefaultOMPEnvironment();
Kokkos::initialize(argc, argv);
if (ConsoleManager::showPreamble()) {
std::cout << "----------------- " << rang::fg::green << "pugs exec info" << rang::fg::reset
<< " ----------------------" << '\n';
......@@ -147,6 +153,7 @@ initialize(int& argc, char* argv[])
Kokkos::DefaultExecutionSpace::print_configuration(std::cout);
std::cout << rang::style::reset;
std::cout << "-------------------------------------------------------\n";
}
return filename;
}
......
#include <utils/ConsoleManager.hpp>
#include <utils/Messenger.hpp>
#include <utils/RandomEngine.hpp>
......@@ -48,10 +49,13 @@ void
RandomEngine::setRandomSeed(const uint64_t 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
<< random_seed << rang::style::reset << '\n';
}
init = false;
}
void
RandomEngine::resetRandomSeed()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment