Skip to content
  • Jeremy Evans's avatar
    beae6cbf
    Fully separate positional arguments and keyword arguments · beae6cbf
    Jeremy Evans authored
    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().
    beae6cbf
    Fully separate positional arguments and keyword arguments
    Jeremy Evans authored
    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().
Loading