summaryrefslogtreecommitdiffhomepage
path: root/mrblib/array.rb
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-03-02 15:46:50 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2019-03-02 15:46:50 +0900
commitaf51119d3a4d56cead0e6b4da69efc78667314d2 (patch)
tree5d22bcbb54811340cc52fc40ad832fb808329dfe /mrblib/array.rb
parent73091ab20288d196e774cefd234660e5c6fefc14 (diff)
downloadmruby-af51119d3a4d56cead0e6b4da69efc78667314d2.tar.gz
mruby-af51119d3a4d56cead0e6b4da69efc78667314d2.zip
Raise error on failed comparison in `sort`; ref #4307
Diffstat (limited to 'mrblib/array.rb')
-rw-r--r--mrblib/array.rb12
1 files changed, 10 insertions, 2 deletions
diff --git a/mrblib/array.rb b/mrblib/array.rb
index a677b2a1f..d598efc77 100644
--- a/mrblib/array.rb
+++ b/mrblib/array.rb
@@ -213,7 +213,11 @@ class Array
if left + 1 == right
lval = self[left]
rval = self[right]
- if (block&.call(lval, rval) || (lval <=> rval)) > 0
+ cmp = if block then block.call(lval,rval) else lval <=> rval end
+ if cmp.nil?
+ raise ArgumentError, "comparison of #{lval.inspect} and #{rval.inspect} failed"
+ end
+ if cmp > 0
self[left] = rval
self[right] = lval
end
@@ -245,7 +249,11 @@ class Array
else
lval = lary[lidx]
rval = self[ridx]
- if (block&.call(lval, rval) || (lval <=> rval)) <= 0
+ cmp = if block then block.call(lval,rval) else lval <=> rval end
+ if cmp.nil?
+ raise ArgumentError, "comparison of #{lval.inspect} and #{rval.inspect} failed"
+ end
+ if cmp <= 0
self[i] = lval
lidx += 1
else