mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
refactor reduce METHOD_ENTRY_FLAGS_COPY
Make things more immutable.
This commit is contained in:
parent
7cb96d41a5
commit
167e6b48f1
Notes:
git
2019-09-30 10:27:05 +09:00
1 changed files with 33 additions and 16 deletions
49
vm_method.c
49
vm_method.c
|
@ -478,9 +478,11 @@ method_definition_addref_complement(rb_method_definition_t *def)
|
||||||
}
|
}
|
||||||
|
|
||||||
static rb_method_entry_t *
|
static rb_method_entry_t *
|
||||||
rb_method_entry_alloc(ID called_id, VALUE owner, VALUE defined_class, const rb_method_definition_t *def)
|
rb_method_entry_alloc(VALUE flags, ID called_id, VALUE owner, VALUE defined_class, const rb_method_definition_t *def)
|
||||||
{
|
{
|
||||||
|
rb_method_entry_t tmp = { flags, };
|
||||||
rb_method_entry_t *me = (rb_method_entry_t *)rb_imemo_new(imemo_ment, (VALUE)def, (VALUE)called_id, owner, defined_class);
|
rb_method_entry_t *me = (rb_method_entry_t *)rb_imemo_new(imemo_ment, (VALUE)def, (VALUE)called_id, owner, defined_class);
|
||||||
|
METHOD_ENTRY_FLAGS_COPY(me, &tmp);
|
||||||
return me;
|
return me;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -501,8 +503,15 @@ filter_defined_class(VALUE klass)
|
||||||
MJIT_FUNC_EXPORTED rb_method_entry_t *
|
MJIT_FUNC_EXPORTED rb_method_entry_t *
|
||||||
rb_method_entry_create(ID called_id, VALUE klass, rb_method_visibility_t visi, const rb_method_definition_t *def)
|
rb_method_entry_create(ID called_id, VALUE klass, rb_method_visibility_t visi, const rb_method_definition_t *def)
|
||||||
{
|
{
|
||||||
rb_method_entry_t *me = rb_method_entry_alloc(called_id, klass, filter_defined_class(klass), def);
|
rb_method_entry_t tmp = { 0, };
|
||||||
METHOD_ENTRY_FLAGS_SET(me, visi, ruby_running ? FALSE : TRUE);
|
METHOD_ENTRY_FLAGS_SET(&tmp, visi, !ruby_running);
|
||||||
|
rb_method_entry_t *me =
|
||||||
|
rb_method_entry_alloc(
|
||||||
|
tmp.flags,
|
||||||
|
called_id,
|
||||||
|
klass,
|
||||||
|
filter_defined_class(klass),
|
||||||
|
def);
|
||||||
if (def != NULL) method_definition_reset(me);
|
if (def != NULL) method_definition_reset(me);
|
||||||
return me;
|
return me;
|
||||||
}
|
}
|
||||||
|
@ -510,10 +519,12 @@ rb_method_entry_create(ID called_id, VALUE klass, rb_method_visibility_t visi, c
|
||||||
const rb_method_entry_t *
|
const rb_method_entry_t *
|
||||||
rb_method_entry_clone(const rb_method_entry_t *src_me)
|
rb_method_entry_clone(const rb_method_entry_t *src_me)
|
||||||
{
|
{
|
||||||
rb_method_entry_t *me = rb_method_entry_alloc(src_me->called_id, src_me->owner, src_me->defined_class,
|
return rb_method_entry_alloc(
|
||||||
method_definition_addref(src_me->def));
|
src_me->flags,
|
||||||
METHOD_ENTRY_FLAGS_COPY(me, src_me);
|
src_me->called_id,
|
||||||
return me;
|
src_me->owner,
|
||||||
|
src_me->defined_class,
|
||||||
|
method_definition_addref(src_me->def));
|
||||||
}
|
}
|
||||||
|
|
||||||
MJIT_FUNC_EXPORTED const rb_callable_method_entry_t *
|
MJIT_FUNC_EXPORTED const rb_callable_method_entry_t *
|
||||||
|
@ -538,8 +549,12 @@ rb_method_entry_complement_defined_class(const rb_method_entry_t *src_me, ID cal
|
||||||
else {
|
else {
|
||||||
def = method_definition_addref_complement((rb_method_definition_t *)def);
|
def = method_definition_addref_complement((rb_method_definition_t *)def);
|
||||||
}
|
}
|
||||||
me = rb_method_entry_alloc(called_id, src_me->owner, defined_class, def);
|
me = rb_method_entry_alloc(
|
||||||
METHOD_ENTRY_FLAGS_COPY(me, src_me);
|
src_me->flags,
|
||||||
|
called_id,
|
||||||
|
src_me->owner,
|
||||||
|
defined_class,
|
||||||
|
def);
|
||||||
|
|
||||||
VM_ASSERT(RB_TYPE_P(me->owner, T_MODULE));
|
VM_ASSERT(RB_TYPE_P(me->owner, T_MODULE));
|
||||||
|
|
||||||
|
@ -555,11 +570,13 @@ make_method_entry_refined(VALUE owner, rb_method_entry_t *me)
|
||||||
else {
|
else {
|
||||||
rb_vm_check_redefinition_opt_method(me, me->owner);
|
rb_vm_check_redefinition_opt_method(me, me->owner);
|
||||||
rb_method_entry_t *orig_me =
|
rb_method_entry_t *orig_me =
|
||||||
rb_method_entry_alloc(me->called_id, me->owner,
|
rb_method_entry_alloc(
|
||||||
me->defined_class ?
|
me->flags,
|
||||||
me->defined_class : owner,
|
me->called_id,
|
||||||
method_definition_addref(me->def));
|
me->owner,
|
||||||
METHOD_ENTRY_FLAGS_COPY(orig_me, me);
|
me->defined_class ?
|
||||||
|
me->defined_class : owner,
|
||||||
|
method_definition_addref(me->def));
|
||||||
const rb_method_definition_t *def =
|
const rb_method_definition_t *def =
|
||||||
rb_method_definition_create(
|
rb_method_definition_create(
|
||||||
VM_METHOD_TYPE_REFINED,
|
VM_METHOD_TYPE_REFINED,
|
||||||
|
@ -570,12 +587,12 @@ make_method_entry_refined(VALUE owner, rb_method_entry_t *me)
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
rb_method_entry_t *new_me =
|
rb_method_entry_t *new_me =
|
||||||
rb_method_entry_create(
|
rb_method_entry_alloc(
|
||||||
|
me->flags,
|
||||||
me->called_id,
|
me->called_id,
|
||||||
me->owner,
|
me->owner,
|
||||||
me->defined_class,
|
me->defined_class,
|
||||||
def);
|
def);
|
||||||
METHOD_ENTRY_FLAGS_COPY(new_me, me);
|
|
||||||
METHOD_ENTRY_VISI_SET(new_me, METHOD_VISI_PUBLIC);
|
METHOD_ENTRY_VISI_SET(new_me, METHOD_VISI_PUBLIC);
|
||||||
return new_me;
|
return new_me;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue