rb_method_entry() returns valid me.
search_method() can return invalid method, but vm_defined() checks it as valid method entry. This is why defined?(foo) if foo is undef'ed. To solve this problem, check invalidation and return NULL. [Bug #16669] https://twitter.com/kamipo/status/1252881930103558144 Tests will be merged by nobu soon.
This commit is contained in:
parent
492e8599c6
commit
8119bcbfc0
@ -936,7 +936,13 @@ search_method_protect(VALUE klass, ID id, VALUE *defined_class_ptr)
|
||||
MJIT_FUNC_EXPORTED const rb_method_entry_t *
|
||||
rb_method_entry(VALUE klass, ID id)
|
||||
{
|
||||
return search_method(klass, id, NULL);
|
||||
const rb_method_entry_t *me = search_method(klass, id, NULL);
|
||||
if (me && me->def && me->def->type != VM_METHOD_TYPE_UNDEF) {
|
||||
return me;
|
||||
}
|
||||
else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static inline const rb_callable_method_entry_t *
|
||||
|
Loading…
x
Reference in New Issue
Block a user