summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-11-14 16:06:47 +0900
committerGitHub <[email protected]>2020-11-14 16:06:47 +0900
commit5edac8b8850b20697466bd5866fedfff6db23c6e (patch)
tree94abfd979f828d8df4887cc6164a3e6b5866b9f7 /src
parent7fb62670a9a8b06066e39048ab792594e8fc2bff (diff)
parent368f8a5da6d0e0282e07e6cceef777fab5c4844c (diff)
downloadmruby-5edac8b8850b20697466bd5866fedfff6db23c6e.tar.gz
mruby-5edac8b8850b20697466bd5866fedfff6db23c6e.zip
Merge pull request #5129 from dearblue/mrb_mt_foreach
Don't use private structs with `mrb_mt_foreach()`
Diffstat (limited to 'src')
-rw-r--r--src/class.c11
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;
}
}