Skip to content

Commit 9c0afc8

Browse files
committed
Remove op_func from TRY_BINARY_OP1 macro
And move the operator overloading helpers into zend_operators.c, there's no reason for them to be in the header.
1 parent f973b71 commit 9c0afc8

File tree

2 files changed

+42
-42
lines changed

2 files changed

+42
-42
lines changed

Zend/zend_operators.c

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,34 @@ static zend_always_inline int zendi_try_convert_scalar_to_number(zval *op, zval
276276
}
277277
}
278278

279-
#define convert_op1_op2_long(op1, op1_lval, op2, op2_lval, result, op, op_func) \
279+
#define ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(opcode) \
280+
if (UNEXPECTED(Z_TYPE_P(op1) == IS_OBJECT) \
281+
&& UNEXPECTED(Z_OBJ_HANDLER_P(op1, do_operation))) { \
282+
if (EXPECTED(SUCCESS == Z_OBJ_HANDLER_P(op1, do_operation)(opcode, result, op1, op2))) { \
283+
return SUCCESS; \
284+
} \
285+
}
286+
287+
#define ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(opcode) \
288+
if (UNEXPECTED(Z_TYPE_P(op2) == IS_OBJECT) \
289+
&& UNEXPECTED(Z_OBJ_HANDLER_P(op2, do_operation)) \
290+
&& EXPECTED(SUCCESS == Z_OBJ_HANDLER_P(op2, do_operation)(opcode, result, op1, op2))) { \
291+
return SUCCESS; \
292+
}
293+
294+
#define ZEND_TRY_BINARY_OBJECT_OPERATION(opcode) \
295+
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(opcode) \
296+
else \
297+
ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(opcode)
298+
299+
#define ZEND_TRY_UNARY_OBJECT_OPERATION(opcode) \
300+
if (UNEXPECTED(Z_TYPE_P(op1) == IS_OBJECT) \
301+
&& UNEXPECTED(Z_OBJ_HANDLER_P(op1, do_operation)) \
302+
&& EXPECTED(SUCCESS == Z_OBJ_HANDLER_P(op1, do_operation)(opcode, result, op1, NULL))) { \
303+
return SUCCESS; \
304+
}
305+
306+
#define convert_op1_op2_long(op1, op1_lval, op2, op2_lval, result, op) \
280307
do { \
281308
if (UNEXPECTED(Z_TYPE_P(op1) != IS_LONG)) { \
282309
if (Z_ISREF_P(op1)) { \
@@ -286,7 +313,7 @@ static zend_always_inline int zendi_try_convert_scalar_to_number(zval *op, zval
286313
break; \
287314
} \
288315
} \
289-
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(op, op_func); \
316+
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(op); \
290317
op1_lval = _zval_get_long_func_noisy(op1); \
291318
if (UNEXPECTED(EG(exception))) { \
292319
if (result != op1) { \
@@ -959,7 +986,7 @@ static zend_never_inline int ZEND_FASTCALL add_function_slow(zval *result, zval
959986
return SUCCESS;
960987
}
961988

962-
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_ADD, add_function);
989+
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_ADD);
963990

964991
zval op1_copy, op2_copy;
965992
if (UNEXPECTED(zendi_try_convert_scalar_to_number(op1, &op1_copy) == FAILURE)
@@ -1024,7 +1051,7 @@ static zend_never_inline int ZEND_FASTCALL sub_function_slow(zval *result, zval
10241051
return SUCCESS;
10251052
}
10261053

1027-
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_SUB, sub_function);
1054+
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_SUB);
10281055

10291056
zval op1_copy, op2_copy;
10301057
if (UNEXPECTED(zendi_try_convert_scalar_to_number(op1, &op1_copy) == FAILURE)
@@ -1093,7 +1120,7 @@ static zend_never_inline int ZEND_FASTCALL mul_function_slow(zval *result, zval
10931120
return SUCCESS;
10941121
}
10951122

1096-
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_MUL, mul_function);
1123+
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_MUL);
10971124

