summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYusuke Endoh <mame@ruby-lang.org>2019-05-23 00:45:30 +0900
committerYusuke Endoh <mame@ruby-lang.org>2019-05-23 00:48:32 +0900
commit9d39eb6b40966deeeaa23c28f0be640c56545644 (patch)
tree4aebc6cbc8dc22a196656c1cffb840c6f15c032d
parentd9b338a53f520b2dbb05555f18b8de8072300f40 (diff)
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]
-rw-r--r--range.c12
-rw-r--r--test/ruby/test_range.rb4
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)