| Age | Commit message (Collapse) | Author |
|
Implement Array#rfind, which is the same as find except from the
other side of the Array. Also implemented Array#find (as opposed to
the generic one on Enumerable because it is significantly faster
and to keep the implementations together.
[Feature #21678]
|
|
More comprehensive pack/unpack tests are in test_pack.rb.
|
|
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/12690
|
|
* Add opt_duparray_send insn to skip the allocation on `#include?`
If the method isn't going to modify the array we don't need to copy it.
This avoids the allocation / array copy for things like `[:a, :b].include?(x)`.
This adds a BOP for include? and tracks redefinition for it on Array.
Co-authored-by: Andrew Novoselac <andrew.novoselac@shopify.com>
* YJIT: Implement opt_duparray_send include_p
Co-authored-by: Andrew Novoselac <andrew.novoselac@shopify.com>
* Update opt_newarray_send to support simple forms of include?(arg)
Similar to opt_duparray_send but for non-static arrays.
* YJIT: Implement opt_newarray_send include_p
---------
Co-authored-by: Andrew Novoselac <andrew.novoselac@shopify.com>
Notes:
Merged-By: maximecb <maximecb@ruby-lang.org>
|
|
|
|
Using gc_impl.h inside of gc/gc.h will cause gc/gc.h to use the functions
in gc/default.c when builing with shared GC support because gc/gc.h is
included into gc.c before the rb_gc_impl functions are overridden by the
preprocessor.
Notes:
Merged: https://github.com/ruby/ruby/pull/11423
|
|
Following [Feature #20589] it can happen that we change the
capacity of a frozen array, so these assertions no longer make
sense.
Normally we don't hit them because `Array#freeze` shrinks the
array, but if somehow the Array was frozen using `Object#freeze`
then we may shrink it after it was frozen.
|
|
It doesn't look like there was a test added for this bug, so I'm adding
it.
Code is from here:
https://web.archive.org/web/20160908192307/http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/24445
|
|
In cases where `rb_ary_sort_bang` is called with a block and
tmp is an embedded array, we need to account for the block
potentially impacting the capacity of ary.
ex:
```
var_0 = (1..70).to_a
var_0.sort! do |var_0_block_129, var_1_block_129|
var_0.pop
var_1_block_129 <=> var_0_block_129
end.shift(3)
```
The above example can put the array into a corrupted state
resulting in a heap buffer overflow and possible segfault:
```
ERROR: AddressSanitizer: heap-buffer-overflow on address [...]
WRITE of size 560 at 0x60b0000034f0 thread T0 [...]
```
This commit adds a conditional to determine when the capacity
of ary has been modified by the provided block. If this is
the case, ensure that the capacity of ary is adjusted to
handle at minimum the len of tmp.
|
|
callcc's implementation is fundamentally incompatible with ASAN. Since
callcc is deprecated and almost never used, it's probably OK to disable
callcc when ruby is compiled with ASAN.
[Bug #20273]
|
|
|
|
ary could change embeddedness due to compaction, so we should only get
the pointer after allocations.
The included test was crashing with:
TestArray#test_slice_gc_compact_stress
ruby/lib/pp.rb:192: [BUG] Segmentation fault at 0x0000000000000038
|
|
|
|
The ary_make_shared call may allocate, which can trigger a GC
compaction. This can cause the array to be embedded because it has a
length of 0.
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/8314
|
|
If string literals are long and they become shared, we need to make them
independent before we can write to them. [Bug #19116]
Notes:
Merged: https://github.com/ruby/ruby/pull/6704
|
|
|
|
* Fix Array#[] with ArithmeticSequence with negative steps
Previously, Array#[] when called with an ArithmeticSequence
with a negative step did not handle all cases correctly,
especially cases involving infinite ranges, inverted ranges,
and/or exclusive ends.
Fixes [Bug #18247]
* Add Array#slice tests for ArithmeticSequence with negative step to test_array
Add tests of rb_arithmetic_sequence_beg_len_step C-API function.
* Fix ext/-test-/arith_seq/beg_len_step/depend
* Rename local variables
* Fix a variable name
Co-authored-by: Kenta Murata <3959+mrkn@users.noreply.github.com>
Notes:
Merged-By: mrkn <mrkn@ruby-lang.org>
|
|
Previously it made object references without using write barriers,
creating GC inconsistencies.
See: http://ci.rvm.jp/results/trunk-gc-asserts@phosphorus-docker/3925529
Notes:
Merged: https://github.com/ruby/ruby/pull/5851
|
|
|
|
|
|
|
|
This prevents early collection of the array. The GC doesn't see the
array on the stack when Ruby is compiled with optimizations enabled
[ruby-core:105099] [Bug #18140]
|
|
|
|
|
|
The order of arguments to callback of qsort is not defined.
That means `a` may not be 3 at all.
|
|
If freezing an array inside sort!, previously the array could be
modified after the freeze. This checks whether the receiver is
frozen after every yield and potential call to #> or #<,
preventing modifications if the receiver is frozen inside the
block or by the #> or #< call.
Fixes [Bug #17739]
Notes:
Merged: https://github.com/ruby/ruby/pull/4335
Merged-By: jeremyevans <code@jeremyevans.net>
|
|
|
|
[Bug #17814]
Notes:
Merged-By: mame <mame@ruby-lang.org>
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/1972
|
|
* Ensure the receiver is modifiable before shinking [Bug #17736]
* Assert the receivers are not modified
Notes:
Merged: https://github.com/ruby/ruby/pull/4296
Merged-By: nobu <nobu@ruby-lang.org>
|
|
Also document that both :deprecated and :experimental are supported
:category option values.
The locations where warnings were marked as deprecation warnings
was previously reviewed by shyouhei.
Comment a couple locations where deprecation warnings should probably
be used but are not currently used because deprecation warning
enablement has not occurred at the time they are called
(RUBY_FREE_MIN, RUBY_HEAP_MIN_SLOTS, -K).
Add assert_deprecated_warn to test assertions. Use this to simplify
some tests, and fix failing tests after marking some warnings with
deprecated category.
Notes:
Merged: https://github.com/ruby/ruby/pull/3917
|
|
Instead of suppressing all warnings wholly in each test scripts by
setting `$VERBOSE` to `nil` in `setup` methods.
Notes:
Merged: https://github.com/ruby/ruby/pull/3925
Merged-By: nobu <nobu@ruby-lang.org>
|
|
This changes the following methods to return Array instances instead
of subclass instances:
* Array#drop
* Array#drop_while
* Array#flatten
* Array#slice!
* Array#slice/#[]
* Array#take
* Array#take_while
* Array#uniq
* Array#*
Fixes [Bug #6087]
Notes:
Merged: https://github.com/ruby/ruby/pull/3690
Merged-By: jeremyevans <code@jeremyevans.net>
|
|
* Support ArithmeticSequence in Array#slice
* Extract rb_range_component_beg_len
* Use rb_range_values to check Range object
* Fix ary_make_partial_step
* Fix for negative step cases
* range.c: Describe the role of err argument in rb_range_component_beg_len
* Raise a RangeError when an arithmetic sequence refers the outside of an array
[Feature #16812]
Notes:
Merged-By: mrkn <mrkn@ruby-lang.org>
|
|
[Bug #17271]
|
|
|
|
Matz want to try to freeze all Range objects.
[Feature #15504]
Notes:
Merged: https://github.com/ruby/ruby/pull/3583
|
|
|
|
The benchmark result is below:
| |compare-ruby|built-ruby|
|:---------------|-----------:|---------:|
|ary2.min | 39.105M| 39.442M|
| | -| 1.01x|
|ary10.min | 23.995M| 30.762M|
| | -| 1.28x|
|ary100.min | 6.249M| 10.783M|
| | -| 1.73x|
|ary500.min | 1.408M| 2.714M|
| | -| 1.93x|
|ary1000.min | 828.397k| 1.465M|
| | -| 1.77x|
|ary2000.min | 332.256k| 570.504k|
| | -| 1.72x|
|ary3000.min | 338.079k| 573.868k|
| | -| 1.70x|
|ary5000.min | 168.217k| 286.114k|
| | -| 1.70x|
|ary10000.min | 85.512k| 143.551k|
| | -| 1.68x|
|ary20000.min | 43.264k| 71.935k|
| | -| 1.66x|
|ary50000.min | 17.317k| 29.107k|
| | -| 1.68x|
|ary100000.min | 9.072k| 14.540k|
| | -| 1.60x|
|ary1000000.min | 872.930| 1.436k|
| | -| 1.64x|
compare-ruby is 9f4b7fc82e.
Notes:
Merged-By: mrkn <mrkn@ruby-lang.org>
|
|
The benchmark result is below:
| |compare-ruby|built-ruby|
|:---------------|-----------:|---------:|
|ary2.max | 38.837M| 40.830M|
| | -| 1.05x|
|ary10.max | 23.035M| 32.626M|
| | -| 1.42x|
|ary100.max | 5.490M| 11.020M|
| | -| 2.01x|
|ary500.max | 1.324M| 2.679M|
| | -| 2.02x|
|ary1000.max | 699.167k| 1.403M|
| | -| 2.01x|
|ary2000.max | 284.321k| 570.446k|
| | -| 2.01x|
|ary3000.max | 282.613k| 571.683k|
| | -| 2.02x|
|ary5000.max | 145.120k| 285.546k|
| | -| 1.97x|
|ary10000.max | 72.102k| 142.831k|
| | -| 1.98x|
|ary20000.max | 36.065k| 72.077k|
| | -| 2.00x|
|ary50000.max | 14.343k| 29.139k|
| | -| 2.03x|
|ary100000.max | 7.586k| 14.472k|
| | -| 1.91x|
|ary1000000.max | 726.915| 1.495k|
| | -| 2.06x|
Notes:
Merged-By: mrkn <mrkn@ruby-lang.org>
|
|
test-all supports multiple run with option --repeat-count=2
but test_equal_resize doesn't support it.
|
|
https://hackerone.com/reports/244787
|
|
https://hackerone.com/reports/244786
|
|
This removes the related tests, and puts the related specs behind
version guards. This affects all code in lib, including some
libraries that may want to support older versions of Ruby.
Notes:
Merged: https://github.com/ruby/ruby/pull/2476
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/2533
|
|
`[{}, {}, {}, ..., {}, *{}]` is wrongly created.
A big array literal is created and concatenated for every 256 elements.
The newarraykwsplat must be emitted only at the last chunk.
|
|
Previously, Array#uniq would return subclass instance if the
length of the array were 2 or greater, and would return Array
instance if the length of the array were 0 or 1.
Fixes [Bug #7768]
|
|
Closes: https://github.com/ruby/ruby/pull/1790
|