10981125
zval op1_copy, op2_copy;
10991126
if (UNEXPECTED(zendi_try_convert_scalar_to_number(op1, &op1_copy) == FAILURE)
@@ -1194,7 +1221,7 @@ ZEND_API int ZEND_FASTCALL pow_function(zval *result, zval *op1, zval *op2) /* {
11941221
return SUCCESS;
11951222
}
11961223

1197-
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_POW, pow_function);
1224+
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_POW);
11981225

11991226
zval op1_copy, op2_copy;
12001227
if (UNEXPECTED(zendi_try_convert_scalar_to_number(op1, &op1_copy) == FAILURE)
@@ -1274,7 +1301,7 @@ ZEND_API int ZEND_FASTCALL div_function(zval *result, zval *op1, zval *op2) /* {
12741301
return SUCCESS;
12751302
}
12761303

1277-
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_DIV, div_function);
1304+
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_DIV);
12781305

12791306
zval op1_copy, op2_copy;
12801307
if (UNEXPECTED(zendi_try_convert_scalar_to_number(op1, &op1_copy) == FAILURE)
@@ -1304,7 +1331,7 @@ ZEND_API int ZEND_FASTCALL mod_function(zval *result, zval *op1, zval *op2) /* {
13041331
{
13051332
zend_long op1_lval, op2_lval;
13061333

1307-
convert_op1_op2_long(op1, op1_lval, op2, op2_lval, result, ZEND_MOD, mod_function);
1334+
convert_op1_op2_long(op1, op1_lval, op2, op2_lval, result, ZEND_MOD);
13081335

13091336
if (op2_lval == 0) {
13101337
/* modulus by zero */
@@ -1354,7 +1381,7 @@ ZEND_API int ZEND_FASTCALL boolean_xor_function(zval *result, zval *op1, zval *o
13541381
break;
13551382
}
13561383
}
1357-
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(ZEND_BOOL_XOR, boolean_xor_function);
1384+
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(ZEND_BOOL_XOR);
13581385
op1_val = zval_is_true(op1);
13591386
}
13601387
} while (0);
@@ -1495,7 +1522,7 @@ ZEND_API int ZEND_FASTCALL bitwise_or_function(zval *result, zval *op1, zval *op
14951522
}
14961523

