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

ruby-changes:74214

From: nagachika <ko1@a...>
Date: Sun, 23 Oct 2022 19:41:24 +0900 (JST)
Subject: [ruby-changes:74214] 941c888b04 (ruby_3_1): merge revision(s) bbe5ec78463f8d6ef2e1a3571f17357a3d9ec8e4: [Backport #18994]

https://git.ruby-lang.org/ruby.git/commit/?id=941c888b04

From 941c888b041decb45034572d766120f9be34986e Mon Sep 17 00:00:00 2001
From: nagachika <nagachika@r...>
Date: Sun, 23 Oct 2022 19:11:45 +0900
Subject: merge revision(s) bbe5ec78463f8d6ef2e1a3571f17357a3d9ec8e4: [Backport
 #18994]

	rb_int_range_last: properly handle non-exclusive range

	[Bug #18994]
	---
	 range.c                           | 8 ++++----
	 spec/ruby/core/range/last_spec.rb | 6 ++++++
	 2 files changed, 10 insertions(+), 4 deletions(-)
---
 range.c                           | 8 ++++----
 spec/ruby/core/range/last_spec.rb | 6 ++++++
 version.h                         | 2 +-
 3 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/range.c b/range.c
index 6eb7842313..faf6ab997b 100644
--- a/range.c
+++ b/range.c
@@ -1107,10 +1107,6 @@ rb_int_range_last(int argc, VALUE *argv, VALUE range) https://github.com/ruby/ruby/blob/trunk/range.c#L1107
     x = EXCL(range);
 
     len_1 = rb_int_minus(e, b);
-    if (FIXNUM_ZERO_P(len_1) || rb_num_negative_p(len_1)) {
-        return rb_ary_new_capa(0);
-    }
-
     if (x) {
         e = rb_int_minus(e, ONE);
         len = len_1;
@@ -1119,6 +1115,10 @@ rb_int_range_last(int argc, VALUE *argv, VALUE range) https://github.com/ruby/ruby/blob/trunk/range.c#L1115
         len = rb_int_plus(len_1, ONE);
     }
 
+    if (FIXNUM_ZERO_P(len) || rb_num_negative_p(len)) {
+        return rb_ary_new_capa(0);
+    }
+
     rb_scan_args(argc, argv, "1", &nv);
     n = NUM2LONG(nv);
     if (n < 0) {
diff --git a/spec/ruby/core/range/last_spec.rb b/spec/ruby/core/range/last_spec.rb
index d7ef776b42..6698686dd5 100644
--- a/spec/ruby/core/range/last_spec.rb
+++ b/spec/ruby/core/range/last_spec.rb
@@ -8,6 +8,12 @@ describe "Range#last" do https://github.com/ruby/ruby/blob/trunk/spec/ruby/core/range/last_spec.rb#L8
     (1..5).last(3).should == [3, 4, 5]
   end
 
+  ruby_bug '#18994', '2.7'...'3.2' do
+    it "returns the specified number if elements for single element inclusive range" do
+      (1..1).last(1).should == [1]
+    end
+  end
+
   it "returns an empty array for an empty Range" do
     (0...0).last(2).should == []
   end
diff --git a/version.h b/version.h
index b35f82ffb0..dc042bbf9d 100644
--- a/version.h
+++ b/version.h
@@ -11,7 +11,7 @@ https://github.com/ruby/ruby/blob/trunk/version.h#L11
 # define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
 #define RUBY_VERSION_TEENY 3
 #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
-#define RUBY_PATCHLEVEL 168
+#define RUBY_PATCHLEVEL 169
 
 #define RUBY_RELEASE_YEAR 2022
 #define RUBY_RELEASE_MONTH 10
-- 
cgit v1.2.3


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

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