summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y17
1 files changed, 16 insertions, 1 deletions
diff --git a/parse.y b/parse.y
index 75fa33e820..5c43cd81da 100644
--- a/parse.y
+++ b/parse.y
@@ -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*