# HG changeset patch # User John W. Eaton # Date 1430283277 14400 # Node ID cbce57ca9747bc8d582f2830dedc060a82b5793e # Parent a2e84b98eb6944d570a9a7bfbd46a14be727597b# Parent 64a2d4c87ecbac9264bee3059a1a3a6e23d646b5 maint: Merge away extra head. diff -r a2e84b98eb69 -r cbce57ca9747 libinterp/corefcn/error.cc --- a/libinterp/corefcn/error.cc Tue Apr 28 12:18:12 2015 -0400 +++ b/libinterp/corefcn/error.cc Wed Apr 29 00:54:37 2015 -0400 @@ -158,21 +158,22 @@ std::ostringstream output_buf; - if (name) - output_buf << name << ": "; - octave_vformat (output_buf, fmt, args); - output_buf << std::endl; - // FIXME: we really want to capture the message before it has all the // formatting goop attached to it. We probably also want just the // message, not the traceback information. - std::string msg_string = output_buf.str (); + std::string base_msg = output_buf.str (); + std::string msg_string; + + if (name) + msg_string = std::string (name) + ": "; + + msg_string += base_msg + "\n"; Vlast_warning_id = id; - Vlast_warning_message = msg_string; + Vlast_warning_message = base_msg; if (! Vquiet_warning) { @@ -337,33 +338,30 @@ { if (error_state != -2) { - if (fmt) + if (fmt && *fmt) { - if (*fmt) + size_t len = strlen (fmt); + + if (len > 0) { - size_t len = strlen (fmt); - - if (len > 0) + if (fmt[len - 1] == '\n') { - if (fmt[len - 1] == '\n') + if (len > 1) { - if (len > 1) - { - char *tmp_fmt = strsave (fmt); - tmp_fmt[len - 1] = '\0'; - verror (true, os, name, id, tmp_fmt, args, with_cfn); - delete [] tmp_fmt; - } + // Strip newline before issuing error + std::string tmp_fmt (fmt, len - 1); + verror (true, os, name, id, tmp_fmt.c_str (), + args, with_cfn); + } - error_state = -2; - } - else - { - verror (true, os, name, id, fmt, args, with_cfn); + error_state = -2; + } + else + { + verror (true, os, name, id, fmt, args, with_cfn); - if (! error_state) - error_state = 1; - } + if (! error_state) + error_state = 1; } } } @@ -634,13 +632,21 @@ } else if (warn_opt == 1) { - vwarning ("warning", id, fmt, args); + bool fmt_suppresses_backtrace = false; + size_t fmt_len = fmt ? strlen (fmt) : 0; + fmt_suppresses_backtrace = (fmt_len > 0 && fmt[fmt_len-1] == '\n'); + + if (fmt_suppresses_backtrace && fmt_len > 1) + { + // Strip newline before issuing warning + std::string tmp_fmt (fmt, fmt_len - 1); + vwarning ("warning", id, tmp_fmt.c_str (), args); + } + else + vwarning ("warning", id, fmt, args); bool in_user_code = octave_call_stack::caller_user_code () != 0; - bool fmt_suppresses_backtrace = false; - size_t fmt_len = fmt ? strlen (fmt) : 0; - fmt_suppresses_backtrace = (fmt_len > 0 && fmt[fmt_len-1] == '\n'); if (! fmt_suppresses_backtrace && in_user_code && Vbacktrace_on_warning && ! warning_state diff -r a2e84b98eb69 -r cbce57ca9747 scripts/testfun/fail.m --- a/scripts/testfun/fail.m Tue Apr 28 12:18:12 2015 -0400 +++ b/scripts/testfun/fail.m Wed Apr 29 00:54:37 2015 -0400 @@ -67,11 +67,20 @@ endif ## Parse input arguments - test_warning = (nargin > 1 && strcmp (pattern, "warning")); - if (nargin == 3) - pattern = warning_pattern; - elseif (nargin == 1 || (nargin == 2 && test_warning)) + test_warning = false; + if (nargin == 1) pattern = ""; + elseif (nargin == 2 && ! strcmp (pattern, "warning")) + ## Normal error test + elseif (nargin >= 2 && strcmp (pattern, "warning")) + test_warning = true; + if (nargin == 2) + pattern = ""; + else + pattern = warning_pattern; + endif + else + print_usage (); endif ## Match any nonempty message @@ -89,28 +98,24 @@ ## Clear old warnings. lastwarn (""); ## Make sure warnings are turned on. - state = warning ("query", "quiet"); + wstate = warning ("query", "quiet"); warning ("on", "quiet"); try evalin ("caller", [code ";"]); ## Retrieve new warnings. warn = lastwarn (); - warning (state.state, "quiet"); + warning (wstate.state, "quiet"); if (isempty (warn)) msg = sprintf ("expected warning <%s> but got none", pattern); else - ## Transform "warning: ...\n" to "...". - warn([1:9, end]) = []; if (! isempty (regexp (warn, pattern, "once"))) return; endif msg = sprintf ("expected warning <%s>\nbut got <%s>", pattern, warn); endif catch - warning (state.state, "quiet"); - err = lasterr; - ## Transform "error: ...\n", to "...". - err([1:6, end]) = []; + warning (wstate.state, "quiet"); + err = lasterr (); msg = sprintf ("expected warning <%s>\nbut got error <%s>", pattern, err); end_try_catch @@ -121,9 +126,6 @@ msg = sprintf ("expected error <%s> but got none", pattern); catch err = lasterr (); - if (strcmp (err(1:7), "error:")) - err([1:6, end]) = []; # transform "error: ...\n", to "..." - endif if (! isempty (regexp (err, pattern, "once"))) return; endif @@ -153,4 +155,5 @@ ## Test input validation %!error fail () %!error fail (1,2,3,4) +%!error fail (1, "nowarning", "foo")