From 44f591aa8f7091e6ca6cb418e428ae6d4ceaf77d Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 19 Feb 2022 16:13:16 +0900 Subject: [PATCH] codegen.c: adjust stack position for `OP_SUPER` instruction. --- mrbgems/mruby-compiler/core/codegen.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 20b7d5c89e..729f575661 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -2954,19 +2954,20 @@ codegen(codegen_scope *s, node *tree, int val) if (tree->cdr->cdr) { codegen(s, tree->cdr->cdr, VAL); } - else if (!s2) {/* super at top-level */ - push(); /* no need to push block */ - } + else if (s2) gen_blkmove(s, s2->ainfo, lv); else { - gen_blkmove(s, s2->ainfo, lv); + genop_1(s, OP_LOADNIL, cursp()); + push(); } - st++; } else { - if (!s2) push(); - else gen_blkmove(s, s2->ainfo, lv); - st++; + if (s2) gen_blkmove(s, s2->ainfo, lv); + else { + genop_1(s, OP_LOADNIL, cursp()); + push(); + } } + st++; pop_n(st+1); genop_2(s, OP_SUPER, cursp(), n); if (val) push(); @@ -3218,6 +3219,7 @@ codegen(codegen_scope *s, node *tree, int val) codegen_error(s, "no anonymous block argument"); } gen_move(s, cursp(), idx, val); + if (val) push(); } else { codegen(s, tree, val);