[ruby-cvs:79056] beae6cbf0f (master): Fully separate positional arguments and keyword arguments

"Jeremy Evans" <[email protected]> Fri, 3 Jan 2020 11:40:57 +0900 (JST)
Newsgroups gmane.comp.lang.ruby.cvs
Message-ID <[email protected]>
Jeremy Evans	2019-10-05 04:51:57 +0900 (Sat, 05 Oct 2019)

  New Revision: beae6cbf0f

  https://github.com/ruby/ruby/commit/beae6cbf0f

  Log:
    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().

  Modified files:
    class.c
    cont.c
    enumerator.c
    eval.c
    ext/-test-/scan_args/scan_args.c
    include/ruby/ruby.h
    internal/vm.h
    object.c
    proc.c
    test/ruby/test_proc.rb
    thread.c
    vm.c
    vm_args.c
    vm_core.h
    vm_eval.c
    vm_insnhelper.c=