summaryrefslogtreecommitdiff
path: root/hash.c
AgeCommit message (Collapse)Author
2020-08-27Comply with guide for method doc: hash.c (#3466)Burdette Lamar
Instance methods considered (most unchanged): - any - dig - \<= - \< - \>= - \> - to_proc Notes: Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
2020-08-27Comply with guide for method doc: hash.c (#3465)Burdette Lamar
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>
2020-08-27Comply with guide for method doc: hash.c (#3464)Burdette Lamar
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>
2020-08-27Comply with guide for method doc: hash.c (#3459)Burdette Lamar
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>
2020-08-25Comply with guide for method doc: hash.c (#3454)Burdette Lamar
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>
2020-08-25Comply with guide for method doc: hash.c (#3451)Burdette Lamar
Methods: ::new ::[] ::try_convert #rehash #[] #fetch #default #default= #default_proc #default_proc= Notes: Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
2020-08-23Remove checks for self returned in array.c and hash.c examples (#3446)Burdette Lamar
Further compliance with https://github.com/ruby/ruby/blob/master/doc/method_documentation.rdoc#details-and-examples- Notes: Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
2020-08-21Remove nil-return examples from hash.c (#3438)Burdette Lamar
* Remove nil-return examples from hash.c Notes: Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
2020-08-20Partial compliance with doc/method_documentation.rdoc in hash.c (#3432)Burdette Lamar
Removes references to *-convertible thingies. Notes: Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
2020-08-19[DOC] Improve Hash's doc for missing keysMarc-Andre Lafortune
Notes: Merged: https://github.com/ruby/ruby/pull/3373
2020-08-19[DOC] Improve and simplify key egality documentation for HashMarc-Andre Lafortune
Notes: Merged: https://github.com/ruby/ruby/pull/3373
2020-08-19RHASH_TBL: is now ext-only卜部昌平
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
2020-08-14Fix links to Dig Methods document (#3421)Burdette Lamar
* Fix links to Dig Methods document * Fix links to Dig Methods document Notes: Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
2020-08-13Adding doc/dig_methods.rdoc and links to it (#3416)Burdette Lamar
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>
2020-07-29Fix arity of Hash#to_proc [Bug #12671]Benoit Daloze
Notes: Merged: https://github.com/ruby/ruby/pull/3370
2020-06-29rb_hash_transient_heap_evacuate: do not goto into a branch卜部昌平
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
2020-06-29any_hash: do not goto into a branch卜部昌平
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
2020-06-18Add Hash#except ENV#except [Feature #15822]Timo Schilling
2020-06-10ENV.delete should return the result of block on non-existing keyNobuyoshi Nakada
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
2020-06-10Enhanced Rdoc for Array#fetch and Array#index (#3202)Burdette Lamar
* Enhanced Rdoc for Array#fetch and Array#index * Couple of tweaks (per review) in Rdoc for Hash Notes: Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
2020-06-07Enhanced Rdoc for Hash (#3187)Burdette Lamar
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>
2020-06-03Enhanced Rdoc for Hash (#3178)Burdette Lamar
* Enhanced Rdoc for Hash * Fix typo in Hash Rdoc * Enhanced Rdoc for Hash Notes: Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
2020-06-02[ci skip] Enhanced Rdoc for Hash (#3162)Burdette Lamar
* Enhanced Rdoc for Hash * Enhanced Rdoc for Hash Notes: Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
2020-06-01fix typo in Hash#delete docsS-H-GAMELINKS
Notes: Merged: https://github.com/ruby/ruby/pull/3168
2020-05-29[ci skip] Enhanced Rdoc for Hash (#3155)Burdette Lamar
* Enhanced Rdoc for Hash * Respond to review Notes: Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
2020-05-28Enhanced Rdoc for Hash (#3151)Burdette Lamar
Notes: Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
2020-05-27[ci skip] Enhanced Rdoc for Hash (#3143)Burdette Lamar
* Enhanced Rdoc for Hash * Respond to review * Nudge CI testing. Respond to review Notes: Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
2020-05-23Enhanced Rdoc for Hash (#3139)Burdette Lamar
Notes: Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
2020-05-23Enhanced Rdoc for HashBurdetteLamar
Notes: Merged: https://github.com/ruby/ruby/pull/3134
2020-05-22Enhanced rdoc for Hash (#3129)Burdette Lamar
Notes: Merged-By: ioquatix <samuel@codeotaku.com>
2020-05-22add static modifier for rb_hash_keep_if funcS-H-GAMELINKS
Notes: Merged: https://github.com/ruby/ruby/pull/3130
2020-05-22add static modifier for rb_hash_select_bang funcS-H-GAMELINKS
Notes: Merged: https://github.com/ruby/ruby/pull/3130
2020-05-22add static modifier for rb_hash_select funcS-H-GAMELINKS
Notes: Merged: https://github.com/ruby/ruby/pull/3130
2020-05-21[ci skip] Enhanced rdoc for Hash (#3121)Burdette Lamar
Notes: Merged-By: ioquatix <samuel@codeotaku.com>
2020-05-20add static modifer for rb_hash_fetch_values funcS-H-GAMELINKS
Notes: Merged: https://github.com/ruby/ruby/pull/3125
2020-05-15 [CI skip] Enhance rdoc intro for Hash (#3056)Burdette Lamar
* 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>
2020-05-12Document that #hash is not called for certain core classes [ci skip]Jeremy Evans
Fixes [Bug #16850]
2020-05-11sed -i 's|ruby/impl|ruby/internal|'卜部昌平
To fix build failures. Notes: Merged: https://github.com/ruby/ruby/pull/3079
2020-05-11sed -i s|ruby/3|ruby/impl|g卜部昌平
This shall fix compile errors. Notes: Merged: https://github.com/ruby/ruby/pull/3079
2020-05-11Added more NORETURN declarationsNobuyoshi Nakada
2020-04-23RDoc enhancements for Hash[].Burdette Lamar
Notes: Merged: https://github.com/ruby/ruby/pull/3026 Merged-By: ioquatix <samuel@codeotaku.com>
2020-04-18Env values removed by ENV.clear are not usedNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/3041
2020-04-18Bypass env key encoding conversion if unnecessaryNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/3041
2020-04-18Hoisted out reset_by_modified_envNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/3041
2020-04-18Compare environment variable names in those manor [Bug #16798]Nobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/3040
2020-04-14Improve Hash documentation.Burdette Lamar
Notes: Merged: https://github.com/ruby/ruby/pull/3002 Merged-By: ioquatix <samuel@codeotaku.com>
2020-04-08Merge pull request #2991 from shyouhei/ruby.h卜部昌平
Split ruby.h Notes: Merged-By: shyouhei <shyouhei@ruby-lang.org>
2020-03-27[ci skip] Doc-only enhancements for HashBurdette Lamar
About the defalut values. Notes: Merged: https://github.com/ruby/ruby/pull/2977 Merged-By: nobu <nobu@ruby-lang.org>
2020-03-17Reduce allocations for keyword argument hashesJeremy Evans
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
2020-03-16hash.c: Do not use the fast path (rb_yield_values) for lambda blocksYusuke Endoh
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]