diff options
author | Takashi Kokubun <takashikkbn@gmail.com> | 2023-03-19 13:46:09 -0700 |
---|---|---|
committer | Takashi Kokubun <takashikkbn@gmail.com> | 2023-03-19 14:04:58 -0700 |
commit | 83ad1cac811b144b0016fdbfc9d83c11fd190349 (patch) | |
tree | 5f2bf602a351d7160041381383372f74f324bb57 /rjit_c.rb | |
parent | 95c4ced39eb0d25925724456b222a56206b633db (diff) |
RJIT: Optimize Kernel#respond_to?
Diffstat (limited to 'rjit_c.rb')
-rw-r--r-- | rjit_c.rb | 24 |
1 files changed, 24 insertions, 0 deletions
@@ -310,6 +310,25 @@ module RubyVM::RJIT # :nodoc: all def rb_obj_class(obj) Primitive.cexpr! 'rb_obj_class(obj)' end + + def rb_sym2id(sym) + Primitive.cexpr! 'SIZET2NUM((size_t)rb_sym2id(sym))' + end + + def rb_callable_method_entry_or_negative(klass, mid) + cme_addr = Primitive.cexpr! 'SIZET2NUM((size_t)rb_callable_method_entry_or_negative(klass, (ID)NUM2SIZET(mid)))' + return nil if cme_addr == 0 + rb_callable_method_entry_t.new(cme_addr) + end + + def rb_method_basic_definition_p(klass, mid) + Primitive.cexpr! 'RBOOL(rb_method_basic_definition_p(klass, (ID)NUM2SIZET(mid)))' + end + + def UNDEFINED_METHOD_ENTRY_P(cme) + _cme_addr = cme.to_i + Primitive.cexpr! 'RBOOL(UNDEFINED_METHOD_ENTRY_P((const rb_callable_method_entry_t *)NUM2SIZET(_cme_addr)))' + end end # @@ -352,6 +371,7 @@ module RubyVM::RJIT # :nodoc: all C::METHOD_VISI_PRIVATE = Primitive.cexpr! %q{ SIZET2NUM(METHOD_VISI_PRIVATE) } C::METHOD_VISI_PROTECTED = Primitive.cexpr! %q{ SIZET2NUM(METHOD_VISI_PROTECTED) } C::METHOD_VISI_PUBLIC = Primitive.cexpr! %q{ SIZET2NUM(METHOD_VISI_PUBLIC) } + C::METHOD_VISI_UNDEF = Primitive.cexpr! %q{ SIZET2NUM(METHOD_VISI_UNDEF) } C::OBJ_TOO_COMPLEX_SHAPE_ID = Primitive.cexpr! %q{ SIZET2NUM(OBJ_TOO_COMPLEX_SHAPE_ID) } C::OPTIMIZED_METHOD_TYPE_BLOCK_CALL = Primitive.cexpr! %q{ SIZET2NUM(OPTIMIZED_METHOD_TYPE_BLOCK_CALL) } C::OPTIMIZED_METHOD_TYPE_CALL = Primitive.cexpr! %q{ SIZET2NUM(OPTIMIZED_METHOD_TYPE_CALL) } @@ -433,6 +453,10 @@ module RubyVM::RJIT # :nodoc: all Primitive.cexpr! %q{ SIZET2NUM(block_type_iseq) } end + def C.idRespond_to_missing + Primitive.cexpr! %q{ SIZET2NUM(idRespond_to_missing) } + end + def C.imemo_iseq Primitive.cexpr! %q{ SIZET2NUM(imemo_iseq) } end |