Skip to content

Commit

Permalink
add redirect for warnings
Browse files Browse the repository at this point in the history
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
  • Loading branch information
NikolajBjorner committed Aug 23, 2022
1 parent fbf9e30 commit 2f8b133
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/api/api_parsers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,7 @@ extern "C" {
std::istringstream is(s);
ctx->set_regular_stream(ous);
ctx->set_diagnostic_stream(ous);
cmd_context::scoped_redirect _redirect(*ctx);
try {
if (!parse_smt2_commands(*ctx.get(), is)) {
SET_ERROR_CODE(Z3_PARSER_ERROR, ous.str());
Expand Down
16 changes: 16 additions & 0 deletions src/cmd_context/cmd_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,22 @@ class cmd_context : public progress_callback, public tactic_manager, public ast_
~scoped_watch() { m_ctx.m_watch.stop(); }
};

struct scoped_redirect {
cmd_context& m_ctx;
std::ostream& m_verbose;
std::ostream* m_warning;

scoped_redirect(cmd_context& ctx): m_ctx(ctx), m_verbose(verbose_stream()), m_warning(warning_stream()) {
set_warning_stream(&(*m_ctx.m_diagnostic));
set_verbose_stream(m_ctx.diagnostic_stream());
}

~scoped_redirect() {
set_verbose_stream(m_verbose);
set_warning_stream(m_warning);
}
};



protected:
Expand Down
4 changes: 4 additions & 0 deletions src/util/warning.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,10 @@ void set_warning_stream(std::ostream* strm) {
g_warning_stream = strm;
}

std::ostream* warning_stream() {
return g_warning_stream;
}

void format2ostream(std::ostream & out, char const* msg, va_list args) {
svector<char> buff;
BEGIN_ERR_HANDLER();
Expand Down
2 changes: 2 additions & 0 deletions src/util/warning.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ void set_error_stream(std::ostream* strm);

void set_warning_stream(std::ostream* strm);

std::ostream* warning_stream();

void warning_msg(const char * msg, ...);

void format2ostream(std::ostream& out, char const* fmt, va_list args);
Expand Down

0 comments on commit 2f8b133

Please sign in to comment.