mandatory_only_cme
should not be in def
#5311
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
def
(rb_method_definition_t
) is shared by multiple callablemethod entries (cme,
rb_callable_method_entry_t
).There are two issues:
cme1->def->mandatory_only_cme = monly_cme
if
cme1
is young andmonly_cme
is young, there is no problem.Howevr, another old
cme2
can referdef
, in this case, oldcme2
points young
monly_cme
and it violates gengc assumption.defined_class
butmonly_cme
only hasone
defined_class
. It does not make sense andmonly_cme
should be created for a cme (not
def
).To solve these issues, this patch allocates
monly_cme
percme
.cme
does not have another room to store a pointer to themonly_cme
,so this patch introduces
overloaded_cme_table
, which is weak key map[cme] -> [monly_cme]
.def::body::iseqptr::monly_cme
is deleted.The first issue is reported by Alan Wu.