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

ruby-changes:24342

From: nobu <ko1@a...>
Date: Sat, 14 Jul 2012 18:19:08 +0900 (JST)
Subject: [ruby-changes:24342] nobu:r36393 (trunk): array.c: fill with nil

nobu	2012-07-14 18:18:51 +0900 (Sat, 14 Jul 2012)

  New Revision: 36393

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=36393

  Log:
    array.c: fill with nil
    
    * array.c (rb_get_values_at): fill with nil out of range.
      [ruby-core:43678] [Bug #6203]

  Modified files:
    trunk/ChangeLog
    trunk/array.c
    trunk/test/ruby/test_array.rb

Index: array.c
===================================================================
--- array.c	(revision 36392)
+++ array.c	(revision 36393)
@@ -2362,15 +2362,13 @@
 	    continue;
 	}
 	/* check if idx is Range */
-	switch (rb_range_beg_len(argv[i], &beg, &len, olen, 0)) {
-	  case Qfalse:
-	    break;
-	  case Qnil:
-	    continue;
-	  default:
-	    for (j=0; j<len; j++) {
-		rb_ary_push(result, (*func)(obj, j+beg));
+	if (rb_range_beg_len(argv[i], &beg, &len, olen, 1)) {
+	    long end = olen < beg+len ? olen : beg+len;
+	    for (j = beg; j < end; j++) {
+		rb_ary_push(result, (*func)(obj, j));
 	    }
+	    if (beg + len > j)
+		rb_ary_resize(result, RARRAY_LEN(result) + (beg + len) - j);
 	    continue;
 	}
 	rb_ary_push(result, (*func)(obj, NUM2LONG(argv[i])));
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 36392)
+++ ChangeLog	(revision 36393)
@@ -1,3 +1,8 @@
+Sat Jul 14 18:18:48 2012  Nobuyoshi Nakada  <nobu@r...>
+
+	* array.c (rb_get_values_at): fill with nil out of range.
+	  [ruby-core:43678] [Bug #6203]
+
 Sat Jul 14 17:17:55 2012  Ayumu AIZAWA  <ayumu.aizawa@g...>
 
 	* cont.c (cont_restore_0): improve docs. [Bug #6706][ruby-core:46243]
Index: test/ruby/test_array.rb
===================================================================
--- test/ruby/test_array.rb	(revision 36392)
+++ test/ruby/test_array.rb	(revision 36393)
@@ -1831,7 +1831,9 @@
   def test_values_at2
     a = [0, 1, 2, 3, 4, 5]
     assert_equal([1, 2, 3], a.values_at(1..3))
-    assert_equal([], a.values_at(7..8))
+    assert_equal([nil, nil], a.values_at(7..8))
+    bug6203 = '[ruby-core:43678]'
+    assert_equal([4, 5, nil, nil], a.values_at(4..7), bug6203)
     assert_equal([nil], a.values_at(2**31-1))
   end
 

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

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