summaryrefslogtreecommitdiffhomepage
path: root/src/parse.y
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-06-11 15:55:04 +0900
committerYukihiro Matsumoto <[email protected]>2012-06-11 15:55:04 +0900
commit13a542d48d5d86b866dbc4d6a4f0ec17bee49c12 (patch)
treeb73deac37c7cedb7f1b718a92ff71f21f97263dc /src/parse.y
parent8f020f28c6b5b9c64cbd66db8369f89809b20d0a (diff)
downloadmruby-13a542d48d5d86b866dbc4d6a4f0ec17bee49c12.tar.gz
mruby-13a542d48d5d86b866dbc4d6a4f0ec17bee49c12.zip
zsuper should respect block given; close #185
Diffstat (limited to 'src/parse.y')
-rw-r--r--src/parse.y16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/parse.y b/src/parse.y
index 3f542a3b3..d31711b68 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -754,11 +754,21 @@ args_with_block(parser_state *p, node *a, node *b)
static void
call_with_block(parser_state *p, node *a, node *b)
{
- node *n = a->cdr->cdr->cdr;
+ node *n;
- if (!n->car) n->car = cons(0, b);
+ if (a->car == (node*)NODE_SUPER ||
+ a->car == (node*)NODE_ZSUPER) {
+ if (!a->cdr) a->cdr = cons(0, b);
+ else {
+ args_with_block(p, a->cdr, b);
+ }
+ }
else {
- args_with_block(p, n->car, b);
+ n = a->cdr->cdr->cdr;
+ if (!n->car) n->car = cons(0, b);
+ else {
+ args_with_block(p, n->car, b);
+ }
}
}