14971524
if (UNEXPECTED(Z_TYPE_P(op1) != IS_LONG)) {
1498-
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(ZEND_BW_OR, bitwise_or_function);
1525+
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(ZEND_BW_OR);
14991526
op1_lval = _zval_get_long_func_noisy(op1);
15001527
if (UNEXPECTED(EG(exception))) {
15011528
if (result != op1) {
@@ -1573,7 +1600,7 @@ ZEND_API int ZEND_FASTCALL bitwise_and_function(zval *result, zval *op1, zval *o
15731600
}
15741601

15751602
if (UNEXPECTED(Z_TYPE_P(op1) != IS_LONG)) {
1576-
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(ZEND_BW_AND, bitwise_and_function);
1603+
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(ZEND_BW_AND);
15771604
op1_lval = _zval_get_long_func_noisy(op1);
15781605
if (UNEXPECTED(EG(exception))) {
15791606
if (result != op1) {
@@ -1651,7 +1678,7 @@ ZEND_API int ZEND_FASTCALL bitwise_xor_function(zval *result, zval *op1, zval *o
16511678
}
16521679

16531680
if (UNEXPECTED(Z_TYPE_P(op1) != IS_LONG)) {
1654-
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(ZEND_BW_XOR, bitwise_xor_function);
1681+
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(ZEND_BW_XOR);
16551682
op1_lval = _zval_get_long_func_noisy(op1);
16561683
if (UNEXPECTED(EG(exception))) {
16571684
if (result != op1) {
@@ -1687,7 +1714,7 @@ ZEND_API int ZEND_FASTCALL shift_left_function(zval *result, zval *op1, zval *op
16871714
{
16881715
zend_long op1_lval, op2_lval;
16891716

1690-
convert_op1_op2_long(op1, op1_lval, op2, op2_lval, result, ZEND_SL, shift_left_function);
1717+
convert_op1_op2_long(op1, op1_lval, op2, op2_lval, result, ZEND_SL);
16911718

16921719
/* prevent wrapping quirkiness on some processors where << 64 + x == << x */
16931720
if (UNEXPECTED((zend_ulong)op2_lval >= SIZEOF_ZEND_LONG * 8)) {
@@ -1724,7 +1751,7 @@ ZEND_API int ZEND_FASTCALL shift_right_function(zval *result, zval *op1, zval *o
17241751
{
17251752
zend_long op1_lval, op2_lval;
17261753

1727-
convert_op1_op2_long(op1, op1_lval, op2, op2_lval, result, ZEND_SR, shift_right_function);
1754+
convert_op1_op2_long(op1, op1_lval, op2, op2_lval, result, ZEND_SR);
17281755

17291756
/* prevent wrapping quirkiness on some processors where >> 64 + x == >> x */
17301757
if (UNEXPECTED((zend_ulong)op2_lval >= SIZEOF_ZEND_LONG * 8)) {
@@ -1770,7 +1797,7 @@ ZEND_API int ZEND_FASTCALL concat_function(zval *result, zval *op1, zval *op2) /
17701797
op1 = Z_REFVAL_P(op1);
17711798
if (Z_TYPE_P(op1) == IS_STRING) break;
17721799
}
1773-
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_CONCAT, concat_function);
1800+
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_CONCAT);
17741801
ZVAL_STR(&op1_copy, zval_get_string_func(op1));
17751802
if (UNEXPECTED(EG(exception))) {
17761803
zval_ptr_dtor_str(&op1_copy);

Zend/zend_operators.h

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -919,33 +919,6 @@ static zend_always_inline zend_bool fast_is_not_identical_function(zval *op1, zv
919919
return !zend_is_identical(op1, op2);
920920
}
921921

922-
#define ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(opcode, binary_op) \
923-
if (UNEXPECTED(Z_TYPE_P(op1) == IS_OBJECT) \
924-
&& UNEXPECTED(Z_OBJ_HANDLER_P(op1, do_operation))) { \
925-
if (EXPECTED(SUCCESS == Z_OBJ_HANDLER_P(op1, do_operation)(opcode, result, op1, op2))) { \
926-
return SUCCESS; \
927-
} \
928-
}
929-
930-
#define ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(opcode) \
931-
if (UNEXPECTED(Z_TYPE_P(op2) == IS_OBJECT) \
932-
&& UNEXPECTED(Z_OBJ_HANDLER_P(op2, do_operation)) \
933-
&& EXPECTED(SUCCESS == Z_OBJ_HANDLER_P(op2, do_operation)(opcode, result, op1, op2))) { \
934-
return SUCCESS; \
935-
}
936-
937-
#define ZEND_TRY_BINARY_OBJECT_OPERATION(opcode, binary_op) \
938-
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(opcode, binary_op) \
939-
else \
940-
ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(opcode)
941-
942-
#define ZEND_TRY_UNARY_OBJECT_OPERATION(opcode) \
943-
if (UNEXPECTED(Z_TYPE_P(op1) == IS_OBJECT) \
944-
&& UNEXPECTED(Z_OBJ_HANDLER_P(op1, do_operation)) \
945-
&& EXPECTED(SUCCESS == Z_OBJ_HANDLER_P(op1, do_operation)(opcode, result, op1, NULL))) { \
946-
return SUCCESS; \
947-
}
948-
949922
/* buf points to the END of the buffer */
950923
static zend_always_inline char *zend_print_ulong_to_buf(char *buf, zend_ulong num) {
951924
*buf = '\0';

0 commit comments

Comments
 (0)