diff options
author | Jeremy Evans <[email protected]> | 2019-10-04 12:51:57 -0700 |
---|---|---|
committer | Jeremy Evans <[email protected]> | 2020-01-02 18:40:45 -0800 |
commit | beae6cbf0fd8b6619e5212552de98022d4c4d4d4 (patch) | |
tree | a926f619ed39569df4e93ec31157acdb78796379 /eval.c | |
parent | 8ba261c7546e3cd12ff6870bb41dd0a0bee32ba8 (diff) |
Fully separate positional arguments and keyword arguments
This removes the warnings added in 2.7, and changes the behavior
so that a final positional hash is not treated as keywords or
vice-versa.
To handle the arg_setup_block splat case correctly with keyword
arguments, we need to check if we are taking a keyword hash.
That case didn't have a test, but it affects real-world code,
so add a test for it.
This removes rb_empty_keyword_given_p() and related code, as
that is not needed in Ruby 3. The empty keyword case is the
same as the no keyword case in Ruby 3.
This changes rb_scan_args to implement keyword argument
separation for C functions when the : character is used.
For backwards compatibility, it returns a duped hash.
This is a bad idea for performance, but not duping the hash
breaks at least Enumerator::ArithmeticSequence#inspect.
Instead of having RB_PASS_CALLED_KEYWORDS be a number,
simplify the code by just making it be rb_keyword_given_p().
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/2794
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 8 |
1 files changed, 0 insertions, 8 deletions
@@ -924,14 +924,6 @@ rb_keyword_given_p(void) return rb_vm_cframe_keyword_p(GET_EC()->cfp); } -/* -- Remove In 3.0 -- */ -int rb_vm_cframe_empty_keyword_p(const rb_control_frame_t *cfp); -int -rb_empty_keyword_given_p(void) -{ - return rb_vm_cframe_empty_keyword_p(GET_EC()->cfp); -} - VALUE rb_eThreadError; /*! Declares that the current method needs a block. |