@@ -119,24 +119,25 @@ void zend_optimizer_pass1(zend_op_array *op_array, zend_optimizer_ctx *ctx)
119
119
} else if (opline -> extended_value == ZEND_MOD
120
120
|| opline -> extended_value == ZEND_SL
121
121
|| opline -> extended_value == ZEND_SR ) {
122
- if (Z_TYPE (ZEND_OP2_LITERAL (opline )) != IS_LONG ) {
122
+ zval * op2 = & ZEND_OP2_LITERAL (opline );
123
+ if (Z_TYPE_P (op2 ) != IS_LONG ) {
123
124
/* Don't optimize if it should produce an incompatible float to int error */
124
125
// TODO There must be a better way
125
- if (Z_TYPE ( ZEND_OP2_LITERAL ( opline ) ) == IS_DOUBLE
126
- && !zend_is_long_compatible (zend_dval_to_lval ( Z_DVAL ( ZEND_OP2_LITERAL ( opline ))),
127
- Z_DVAL ( ZEND_OP2_LITERAL ( opline )))) {
126
+ if (Z_TYPE_P ( op2 ) == IS_DOUBLE
127
+ && !zend_is_long_compatible (
128
+ Z_DVAL_P ( op2 ), zend_dval_to_lval ( Z_DVAL_P ( op2 )))) {
128
129
break ;
129
130
}
130
131
/* don't optimize if it should produce a runtime numeric string error */
131
- if (Z_TYPE ( ZEND_OP2_LITERAL ( opline ) ) == IS_STRING ) {
132
+ if (Z_TYPE_P ( op2 ) == IS_STRING ) {
132
133
double dval = 0 ;
133
- zend_uchar is_num = is_numeric_string (Z_STRVAL ( ZEND_OP2_LITERAL ( opline ) ),
134
- Z_STRLEN ( ZEND_OP2_LITERAL ( opline ) ), NULL , & dval , /* allow_errors */ false);
135
- if (is_num == 0 || (is_num == IS_DOUBLE && !zend_is_long_compatible (zend_dval_to_lval ( dval ), dval ))) {
134
+ zend_uchar is_num = is_numeric_string (Z_STRVAL_P ( op2 ),
135
+ Z_STRLEN_P ( op2 ), NULL , & dval , /* allow_errors */ false);
136
+ if (is_num == 0 || (is_num == IS_DOUBLE && !zend_is_long_compatible (dval , zend_dval_to_lval ( dval ) ))) {
136
137
break ;
137
138
}
138
139
}
139
- convert_to_long (& ZEND_OP2_LITERAL ( opline ) );
140
+ convert_to_long (op2 );
140
141
}
141
142
} else if (opline -> extended_value == ZEND_CONCAT ) {
142
143
if (Z_TYPE (ZEND_OP2_LITERAL (opline )) != IS_STRING ) {
0 commit comments