[前][次][番号順一覧][スレッド一覧]

ruby-changes:55783

From: Yusuke <ko1@a...>
Date: Thu, 23 May 2019 00:48:50 +0900 (JST)
Subject: [ruby-changes:55783] Yusuke Endoh: 9d39eb6b40 (trunk): range.c (inspect_range): omit beginless "nil"

https://git.ruby-lang.org/ruby.git/commit/?id=9d39eb6b40

From 9d39eb6b40966deeeaa23c28f0be640c56545644 Mon Sep 17 00:00:00 2001
From: Yusuke Endoh <mame@r...>
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]

diff --git a/range.c b/range.c
index 03ca38d..271c0f2 100644
--- a/range.c
+++ b/range.c
@@ -1317,10 +1317,16 @@ inspect_range(VALUE range, VALUE dummy, int recur) https://github.com/ruby/ruby/blob/trunk/range.c#L1317
     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 5d21d30..14fd136 100644
--- a/test/ruby/test_range.rb
+++ b/test/ruby/test_range.rb
@@ -489,6 +489,10 @@ class TestRange < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_range.rb#L489
     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 v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]