From a893877b0dc62d29dc4b220a95a6d9ee36b3a263 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 1 Jun 2017 09:38:42 +0900 Subject: Check for super using OP_ARGARY; fix #3678 It generates a wasted empty array for each `super` call though. It should be fixed in the future, if possible. --- mrbgems/mruby-compiler/core/codegen.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 5593dc669..3c13d23a6 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -1939,9 +1939,19 @@ codegen(codegen_scope *s, node *tree, int val) case NODE_SUPER: { + codegen_scope *s2 = s; + int lv = 0; int n = 0, noop = 0, sendv = 0; push(); /* room for receiver */ + while (!s2->mscope) { + lv++; + s2 = s2->prev; + if (!s2) break; + } + genop(s, MKOP_ABx(OP_ARGARY, cursp(), (lv & 0xf))); + push(); push(); /* ARGARY pushes two values */ + pop(); pop(); if (tree) { node *args = tree->car; if (args) { -- cgit v1.2.3