diff options
| author | dearblue <[email protected]> | 2020-11-14 11:30:34 +0900 |
|---|---|---|
| committer | dearblue <[email protected]> | 2020-11-14 11:30:34 +0900 |
| commit | 368f8a5da6d0e0282e07e6cceef777fab5c4844c (patch) | |
| tree | 94abfd979f828d8df4887cc6164a3e6b5866b9f7 /src/class.c | |
| parent | 7fb62670a9a8b06066e39048ab792594e8fc2bff (diff) | |
| download | mruby-368f8a5da6d0e0282e07e6cceef777fab5c4844c.tar.gz mruby-368f8a5da6d0e0282e07e6cceef777fab5c4844c.zip | |
Don't use private structs with `mrb_mt_foreach()`
The `MRB_API` function `mrb_mt_foreach()` previously used the private structure `struct mt_elem`.
Therefore, use `mrb_method_t` instead.
Diffstat (limited to 'src/class.c')
| -rw-r--r-- | src/class.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/class.c b/src/class.c index f00d3c782..26366aeb9 100644 --- a/src/class.c +++ b/src/class.c @@ -230,7 +230,16 @@ mrb_mt_foreach(mrb_state *mrb, struct RClass *c, mrb_mt_foreach_func *fn, void * struct mt_elem *slot = &t->table[i]; if (slot->key) { - if (fn(mrb, slot->key, slot, p) != 0) + mrb_method_t m; + + if (slot->func_p) { + MRB_METHOD_FROM_FUNC(m, slot->ptr.func); + } + else { + MRB_METHOD_FROM_PROC(m, slot->ptr.proc); + } + + if (fn(mrb, slot->key, m, p) != 0) return; } } |
