From 6ab86e462624df5d7d0d7661f9511d05c0363224 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Mon, 3 Apr 2023 21:22:02 -0700 Subject: RJIT: Fix arguments for shift_stack --- bootstraptest/test_rjit.rb | 36 +++++++++++++++++++++++++----------- lib/ruby_vm/rjit/insn_compiler.rb | 6 +++--- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/bootstraptest/test_rjit.rb b/bootstraptest/test_rjit.rb index c00c742318..a8a1524fe2 100644 --- a/bootstraptest/test_rjit.rb +++ b/bootstraptest/test_rjit.rb @@ -1,16 +1,30 @@ -assert_equal 'true', %q{ - def nil_nil = nil == nil - nil_nil +# VM_CALL_OPT_SEND + VM_METHOD_TYPE_ATTRSET +assert_equal '1', %q{ + class Foo + attr_writer :foo + + def bar + send(:foo=, 1) + end + end + + Foo.new.bar } -assert_equal 'true', %q{ - def lt(a, b) = a < b - lt(1, 2) - lt('a', 'b') +# VM_CALL_OPT_SEND + OPTIMIZED_METHOD_TYPE_CALL +assert_equal 'foo', %q{ + def bar(&foo) + foo.send(:call) + end + + bar { :foo } } -assert_equal '3', %q{ - def foo = 2 - def bar = 1 + foo + nil.to_i - bar +# VM_CALL_OPT_SEND + OPTIMIZED_METHOD_TYPE_STRUCT_AREF +assert_equal 'bar', %q{ + def bar(foo) + foo.send(:bar) + end + + bar(Struct.new(:bar).new(:bar)) } diff --git a/lib/ruby_vm/rjit/insn_compiler.rb b/lib/ruby_vm/rjit/insn_compiler.rb index f01fb684c7..f99dbff651 100644 --- a/lib/ruby_vm/rjit/insn_compiler.rb +++ b/lib/ruby_vm/rjit/insn_compiler.rb @@ -5128,7 +5128,7 @@ module RubyVM::RJIT # This is a .send call and we need to adjust the stack if flags & C::VM_CALL_OPT_SEND != 0 - handle_opt_send_shift_stack(ctx, asm, argc, send_shift:) + handle_opt_send_shift_stack(asm, argc, ctx, send_shift:) end # Save the PC and SP because the callee may allocate @@ -5316,7 +5316,7 @@ module RubyVM::RJIT # If this is a .send call we need to adjust the stack if flags & C::VM_CALL_OPT_SEND != 0 - handle_opt_send_shift_stack(ctx, asm, argc, send_shift:) + handle_opt_send_shift_stack(asm, argc, ctx, send_shift:) end # About to reset the SP, need to load this here @@ -5363,7 +5363,7 @@ module RubyVM::RJIT # This is a .send call and we need to adjust the stack if flags & C::VM_CALL_OPT_SEND != 0 - handle_opt_send_shift_stack(ctx, asm, argc, send_shift:) + handle_opt_send_shift_stack(asm, argc, ctx, send_shift:) end # All structs from the same Struct class should have the same -- cgit v1.2.1