@@ -231,6 +231,16 @@ static bool gmp_zend_parse_arg_into_mpz(
231
231
*/
232
232
typedef void (* gmp_unary_op_t )(mpz_ptr , mpz_srcptr );
233
233
234
+ #define GMP_UNARY_OP_FUNCTION (name ) \
235
+ ZEND_FUNCTION(gmp_##name) { \
236
+ mpz_ptr gmpnum_a, gmpnum_result; \
237
+ ZEND_PARSE_PARAMETERS_START(1, 1) \
238
+ GMP_Z_PARAM_INTO_MPZ_PTR(gmpnum_a) \
239
+ ZEND_PARSE_PARAMETERS_END(); \
240
+ INIT_GMP_RETVAL(gmpnum_result); \
241
+ mpz_##name(gmpnum_result, gmpnum_a); \
242
+ }
243
+
234
244
typedef void (* gmp_unary_ui_op_t )(mpz_ptr , gmp_ulong );
235
245
236
246
typedef void (* gmp_binary_op_t )(mpz_ptr , mpz_srcptr , mpz_srcptr );
@@ -274,9 +284,6 @@ static void gmp_mpz_gcd_ui(mpz_ptr a, mpz_srcptr b, gmp_ulong c) {
274
284
#define gmp_binary_ui_op_no_zero (op , uop ) \
275
285
_gmp_binary_ui_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op, uop, 1)
276
286
277
- /* Unary operations */
278
- #define gmp_unary_op (op ) _gmp_unary_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op)
279
-
280
287
static void gmp_free_object_storage (zend_object * obj ) /* {{{ */
281
288
{
282
289
gmp_object * intern = GET_GMP_OBJECT_FROM_OBJ (obj );
@@ -959,19 +966,6 @@ static inline void gmp_zval_unary_op(zval *return_value, zval *a_arg, gmp_unary_
959
966
}
960
967
/* }}} */
961
968
962
- /* {{{ _gmp_unary_op */
963
- static inline void _gmp_unary_op (INTERNAL_FUNCTION_PARAMETERS , gmp_unary_op_t gmp_op )
964
- {
965
- zval * a_arg ;
966
-
967
- ZEND_PARSE_PARAMETERS_START (1 , 1 )
968
- Z_PARAM_ZVAL (a_arg )
969
- ZEND_PARSE_PARAMETERS_END ();
970
-
971
- gmp_zval_unary_op (return_value , a_arg , gmp_op );
972
- }
973
- /* }}} */
974
-
975
969
static bool gmp_verify_base (zend_long base , uint32_t arg_num )
976
970
{
977
971
if (base && (base < 2 || base > GMP_MAX_BASE )) {
@@ -1298,18 +1292,13 @@ ZEND_FUNCTION(gmp_divexact)
1298
1292
/* }}} */
1299
1293
1300
1294
/* {{{ Negates a number */
1301
- ZEND_FUNCTION (gmp_neg )
1302
- {
1303
- gmp_unary_op (mpz_neg );
1304
- }
1305
- /* }}} */
1306
-
1295
+ GMP_UNARY_OP_FUNCTION (neg );
1307
1296
/* {{{ Calculates absolute value */
1308
- ZEND_FUNCTION ( gmp_abs )
1309
- {
1310
- gmp_unary_op ( mpz_abs );
1311
- }
1312
- /* }}} */
1297
+ GMP_UNARY_OP_FUNCTION ( abs );
1298
+ /* {{{ Calculates one's complement of a */
1299
+ GMP_UNARY_OP_FUNCTION ( com );
1300
+ /* {{{ Finds next prime of a */
1301
+ GMP_UNARY_OP_FUNCTION ( nextprime );
1313
1302
1314
1303
/* {{{ Calculates factorial function */
1315
1304
ZEND_FUNCTION (gmp_fact )
@@ -1847,20 +1836,6 @@ ZEND_FUNCTION(gmp_or)
1847
1836
}
1848
1837
/* }}} */
1849
1838
1850
- /* {{{ Calculates one's complement of a */
1851
- ZEND_FUNCTION (gmp_com )
1852
- {
1853
- gmp_unary_op (mpz_com );
1854
- }
1855
- /* }}} */
1856
-
1857
- /* {{{ Finds next prime of a */
1858
- ZEND_FUNCTION (gmp_nextprime )
1859
- {
1860
- gmp_unary_op (mpz_nextprime );
1861
- }
1862
- /* }}} */
1863
-
1864
1839
/* {{{ Calculates logical exclusive OR of a and b */
1865
1840
ZEND_FUNCTION (gmp_xor )
1866
1841
{
0 commit comments