From 9d39eb6b40966deeeaa23c28f0be640c56545644 Mon Sep 17 00:00:00 2001 From: Yusuke Endoh Date: Thu, 23 May 2019 00:45:30 +0900 Subject: range.c (inspect_range): omit beginless "nil" except the special case `(nil..nil)`. ``` (1..).inspect #=> "1.." (..5).inspect #=> "..5" (nil..nil).inspect #=> "nil..nil" ``` [Bug #15745] --- range.c | 12 +++++++++--- test/ruby/test_range.rb | 4 ++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/range.c b/range.c index 03ca38d611..271c0f2ae9 100644 --- a/range.c +++ b/range.c @@ -1317,10 +1317,16 @@ inspect_range(VALUE range, VALUE dummy, int recur) if (recur) { return rb_str_new2(EXCL(range) ? "(... ... ...)" : "(... .. ...)"); } - str = rb_inspect(RANGE_BEG(range)); - if (!NIL_P(RANGE_END(range))) str2 = rb_inspect(RANGE_END(range)); - str = rb_str_dup(str); + if (!NIL_P(RANGE_BEG(range)) || NIL_P(RANGE_END(range))) { + str = rb_str_dup(rb_inspect(RANGE_BEG(range))); + } + else { + str = rb_str_new(0, 0); + } rb_str_cat(str, "...", EXCL(range) ? 3 : 2); + if (NIL_P(RANGE_BEG(range)) || !NIL_P(RANGE_END(range))) { + str2 = rb_inspect(RANGE_END(range)); + } if (str2 != Qundef) rb_str_append(str, str2); OBJ_INFECT(str, range); diff --git a/test/ruby/test_range.rb b/test/ruby/test_range.rb index 5d21d30257..14fd136aa6 100644 --- a/test/ruby/test_range.rb +++ b/test/ruby/test_range.rb @@ -489,6 +489,10 @@ class TestRange < Test::Unit::TestCase assert_equal("0...1", (0...1).inspect) assert_equal("0..", (0..nil).inspect) assert_equal("0...", (0...nil).inspect) + assert_equal("..1", (nil..1).inspect) + assert_equal("...1", (nil...1).inspect) + assert_equal("nil..nil", (nil..nil).inspect) + assert_equal("nil...nil", (nil...nil).inspect) bug11767 = '[ruby-core:71811] [Bug #11767]' assert_predicate(("0".taint.."1").inspect, :tainted?, bug11767) -- cgit v1.2.3