From 00d1fd0e6fee6cef2565c4a3b2dd428b0d59f4bf Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 5 Dec 2020 08:01:05 +0900 Subject: Fixed a bug with modules prepended many times. Adjust insertion point in `fix_prepend_module()`. --- src/class.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/class.c b/src/class.c index a421325a3..7141fe099 100644 --- a/src/class.c +++ b/src/class.c @@ -1449,11 +1449,15 @@ fix_prepend_module(mrb_state *mrb, struct RBasic *obj, void *data) if (c->tt == MRB_TT_CLASS || c->tt == MRB_TT_MODULE) { struct RClass *p = c->super; + struct RClass *ins_pos = c; while (p) { if (c == m[0]) break; + if (p == m[0]->super->c) { + ins_pos = c; + } if (p->tt == MRB_TT_CLASS) break; if (p->c == m[0]) { - include_module_at(mrb, c, c, m[1], 0); + include_module_at(mrb, ins_pos, ins_pos, m[1], 0); break; } c = p; -- cgit v1.2.3