@@ -926,8 +926,13 @@ ZEND_API int ZEND_FASTCALL add_function(zval *result, zval *op1, zval *op2) /* {
926
926
} else if (!converted ) {
927
927
ZEND_TRY_BINARY_OBJECT_OPERATION (ZEND_ADD , add_function );
928
928
929
- zendi_convert_scalar_to_number (op1 , op1_copy , result );
930
- zendi_convert_scalar_to_number (op2 , op2_copy , result );
929
+ if (EXPECTED (op1 != op2 )) {
930
+ zendi_convert_scalar_to_number (op1 , op1_copy , result );
931
+ zendi_convert_scalar_to_number (op2 , op2_copy , result );
932
+ } else {
933
+ zendi_convert_scalar_to_number (op1 , op1_copy , result );
934
+ op2 = op1 ;
935
+ }
931
936
converted = 1 ;
932
937
} else {
933
938
zend_throw_error (NULL , "Unsupported operand types" );
@@ -979,8 +984,13 @@ ZEND_API int ZEND_FASTCALL sub_function(zval *result, zval *op1, zval *op2) /* {
979
984
} else if (!converted ) {
980
985
ZEND_TRY_BINARY_OBJECT_OPERATION (ZEND_SUB , sub_function );
981
986
982
- zendi_convert_scalar_to_number (op1 , op1_copy , result );
983
- zendi_convert_scalar_to_number (op2 , op2_copy , result );
987
+ if (EXPECTED (op1 != op2 )) {
988
+ zendi_convert_scalar_to_number (op1 , op1_copy , result );
989
+ zendi_convert_scalar_to_number (op2 , op2_copy , result );
990
+ } else {
991
+ zendi_convert_scalar_to_number (op1 , op1_copy , result );
992
+ op2 = op1 ;
993
+ }
984
994
converted = 1 ;
985
995
} else {
986
996
zend_throw_error (NULL , "Unsupported operand types" );
@@ -1026,8 +1036,13 @@ ZEND_API int ZEND_FASTCALL mul_function(zval *result, zval *op1, zval *op2) /* {
1026
1036
} else if (!converted ) {
1027
1037
ZEND_TRY_BINARY_OBJECT_OPERATION (ZEND_MUL , mul_function );
1028
1038
1029
- zendi_convert_scalar_to_number (op1 , op1_copy , result );
1030
- zendi_convert_scalar_to_number (op2 , op2_copy , result );
1039
+ if (EXPECTED (op1 != op2 )) {
1040
+ zendi_convert_scalar_to_number (op1 , op1_copy , result );
1041
+ zendi_convert_scalar_to_number (op2 , op2_copy , result );
1042
+ } else {
1043
+ zendi_convert_scalar_to_number (op1 , op1_copy , result );
1044
+ op2 = op1 ;
1045
+ }
1031
1046
converted = 1 ;
1032
1047
} else {
1033
1048
zend_throw_error (NULL , "Unsupported operand types" );
@@ -1104,17 +1119,27 @@ ZEND_API int ZEND_FASTCALL pow_function(zval *result, zval *op1, zval *op2) /* {
1104
1119
} else if (!converted ) {
1105
1120
ZEND_TRY_BINARY_OBJECT_OPERATION (ZEND_POW , pow_function );
1106
1121
1107
- if (Z_TYPE_P (op1 ) == IS_ARRAY ) {
1108
- ZVAL_LONG (result , 0 );
1109
- return SUCCESS ;
1110
- } else {
1111
- zendi_convert_scalar_to_number (op1 , op1_copy , result );
1112
- }
1113
- if (Z_TYPE_P (op2 ) == IS_ARRAY ) {
1114
- ZVAL_LONG (result , 1L );
1115
- return SUCCESS ;
1122
+ if (EXPECTED (op1 != op2 )) {
1123
+ if (Z_TYPE_P (op1 ) == IS_ARRAY ) {
1124
+ ZVAL_LONG (result , 0 );
1125
+ return SUCCESS ;
1126
+ } else {
1127
+ zendi_convert_scalar_to_number (op1 , op1_copy , result );
1128
+ }
1129
+ if (Z_TYPE_P (op2 ) == IS_ARRAY ) {
1130
+ ZVAL_LONG (result , 1L );
1131
+ return SUCCESS ;
1132
+ } else {
1133
+ zendi_convert_scalar_to_number (op2 , op2_copy , result );
1134
+ }
1116
1135
} else {
1117
- zendi_convert_scalar_to_number (op2 , op2_copy , result );
1136
+ if (Z_TYPE_P (op1 ) == IS_ARRAY ) {
1137
+ ZVAL_LONG (result , 0 );
1138
+ return SUCCESS ;
1139
+ } else {
1140
+ zendi_convert_scalar_to_number (op1 , op1_copy , result );
1141
+ }
1142
+ op2 = op1 ;
1118
1143
}
1119
1144
converted = 1 ;
1120
1145
} else {
@@ -1178,9 +1203,13 @@ ZEND_API int ZEND_FASTCALL div_function(zval *result, zval *op1, zval *op2) /* {
1178
1203
op2 = Z_REFVAL_P (op2 );
1179
1204
} else if (!converted ) {
1180
1205
ZEND_TRY_BINARY_OBJECT_OPERATION (ZEND_DIV , div_function );
1181
-
1182
- zendi_convert_scalar_to_number (op1 , op1_copy , result );
1183
- zendi_convert_scalar_to_number (op2 , op2_copy , result );
1206
+ if (EXPECTED (op1 != op2 )) {
1207
+ zendi_convert_scalar_to_number (op1 , op1_copy , result );
1208
+ zendi_convert_scalar_to_number (op2 , op2_copy , result );
1209
+ } else {
1210
+ zendi_convert_scalar_to_number (op1 , op1_copy , result );
1211
+ op2 = op1 ;
1212
+ }
1184
1213
converted = 1 ;
1185
1214
} else {
1186
1215
zend_throw_error (NULL , "Unsupported operand types" );
0 commit comments