summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core/codegen.c
diff options
context:
space:
mode:
Diffstat (limited to 'mrbgems/mruby-compiler/core/codegen.c')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index 857496f00..a5d9a4b8e 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -2321,7 +2321,9 @@ codegen(codegen_scope *s, node *tree, int val)
s2 = s2->prev;
if (!s2) break;
}
- if (s2) ainfo = s2->ainfo;
+ if (s2 && s2->ainfo > 0) {
+ ainfo = s2->ainfo;
+ }
genop_2S(s, OP_ARGARY, cursp(), (ainfo<<4)|(lv & 0xf));
push(); push(); pop(); /* ARGARY pushes two values */
if (tree && tree->cdr) {
@@ -2361,7 +2363,10 @@ codegen(codegen_scope *s, node *tree, int val)
s2 = s2->prev;
if (!s2) break;
}
- if (s2) ainfo = s2->ainfo;
+ if (s2) {
+ ainfo = s2->ainfo;
+ if (ainfo < 0) codegen_error(s, "invalid yield");
+ }
push();
if (tree) {
n = gen_values(s, tree, VAL, 0);