diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-03-02 15:46:50 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-03-02 15:46:50 +0900 |
| commit | af51119d3a4d56cead0e6b4da69efc78667314d2 (patch) | |
| tree | 5d22bcbb54811340cc52fc40ad832fb808329dfe /mrblib/array.rb | |
| parent | 73091ab20288d196e774cefd234660e5c6fefc14 (diff) | |
| download | mruby-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.rb | 12 |
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 |
