summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2015-12-01 09:38:42 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2015-12-01 09:38:42 +0900
commitc2996514d38e9df4dc4e0dcbdfd0d3ca73af668f (patch)
treed3db9599e0c55b6da2716c5111d79e4e90d5b8f2 /mrbgems/mruby-compiler/core
parent81a7b4039bb4101f3cc9879789533053d17183d3 (diff)
downloadmruby-c2996514d38e9df4dc4e0dcbdfd0d3ca73af668f.tar.gz
mruby-c2996514d38e9df4dc4e0dcbdfd0d3ca73af668f.zip
should ignore block to next, break, etc. fix #3039
Diffstat (limited to 'mrbgems/mruby-compiler/core')
-rw-r--r--mrbgems/mruby-compiler/core/parse.y13
1 files changed, 9 insertions, 4 deletions
diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y
index e46ff5b98..600ee30e6 100644
--- a/mrbgems/mruby-compiler/core/parse.y
+++ b/mrbgems/mruby-compiler/core/parse.y
@@ -852,19 +852,24 @@ call_with_block(parser_state *p, node *a, node *b)
{
node *n;
- if (a->car == (node*)NODE_SUPER ||
- a->car == (node*)NODE_ZSUPER) {
+ switch ((enum node_type)a->car) {
+ case NODE_SUPER:
+ case NODE_ZSUPER:
if (!a->cdr) a->cdr = cons(0, b);
else {
args_with_block(p, a->cdr, b);
}
- }
- else {
+ break;
+ case NODE_CALL:
+ case NODE_FCALL:
n = a->cdr->cdr->cdr;
if (!n->car) n->car = cons(0, b);
else {
args_with_block(p, n->car, b);
}
+ break;
+ default:
+ break;
}
}