@@ -8778,25 +8778,28 @@ void zend_eval_const_expr(zend_ast **ast_ptr) /* {{{ */
8778
8778
case ZEND_AST_AND :
8779
8779
case ZEND_AST_OR :
8780
8780
{
8781
- int i ;
8782
- for (i = 0 ; i <= 1 ; i ++ ) {
8783
- zend_eval_const_expr (& ast -> child [i ]);
8784
- if (ast -> child [i ]-> kind == ZEND_AST_ZVAL ) {
8785
- if (zend_is_true (zend_ast_get_zval (ast -> child [i ])) == (ast -> kind == ZEND_AST_OR )) {
8786
- ZVAL_BOOL (& result , ast -> kind == ZEND_AST_OR );
8787
- return ;
8788
- }
8789
- }
8781
+ zend_bool child0_is_true , child1_is_true ;
8782
+ zend_eval_const_expr (& ast -> child [0 ]);
8783
+ zend_eval_const_expr (& ast -> child [1 ]);
8784
+ if (ast -> child [0 ]-> kind != ZEND_AST_ZVAL ) {
8785
+ return ;
8790
8786
}
8791
8787
8792
- if (ast -> child [0 ]-> kind != ZEND_AST_ZVAL || ast -> child [1 ]-> kind != ZEND_AST_ZVAL ) {
8788
+ child0_is_true = zend_is_true (zend_ast_get_zval (ast -> child [0 ]));
8789
+ if (child0_is_true == (ast -> kind == ZEND_AST_OR )) {
8790
+ ZVAL_BOOL (& result , ast -> kind == ZEND_AST_OR );
8791
+ break ;
8792
+ }
8793
+
8794
+ if (ast -> child [1 ]-> kind != ZEND_AST_ZVAL ) {
8793
8795
return ;
8794
8796
}
8795
8797
8798
+ child1_is_true = zend_is_true (zend_ast_get_zval (ast -> child [1 ]));
8796
8799
if (ast -> kind == ZEND_AST_OR ) {
8797
- ZVAL_BOOL (& result , zend_is_true ( zend_ast_get_zval ( ast -> child [ 0 ])) || zend_is_true ( zend_ast_get_zval ( ast -> child [ 1 ])) );
8800
+ ZVAL_BOOL (& result , child0_is_true || child1_is_true );
8798
8801
} else {
8799
- ZVAL_BOOL (& result , zend_is_true ( zend_ast_get_zval ( ast -> child [ 0 ])) && zend_is_true ( zend_ast_get_zval ( ast -> child [ 1 ])) );
8802
+ ZVAL_BOOL (& result , child0_is_true && child1_is_true );
8800
8803
}
8801
8804
break ;
8802
8805
}
0 commit comments