diff options
author | 2014-01-08 18:20:55 -0800 | |
---|---|---|
committer | 2014-01-08 18:20:55 -0800 | |
commit | 0e9d159bc2e95d71ae2051957397bc689e020e42 (patch) | |
tree | f16159d6c7f14afbe37834778b4d419aa768c0a0 /parse_execution.cpp | |
parent | d69f408b14a267ff2968f21f24241cb3e87102de (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.cpp | 34 |
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; } |