diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-03-13 03:48:56 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-03-13 03:48:56 +0000 |
commit | 1032f093ccd7d67553737d7a7686973291730d0e (patch) | |
tree | 251c6d90e20b4f6132bae8b362a0565c6d445fd8 | |
parent | b07e4af86935780887944432542f0d4b8a2ab62f (diff) |
eval_error.c: reset attributes
* eval_error.c (print_errinfo): reset all attributes for each
lines before newlines.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62737 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | eval_error.c | 32 | ||||
-rw-r--r-- | test/ruby/test_exception.rb | 7 |
2 files changed, 32 insertions, 7 deletions
diff --git a/eval_error.c b/eval_error.c index d630f47014..5495a36c19 100644 --- a/eval_error.c +++ b/eval_error.c @@ -152,14 +152,32 @@ print_errinfo(const VALUE eclass, const VALUE errat, const VALUE emesg, const VA if (highlight) write_warn(str, reset); write_warn2(str, "\n", 1); } - if (tail) { - int eol = einfo[elen-1] == '\n'; - if (eol && highlight) --elen; - if (tail < einfo+elen) { - if (highlight) write_warn(str, bold); + if (tail && einfo+elen > tail) { + if (!highlight) { write_warn2(str, tail, einfo+elen-tail); - if (highlight) write_warn(str, reset); - if (highlight || !eol) write_warn2(str, "\n", 1); + if (einfo[elen-1] != '\n') write_warn2(str, "\n", 1); + } + else { + elen -= tail - einfo; + einfo = tail; + while (elen > 0) { + tail = memchr(einfo, '\n', elen); + if (!tail || tail > einfo) { + write_warn(str, bold); + write_warn2(str, einfo, tail ? tail-einfo : elen); + write_warn(str, reset); + if (!tail) { + write_warn2(str, "\n", 1); + break; + } + } + elen -= tail - einfo; + einfo = tail; + do ++tail; while (tail < einfo+elen && *tail == '\n'); + write_warn2(str, einfo, tail-einfo); + elen -= tail - einfo; + einfo = tail; + } } } else if (!epath) { diff --git a/test/ruby/test_exception.rb b/test/ruby/test_exception.rb index feda30644f..ec4ed03bd2 100644 --- a/test/ruby/test_exception.rb +++ b/test/ruby/test_exception.rb @@ -1262,5 +1262,12 @@ $stderr = $stdout; raise "\x82\xa0"') do |outs, errs, status| assert_operator(message, :end_with?, "\n") message = message.gsub(/\e\[[\d;]*m/, '') assert_not_operator(message, :end_with?, "\n\n") + e = RuntimeError.new("a\n\nb\n\nc") + message = assert_nothing_raised(ArgumentError, proc {e.pretty_inspect}) do + e.full_message + end + assert_all?(message.lines) do |m| + /\e\[\d[;\d]*m[^\e]*\n/ !~ m + end end end |