--- /dev/null
+--TEST--
+?: operator
+--FILE--
+<?php
+var_dump(true ?: false);
+var_dump(false ?: true);
+var_dump(23 ?: 42);
+var_dump(0 ?: "bar");
+
+$a = 23;
+$b = 0;
+$c = "";
+$d = 23.5;
+
+var_dump($a ?: $b);
+var_dump($c ?: $d);
+
+var_dump(1 ?: print(2));
+?>
+--EXPECT--
+bool(true)
+bool(true)
+int(23)
+string(3) "bar"
+int(23)
+float(23.5)
+int(1)
| expr '?' { zend_do_begin_qm_op(&$1, &$2 TSRMLS_CC); }
expr ':' { zend_do_qm_true(&$4, &$2, &$5 TSRMLS_CC); }
expr { zend_do_qm_false(&$$, &$7, &$2, &$5 TSRMLS_CC); }
+ | expr '?' { zend_do_begin_qm_op(&$1, &$2 TSRMLS_CC); }
+ ':' { zend_do_qm_true(&$1, &$2, &$4 TSRMLS_CC); }
+ expr { zend_do_qm_false(&$$, &$6, &$2, &$4 TSRMLS_CC); }
| internal_functions_in_yacc { $$ = $1; }
| T_INT_CAST expr { zend_do_cast(&$$, &$2, IS_LONG TSRMLS_CC); }
| T_DOUBLE_CAST expr { zend_do_cast(&$$, &$2, IS_DOUBLE TSRMLS_CC); }