aboutsummaryrefslogtreecommitdiffhomepage
path: root/parse_execution.cpp
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2014-01-08 18:20:55 -0800
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2014-01-08 18:20:55 -0800
commit0e9d159bc2e95d71ae2051957397bc689e020e42 (patch)
treef16159d6c7f14afbe37834778b4d419aa768c0a0 /parse_execution.cpp
parentd69f408b14a267ff2968f21f24241cb3e87102de (diff)
Improvements to error reporting. In particular, we now append a newline
in reader_shell_test, so that there's always a statement terminator. Otherwise commands like 'echo |' would not be considered an error (just incomplete).
Diffstat (limited to 'parse_execution.cpp')
-rw-r--r--parse_execution.cpp34
1 files changed, 20 insertions, 14 deletions
diff --git a/parse_execution.cpp b/parse_execution.cpp
index c628b1d6..518ff479 100644
--- a/parse_execution.cpp
+++ b/parse_execution.cpp
@@ -638,20 +638,26 @@ parse_execution_result_t parse_execution_context_t::run_while_statement(const pa
/* Reports an error. Always returns parse_execution_errored, so you can assign the result to an 'errored' variable */
parse_execution_result_t parse_execution_context_t::report_error(const parse_node_t &node, const wchar_t *fmt, ...)
{
- parse_error_t error;
- error.source_start = node.source_start;
- error.source_length = node.source_length;
- error.code = parse_error_syntax; //hackish
-
- va_list va;
- va_start(va, fmt);
- error.text = vformat_string(fmt, va);
- va_end(va);
-
- /* Get a backtrace */
- wcstring backtrace;
- const parse_error_list_t error_list = parse_error_list_t(1, error);
- parser->get_backtrace(src, error_list, &backtrace);
+ if (parser->show_errors)
+ {
+ /* Create an error */
+ parse_error_t error;
+ error.source_start = node.source_start;
+ error.source_length = node.source_length;
+ error.code = parse_error_syntax; //hackish
+
+ va_list va;
+ va_start(va, fmt);
+ error.text = vformat_string(fmt, va);
+ va_end(va);
+
+ /* Get a backtrace */
+ wcstring backtrace_and_desc;
+ const parse_error_list_t error_list = parse_error_list_t(1, error);
+ parser->get_backtrace(src, error_list, &backtrace_and_desc);
+
+ fprintf(stderr, "%ls", backtrace_and_desc.c_str());
+ }
return parse_execution_errored;
}