diff options
author | 卜部昌平 <[email protected]> | 2019-08-29 10:40:40 +0900 |
---|---|---|
committer | 卜部昌平 <[email protected]> | 2019-08-29 18:34:09 +0900 |
commit | 0b81e7d6e2810adac081965f0da1d8064888c0bd () | |
tree | 0ad28e52f3395e56d0a7c9c0a704c3195aa8c99c | |
parent | 0766f67168cf248b698a8b2cde1c22c526374be7 (diff) |
drop-in type check for rb_define_method_id
We can check the function pointer passed to rb_define_method_id like how we do so in rb_define_method. This method is relatively rarely used so there are less problems found than the other APIs.
-rw-r--r-- | class.c | 3 | ||||
-rw-r--r-- | include/ruby/intern.h | 45 | ||||
-rw-r--r-- | vm.c | 24 |
3 files changed, 69 insertions, 3 deletions
@@ -1534,6 +1534,9 @@ rb_obj_singleton_methods(int argc, const VALUE *argv, VALUE obj) * \{ */ void rb_define_method_id(VALUE klass, ID mid, VALUE (*func)(ANYARGS), int argc) { @@ -1003,4 +1003,49 @@ RUBY_SYMBOL_EXPORT_END } /* extern "C" { */ #endif #endif /* RUBY_INTERN_H */ @@ -2902,6 +2902,24 @@ static VALUE usage_analysis_operand_clear(VALUE self); static VALUE usage_analysis_register_clear(VALUE self); #endif void Init_VM(void) { @@ -2940,9 +2958,9 @@ Init_VM(void) rb_define_method_id(klass, id_core_set_postexe, m_core_set_postexe, 0); rb_define_method_id(klass, id_core_hash_merge_ptr, m_core_hash_merge_ptr, -1); rb_define_method_id(klass, id_core_hash_merge_kwd, m_core_hash_merge_kwd, 2); - rb_define_method_id(klass, id_core_raise, rb_f_raise, -1); - rb_define_method_id(klass, idProc, rb_block_proc, 0); - rb_define_method_id(klass, idLambda, rb_block_lambda, 0); rb_obj_freeze(fcore); RBASIC_CLEAR_CLASS(klass); rb_obj_freeze(klass); |