Age | Commit message (Collapse) | Author |
|
Instance methods considered (most unchanged):
- any
- dig
- \<=
- \<
- \>=
- \>
- to_proc
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
Instance methods considered (maybe not all changed):
invert
merge!
merge
assoc
rassoc
flatten
compact
compact!
compare_by_identity
compare_by_identity?
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
Instance methods considered (maybe not all changed):
to_a
inspect
to_hash
to_h
keys
values
include?
has_value?
==
eql?
hash
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
Instance methods considered (some maybe not changed):
clear
[]=
replace
length
empty?
each_value
each_key
each_pair
transform_keys
transform_keys!
transform_values
transform_values!
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
Methods reviewed (a few not modified):
key
delete
shift
delete_if
reject!
reject
slice
except
values_at
fetch_values
select
select!
keep_if
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
Methods:
::new
::[]
::try_convert
#rehash
#[]
#fetch
#default
#default=
#default_proc
#default_proc=
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
Further compliance with https://github.com/ruby/ruby/blob/master/doc/method_documentation.rdoc#details-and-examples-
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
* Remove nil-return examples from hash.c
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
Removes references to *-convertible thingies.
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3373
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3373
|
|
It seems almost no internal codes use RHASH_TBL any longer. Why not
just eliminate it entirely, so that the macro can be purely ext-only.
Notes:
Merged: https://github.com/ruby/ruby/pull/3426
|
|
* Fix links to Dig Methods document
* Fix links to Dig Methods document
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
Adds a full discussion of #dig, along with links from Array, Hash, Struct, and OpenStruct.
CSV::Table and CSV::Row are over in ruby/csv. I'll get to them soon.
The art to the thing is to figure out how much (or how little) to say at each #dig.
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3370
|
|
I'm not necessarily against every goto in general, but jumping into a
branch is definitely a bad idea. Better refactor.
Notes:
Merged: https://github.com/ruby/ruby/pull/3247
|
|
I'm not necessarily against every goto in general, but jumping into a
branch is definitely a bad idea. Better refactor.
Notes:
Merged: https://github.com/ruby/ruby/pull/3247
|
|
|
|
Fixes [Bug #16173]
Co-Authored-By: Burdette Lamar <burdettelamar@yahoo.com>
Co-Authored-By: Jeremy Evans <code@jeremyevans.net>
Notes:
Merged: https://github.com/ruby/ruby/pull/3206
|
|
* Enhanced Rdoc for Array#fetch and Array#index
* Couple of tweaks (per review) in Rdoc for Hash
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
Methods:
#<=
#<
#>=
#>
#to_proc
Also, a small amount of housekeeping: Adding backslash to some class name to prevent linking.
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
* Enhanced Rdoc for Hash
* Fix typo in Hash Rdoc
* Enhanced Rdoc for Hash
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
* Enhanced Rdoc for Hash
* Enhanced Rdoc for Hash
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3168
|
|
* Enhanced Rdoc for Hash
* Respond to review
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
* Enhanced Rdoc for Hash
* Respond to review
* Nudge CI testing.
Respond to review
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
Notes:
Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3134
|
|
Notes:
Merged-By: ioquatix <samuel@codeotaku.com>
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3130
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3130
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3130
|
|
Notes:
Merged-By: ioquatix <samuel@codeotaku.com>
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3125
|
|
* Per @nobu review
* [CI skip] Enhance rdoc intro for Hash
* Tweak call-seq for Hash.new
* Tweak call-seq for Hash.new
* Minor corrections
* Respond to review
* Respond to review
* Respond to review
* Respond to review
* Fix chain exampmle
* Response to review
Notes:
Merged-By: drbrain <drbrain@segment7.net>
|
|
Fixes [Bug #16850]
|
|
To fix build failures.
Notes:
Merged: https://github.com/ruby/ruby/pull/3079
|
|
This shall fix compile errors.
Notes:
Merged: https://github.com/ruby/ruby/pull/3079
|
|
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3026
Merged-By: ioquatix <samuel@codeotaku.com>
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3041
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3041
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3041
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3040
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3002
Merged-By: ioquatix <samuel@codeotaku.com>
|
|
Split ruby.h
Notes:
Merged-By: shyouhei <shyouhei@ruby-lang.org>
|
|
About the defalut values.
Notes:
Merged: https://github.com/ruby/ruby/pull/2977
Merged-By: nobu <nobu@ruby-lang.org>
|
|
Previously, passing a keyword splat to a method always allocated
a hash on the caller side, and accepting arbitrary keywords in
a method allocated a separate hash on the callee side. Passing
explicit keywords to a method that accepted a keyword splat
did not allocate a hash on the caller side, but resulted in two
hashes allocated on the callee side.
This commit makes passing a single keyword splat to a method not
allocate a hash on the caller side. Passing multiple keyword
splats or a mix of explicit keywords and a keyword splat still
generates a hash on the caller side. On the callee side,
if arbitrary keywords are not accepted, it does not allocate a
hash. If arbitrary keywords are accepted, it will allocate a
hash, but this commit uses a callinfo flag to indicate whether
the caller already allocated a hash, and if so, the callee can
use the passed hash without duplicating it. So this commit
should make it so that a maximum of a single hash is allocated
during method calls.
To set the callinfo flag appropriately, method call argument
compilation checks if only a single keyword splat is given.
If only one keyword splat is given, the VM_CALL_KW_SPLAT_MUT
callinfo flag is not set, since in that case the keyword
splat is passed directly and not mutable. If more than one
splat is used, a new hash needs to be generated on the caller
side, and in that case the callinfo flag is set, indicating
the keyword splat is mutable by the callee.
In compile_hash, used for both hash and keyword argument
compilation, if compiling keyword arguments and only a
single keyword splat is used, pass the argument directly.
On the caller side, in vm_args.c, the callinfo flag needs to
be recognized and handled. Because the keyword splat
argument may not be a hash, it needs to be converted to a
hash first if not. Then, unless the callinfo flag is set,
the hash needs to be duplicated. The temporary copy of the
callinfo flag, kw_flag, is updated if a hash was duplicated,
to prevent the need to duplicate it again. If we are
converting to a hash or duplicating a hash, we need to update
the argument array, which can including duplicating the
positional splat array if one was passed. CALLER_SETUP_ARG
and a couple other places needs to be modified to handle
similar issues for other types of calls.
This includes fairly comprehensive tests for different ways
keywords are handled internally, checking that you get equal
results but that keyword splats on the caller side result in
distinct objects for keyword rest parameters.
Included are benchmarks for keyword argument calls.
Brief results when compiled without optimization:
def kw(a: 1) a end
def kws(**kw) kw end
h = {a: 1}
kw(a: 1) # about same
kw(**h) # 2.37x faster
kws(a: 1) # 1.30x faster
kws(**h) # 2.19x faster
kw(a: 1, **h) # 1.03x slower
kw(**h, **h) # about same
kws(a: 1, **h) # 1.16x faster
kws(**h, **h) # 1.14x faster
Notes:
Merged: https://github.com/ruby/ruby/pull/2945
|
|
As a semantics, Hash#each yields a 2-element array (pairs of keys and
values). So, `{ a: 1 }.each(&->(k, v) { })` should raise an exception
due to lambda's arity check.
However, the optimization that avoids Array allocation by using
rb_yield_values for blocks whose arity is more than 1 (introduced at
b9d29603375d17c3d1d609d9662f50beaec61fa1 and some commits), seemed to
overlook the lambda case, and wrongly allowed the code above to work.
This change experimentally attempts to make it strict; now the code
above raises an ArgumentError. This is an incompatible change; if the
compatibility issue is bigger than our expectation, it may be reverted
(until Ruby 3.0 release).
[Bug #12706]
|