summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core/codegen.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-02-28 11:51:17 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-02-28 11:51:17 +0900
commitdc56bbecc81b5d04d3bf9ab337f4ebf7024f654f (patch)
tree8a2cf4a7538f77167fcd079b5723a51caf442591 /mrbgems/mruby-compiler/core/codegen.c
parentfb3243e09616652c037b7392b9c54af74f15d423 (diff)
downloadmruby-dc56bbecc81b5d04d3bf9ab337f4ebf7024f654f.tar.gz
mruby-dc56bbecc81b5d04d3bf9ab337f4ebf7024f654f.zip
Ignore empty ensure clause.
Diffstat (limited to 'mrbgems/mruby-compiler/core/codegen.c')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index ad4da12f7..7ce91b826 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -1360,7 +1360,9 @@ codegen(codegen_scope *s, node *tree, int val)
break;
case NODE_ENSURE:
- {
+ if (!tree->cdr || !tree->cdr->cdr ||
+ ((intptr_t)tree->cdr->cdr->car == NODE_BEGIN &&
+ tree->cdr->cdr->cdr)) {
int idx;
int epush = s->pc;
@@ -1372,6 +1374,9 @@ codegen(codegen_scope *s, node *tree, int val)
s->ensure_level--;
genop_peep(s, MKOP_A(OP_EPOP, 1), NOVAL);
}
+ else { /* empty ensure ignored */
+ codegen(s, tree->car, val);
+ }
break;
case NODE_LAMBDA: