diff options
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 17 |
1 files changed, 16 insertions, 1 deletions
@@ -5377,7 +5377,22 @@ static NODE * new_yield(node) NODE *node; { - return NEW_YIELD(node, node ? Qtrue : Qfalse); + long state = Qtrue; + + if (node) { + no_blockarg(node); + if (nd_type(node) == NODE_ARRAY && node->nd_next == 0) { + node = node->nd_head; + state = Qfalse; + } + if (node && nd_type(node) == NODE_SPLAT) { + state = Qtrue; + } + } + else { + state = Qfalse; + } + return NEW_YIELD(node, state); } static NODE* |