diff options
-rw-r--r-- | parse.y | 12 |
1 files changed, 11 insertions, 1 deletions
@@ -5151,6 +5151,12 @@ assocs : assoc assocs = tail; } else if (tail) { + if (assocs->nd_head && + !tail->nd_head && nd_type(tail->nd_next) == NODE_ARRAY && + nd_type(tail->nd_next->nd_head) == NODE_HASH) { + /* DSTAR */ + tail = tail->nd_next->nd_head->nd_head; + } assocs = list_concat(assocs, tail); } $$ = assocs; @@ -5188,7 +5194,11 @@ assoc : arg_value tASSOC arg_value | tDSTAR arg_value { /*%%%*/ - $$ = list_append(p, NEW_LIST(0, &@$), $2); + if (nd_type($2) == NODE_HASH && + !($2->nd_head && $2->nd_head->nd_alen)) + $$ = 0; + else + $$ = list_append(p, NEW_LIST(0, &@$), $2); /*% %*/ /*% ripper: assoc_splat!($2) %*/ } |