--- /dev/null
+Yield operator precedence
+-----
+<?php
+
+function gen() {
+ yield "a" . "b";
+ yield "a" or die;
+ yield "k" => "a" . "b";
+ yield "k" => "a" or die;
+ var_dump([yield "k" => "a" . "b"]);
+ yield yield "k1" => yield "k2" => "a" . "b";
+ yield yield "k1" => (yield "k2") => "a" . "b";
+ var_dump([yield "k1" => yield "k2" => "a" . "b"]);
+ var_dump([yield "k1" => (yield "k2") => "a" . "b"]);
+}
+-----
+!!php7
+array(
+ 0: Stmt_Function(
+ byRef: false
+ name: gen
+ params: array(
+ )
+ returnType: null
+ stmts: array(
+ 0: Expr_Yield(
+ key: null
+ value: Expr_BinaryOp_Concat(
+ left: Scalar_String(
+ value: a
+ )
+ right: Scalar_String(
+ value: b
+ )
+ )
+ )
+ 1: Expr_BinaryOp_LogicalOr(
+ left: Expr_Yield(
+ key: null
+ value: Scalar_String(
+ value: a
+ )
+ )
+ right: Expr_Exit(
+ expr: null
+ )
+ )
+ 2: Expr_Yield(
+ key: Scalar_String(
+ value: k
+ )
+ value: Expr_BinaryOp_Concat(
+ left: Scalar_String(
+ value: a
+ )
+ right: Scalar_String(
+ value: b
+ )
+ )
+ )
+ 3: Expr_BinaryOp_LogicalOr(
+ left: Expr_Yield(
+ key: Scalar_String(
+ value: k
+ )
+ value: Scalar_String(
+ value: a
+ )
+ )
+ right: Expr_Exit(
+ expr: null
+ )
+ )
+ 4: Expr_FuncCall(
+ name: Name(
+ parts: array(
+ 0: var_dump
+ )
+ )
+ args: array(
+ 0: Arg(
+ value: Expr_Array(
+ items: array(
+ 0: Expr_ArrayItem(
+ key: null
+ value: Expr_Yield(
+ key: Scalar_String(
+ value: k
+ )
+ value: Expr_BinaryOp_Concat(
+ left: Scalar_String(
+ value: a
+ )
+ right: Scalar_String(
+ value: b
+ )
+ )
+ )
+ byRef: false
+ )
+ )
+ )
+ byRef: false
+ unpack: false
+ )
+ )
+ )
+ 5: Expr_Yield(
+ key: null
+ value: Expr_Yield(
+ key: Scalar_String(
+ value: k1
+ )
+ value: Expr_Yield(
+ key: Scalar_String(
+ value: k2
+ )
+ value: Expr_BinaryOp_Concat(
+ left: Scalar_String(
+ value: a
+ )
+ right: Scalar_String(
+ value: b
+ )
+ )
+ )
+ )
+ )
+ 6: Expr_Yield(
+ key: Expr_Yield(
+ key: Scalar_String(
+ value: k1
+ )
+ value: Expr_Yield(
+ key: null
+ value: Scalar_String(
+ value: k2
+ )
+ )
+ )
+ value: Expr_BinaryOp_Concat(
+ left: Scalar_String(
+ value: a
+ )
+ right: Scalar_String(
+ value: b
+ )
+ )
+ )
+ 7: Expr_FuncCall(
+ name: Name(
+ parts: array(
+ 0: var_dump
+ )
+ )
+ args: array(
+ 0: Arg(
+ value: Expr_Array(
+ items: array(
+ 0: Expr_ArrayItem(
+ key: null
+ value: Expr_Yield(
+ key: Scalar_String(
+ value: k1
+ )
+ value: Expr_Yield(
+ key: Scalar_String(
+ value: k2
+ )
+ value: Expr_BinaryOp_Concat(
+ left: Scalar_String(
+ value: a
+ )
+ right: Scalar_String(
+ value: b
+ )
+ )
+ )
+ )
+ byRef: false
+ )
+ )
+ )
+ byRef: false
+ unpack: false
+ )
+ )
+ )
+ 8: Expr_FuncCall(
+ name: Name(
+ parts: array(
+ 0: var_dump
+ )
+ )
+ args: array(
+ 0: Arg(
+ value: Expr_Array(
+ items: array(
+ 0: Expr_ArrayItem(
+ key: Expr_Yield(
+ key: Scalar_String(
+ value: k1
+ )
+ value: Expr_Yield(
+ key: null
+ value: Scalar_String(
+ value: k2
+ )
+ )
+ )
+ value: Expr_BinaryOp_Concat(
+ left: Scalar_String(
+ value: a
+ )
+ right: Scalar_String(
+ value: b
+ )
+ )
+ byRef: false
+ )
+ )
+ )
+ byRef: false
+ unpack: false
+ )
+ )
+ )
+ )
+ )
+)