Age | Commit message (Collapse) | Author |
|
|
|
* Stop making a redundant hash copy in Hash#dup
It was making a copy of the hash without rehashing, then created an
extra copy of the hash to do the rehashing. Since rehashing creates
a new copy already, this change just uses that rehashing to make
the copy.
[Bug #16121]
* Remove redundant Check_Type after to_hash
* Fix freeing and clearing destination hash in Hash#initialize_copy
The code was assuming the state of the destination hash based on the
source hash for clearing any existing table on it. If these don't match,
then that can cause the old table to be leaked. This can be seen by
compiling hash.c with `#define HASH_DEBUG 1` and running the following
script, which will crash from a debug assertion.
```ruby
h = 9.times.map { |i| [i, i] }.to_h
h.send(:initialize_copy, {})
```
* Remove dead code paths in rb_hash_initialize_copy
Given that `RHASH_ST_TABLE_P(h)` is defined as `(!RHASH_AR_TABLE_P(h))`
it shouldn't be possible for a hash to be neither of these, so there
is no need for the removed `else if` blocks.
* Share implementation between Hash#replace and Hash#initialize_copy
This also fixes key rehashing for small hashes backed by an array
table for Hash#replace. This used to be done consistently in ruby
2.5.x, but stopped being done for small arrays in ruby 2.6.x.
This also bring optimization improvements that were done for
Hash#initialize_copy to Hash#replace.
* Add the Hash#dup benchmark
|
|
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/2582
|
|
Tabs were expanded because previously the file did not have any tab indentation.
Please update your editor config, and use misc/expand_tabs.rb in the pre-commit hook.
|
|
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/2304
|
|
These are found by Coverity.
Notes:
Merged: https://github.com/ruby/ruby/pull/2304
|
|
As the result order of `DidYouMean::SpellChecker#correct` is
undefined, keep the order of the original candidates.
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/2581
|
|
|
|
|
|
See Ruby issue 16263
Notes:
Merged: https://github.com/ruby/ruby/pull/2577
|
|
|
|
|
|
MonitorMixin::ConditionVariable#wait can be interrupted just after
Monitor#exit_for_cond. So implementation in C.
|
|
Delegate MonitorMixin#synchronize body to Monitor#synchronize.
It makes guarantee interrupt safe (because Monitor#synchronize is
written in C). I thought Ruby implementation is also safe, but I
got stuck failure <http://ci.rvm.jp/results/trunk_test@P895/2327639>
so that I introduce this fix to guarantee interrupt safe.
|
|
Recent monitor.rb has performance problem because of interrupt
handlers. 'Monitor#synchronize' is frequently used primitive
so the performance of this method is important.
This patch rewrite 'monitor.rb' with 'monitor.so' (C-extension)
and make it faster. See [Feature #16255] for details.
Monitor class objects are normal object which include MonitorMixin.
This patch introduce a Monitor class which is implemented on C
and MonitorMixin uses Monitor object as re-entrant (recursive)
Mutex. This technique improve performance because we don't need
to care atomicity and we don't need accesses to instance variables
any more on Monitor class.
Notes:
Merged-By: ko1 <[email protected]>
|
|
|
|
|
|
|
|
MSYS source code comes from both gcc.gnu.org & Mingw-w64. Updates to the Mingw-w64 source broke the MinGW build step.
Fixes the issue until Mingw-w64 updates their source, then it should be reverted, see comments in code.
|
|
|
|
|
|
And separate ruby script and executed example.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Instead of building messages separately.
|
|
|
|
Simple comparison between proc/ifunc/method invocations:
```
proc 15.209M (± 1.6%) i/s - 76.138M in 5.007413s
ifunc 15.195M (± 1.7%) i/s - 76.257M in 5.020106s
method 9.836M (± 1.2%) i/s - 49.272M in 5.009984s
```
As `proc` and `ifunc` have no significant difference, chosen the
latter for arity check.
|
|
As ObjectSpace::WeakMap allows FLONUM as a key, needs the special
deal for its hash. [Feature #16035]
|
|
```
require 'optparse'
OptionParser.new do |opts|
opts.on("-f", "--foo", "foo") {|v| }
opts.on("-b", "--bar", "bar") {|v| }
opts.on("-c", "--baz", "baz") {|v| }
end.parse!
```
```
$ ruby test.rb --baa
Traceback (most recent call last):
test.rb:7:in `<main>': invalid option: --baa (OptionParser::InvalidOption)
Did you mean? baz
bar
```
Notes:
Merged: https://github.com/ruby/ruby/pull/2561
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/2571
|
|
This constant isn't used, so lets remove it.
|
|
The global can go bad if the compactor runs, so we need to look up the
constant instead of caching it in a global.
|
|
Suggestion from Laurence Parry.
Fixes [Bug #16030]
Notes:
Merged: https://github.com/ruby/ruby/pull/2572
|
|
|
|
|
|
|
|
The function getwch() returns some key sequences which start from 0 or 0xE0
with a following key code. Alt+` that is on/off key for input methods gives 0
and 41 so Reline was always ignoring 0 and following keys but numeric keypad
keys give 0 and following actual keys. This commit changes the behavior to be
ignoring only the 0 and 41 sequence.
|
|
Fixes [Bug #10314]
Notes:
Merged: https://github.com/ruby/ruby/pull/2569
|
|
|
|
|
|
|
|
File.extname now returns a dot string at a name ending with a dot.
[Bug #15267]
Notes:
Merged: https://github.com/ruby/ruby/pull/2565
|
|
|