diff options
author | Koichi Sasada <ko1@atdot.net> | 2021-12-21 06:03:51 +0900 |
---|---|---|
committer | Koichi Sasada <ko1@atdot.net> | 2021-12-21 11:03:09 +0900 |
commit | df48db987da2bd623d29d06419f2fbc8b7ecb38a (patch) | |
tree | ed86fd0472dd5885581e21c7947afafff4eef483 /main.c | |
parent | 711342d93565092a8348ac5538bc4b4288d384ba (diff) | |
download | ruby-df48db987da2bd623d29d06419f2fbc8b7ecb38a.tar.gz |
`mandatory_only_cme` should not be in `def`
`def` (`rb_method_definition_t`) is shared by multiple callable
method entries (cme, `rb_callable_method_entry_t`).
There are two issues:
* old -> young reference: `cme1->def->mandatory_only_cme = monly_cme`
if `cme1` is young and `monly_cme` is young, there is no problem.
Howevr, another old `cme2` can refer `def`, in this case, old `cme2`
points young `monly_cme` and it violates gengc assumption.
* cme can have different `defined_class` but `monly_cme` only has
one `defined_class`. It does not make sense and `monly_cme`
should be created for a cme (not `def`).
To solve these issues, this patch allocates `monly_cme` per `cme`.
`cme` does not have another room to store a pointer to the `monly_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.
Diffstat (limited to 'main.c')
0 files changed, 0 insertions, 0 deletions