From: "jeremyevans0 (Jeremy Evans) via ruby-core" Date: 2024-03-22T22:24:11+00:00 Subject: [ruby-core:117294] [Ruby master Bug#20388] super + ruby2_keywords isn't working Issue #20388 has been updated by jeremyevans0 (Jeremy Evans). jeremyevans0 (Jeremy Evans) wrote in #note-2: > tenderlovemaking (Aaron Patterson) wrote in #note-1: > > Sorry, I should be more specific. The code sample returns `nil` before 4f77d8d3, and since 4f77d8d3 it will raise an exception (it tries to mutate the `args` array) > > Thanks for the report. I'll work on fixing this in the compiler. Actually, compiler is fine, this is due to the anonymous splat optimization. Fix appears simple enough, I'll submit a PR shortly: ```diff diff --git a/vm_args.c b/vm_args.c index aa800319df..9df175eaa9 100644 --- a/vm_args.c +++ b/vm_args.c @@ -687,6 +687,9 @@ setup_parameters_complex(rb_execution_context_t * const ec, const rb_iseq_t * co rest_last = rb_hash_dup(rest_last); kw_flag |= VM_CALL_KW_SPLAT | VM_CALL_KW_SPLAT_MUT; + // Unset rest_dupped set by anon_rest as we may need to modify splat in this case + args->rest_dupped = false; + if (ignore_keyword_hash_p(rest_last, iseq, &kw_flag, &converted_keyword_hash)) { arg_rest_dup(args); rb_ary_pop(args->rest); ``` ---------------------------------------- Bug #20388: super + ruby2_keywords isn't working https://bugs.ruby-lang.org/issues/20388#change-107436 * Author: tenderlovemaking (Aaron Patterson) * Status: Open * Assignee: jeremyevans0 (Jeremy Evans) * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- ```ruby class A def process action, ... end end class B < A def process method_name, *args args.freeze super end ruby2_keywords(:process) end p B.new.process(:foo, bar: :baz) ``` The above code started breaking at revision 4f77d8d3 -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/