summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/ruby_vm/rjit/insn_compiler.rb13
-rw-r--r--rjit_c.h3
2 files changed, 10 insertions, 6 deletions
diff --git a/lib/ruby_vm/rjit/insn_compiler.rb b/lib/ruby_vm/rjit/insn_compiler.rb
index 8281511e97..070049ca93 100644
--- a/lib/ruby_vm/rjit/insn_compiler.rb
+++ b/lib/ruby_vm/rjit/insn_compiler.rb
@@ -4807,13 +4807,16 @@ module RubyVM::RJIT
# @param ctx [RubyVM::RJIT::Context]
# @param asm [RubyVM::RJIT::Assembler]
def jit_caller_setup_arg(jit, ctx, asm, flags)
- if flags & C::VM_CALL_ARGS_SPLAT != 0
- # We don't support vm_caller_setup_arg_splat
+ if flags & C::VM_CALL_ARGS_SPLAT != 0 && flags & C::VM_CALL_KW_SPLAT != 0
+ asm.incr_counter(:send_args_splat_kw_splat)
+ return CantCompile
+ elsif flags & C::VM_CALL_ARGS_SPLAT != 0
asm.incr_counter(:send_args_splat)
return CantCompile
- end
- if flags & (C::VM_CALL_KWARG | C::VM_CALL_KW_SPLAT) != 0
- # We don't support keyword args either
+ elsif flags & C::VM_CALL_KW_SPLAT != 0
+ asm.incr_counter(:send_args_kw_splat)
+ return CantCompile
+ elsif flags & C::VM_CALL_KWARG != 0
asm.incr_counter(:send_kwarg)
return CantCompile
end
diff --git a/rjit_c.h b/rjit_c.h
index 41208129ca..4039227480 100644
--- a/rjit_c.h
+++ b/rjit_c.h
@@ -20,10 +20,11 @@ RJIT_RUNTIME_COUNTERS(
vm_insns_count,
rjit_insns_count,
+ send_args_splat_kw_splat,
send_args_splat,
- send_klass_megamorphic,
send_kw_splat,
send_kwarg,
+ send_klass_megamorphic,
send_missing_cme,
send_private,
send_protected_check_failed,