* method.h (METHOD_ENTRY_COMPLEMENTED(_SET)): introduced to recognize
complemented method entries or not. There are some cases that callabe method entries do not have defined_class. * vm_method.c (rb_method_entry_complement_defined_class): use METHOD_ENTRY_COMPLEMENTED_SET(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52617 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
c88764f369
commit
551ae37ba3
@ -1,3 +1,12 @@
|
|||||||
|
Tue Nov 17 19:32:42 2015 Koichi Sasada <ko1@atdot.net>
|
||||||
|
|
||||||
|
* method.h (METHOD_ENTRY_COMPLEMENTED(_SET)): introduced to recognize
|
||||||
|
complemented method entries or not. There are some cases that callabe
|
||||||
|
method entries do not have defined_class.
|
||||||
|
|
||||||
|
* vm_method.c (rb_method_entry_complement_defined_class):
|
||||||
|
use METHOD_ENTRY_COMPLEMENTED_SET().
|
||||||
|
|
||||||
Tue Nov 17 19:02:59 2015 NAKAMURA Usaku <usa@ruby-lang.org>
|
Tue Nov 17 19:02:59 2015 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||||
|
|
||||||
* configure.in (BASERUBY): use Kernel#print instead of Kernel#p because
|
* configure.in (BASERUBY): use Kernel#print instead of Kernel#p because
|
||||||
|
2
method.h
2
method.h
@ -65,6 +65,8 @@ typedef struct rb_callable_method_entry_struct { /* same fields with rb_method_e
|
|||||||
|
|
||||||
#define METHOD_ENTRY_VISI(me) (rb_method_visibility_t)(((me)->flags & (IMEMO_FL_USER0 | IMEMO_FL_USER1)) >> (IMEMO_FL_USHIFT+0))
|
#define METHOD_ENTRY_VISI(me) (rb_method_visibility_t)(((me)->flags & (IMEMO_FL_USER0 | IMEMO_FL_USER1)) >> (IMEMO_FL_USHIFT+0))
|
||||||
#define METHOD_ENTRY_BASIC(me) (int) (((me)->flags & (IMEMO_FL_USER2 )) >> (IMEMO_FL_USHIFT+2))
|
#define METHOD_ENTRY_BASIC(me) (int) (((me)->flags & (IMEMO_FL_USER2 )) >> (IMEMO_FL_USHIFT+2))
|
||||||
|
#define METHOD_ENTRY_COMPLEMENTED(me) ((me)->flags & IMEMO_FL_USER3)
|
||||||
|
#define METHOD_ENTRY_COMPLEMENTED_SET(me) ((me)->flags = (me)->flags | IMEMO_FL_USER3)
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
METHOD_ENTRY_VISI_SET(rb_method_entry_t *me, rb_method_visibility_t visi)
|
METHOD_ENTRY_VISI_SET(rb_method_entry_t *me, rb_method_visibility_t visi)
|
||||||
|
@ -160,7 +160,7 @@ rb_method_definition_release(rb_method_definition_t *def, int complemented)
|
|||||||
void
|
void
|
||||||
rb_free_method_entry(const rb_method_entry_t *me)
|
rb_free_method_entry(const rb_method_entry_t *me)
|
||||||
{
|
{
|
||||||
rb_method_definition_release(me->def, RB_TYPE_P(me->owner, T_MODULE) && RB_TYPE_P(me->defined_class, T_ICLASS));
|
rb_method_definition_release(me->def, METHOD_ENTRY_COMPLEMENTED(me));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline rb_method_entry_t *search_method(VALUE klass, ID id, VALUE *defined_class_ptr);
|
static inline rb_method_entry_t *search_method(VALUE klass, ID id, VALUE *defined_class_ptr);
|
||||||
@ -400,9 +400,9 @@ rb_method_entry_complement_defined_class(const rb_method_entry_t *src_me, VALUE
|
|||||||
rb_method_entry_t *me = rb_method_entry_alloc(src_me->called_id, src_me->owner, defined_class,
|
rb_method_entry_t *me = rb_method_entry_alloc(src_me->called_id, src_me->owner, defined_class,
|
||||||
method_definition_addref_complement(src_me->def));
|
method_definition_addref_complement(src_me->def));
|
||||||
METHOD_ENTRY_FLAGS_COPY(me, src_me);
|
METHOD_ENTRY_FLAGS_COPY(me, src_me);
|
||||||
|
METHOD_ENTRY_COMPLEMENTED_SET(me);
|
||||||
|
|
||||||
VM_ASSERT(RB_TYPE_P(me->owner, T_MODULE));
|
VM_ASSERT(RB_TYPE_P(me->owner, T_MODULE));
|
||||||
VM_ASSERT(RB_TYPE_P(me->defined_class, T_ICLASS));
|
|
||||||
|
|
||||||
return (rb_callable_method_entry_t *)me;
|
return (rb_callable_method_entry_t *)me;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user