From d005ab20ea078e75632de7f3ae2b10d8ba383804 Mon Sep 17 00:00:00 2001 From: David CARLIER Date: Sat, 1 Jun 2024 19:36:40 +0100 Subject: [PATCH] ext/intl converter and formatter using fast ZPP (#14413) --- ext/intl/converter/converter.c | 107 ++++++++++++++-------------- ext/intl/formatter/formatter_main.c | 16 ++--- 2 files changed, 61 insertions(+), 62 deletions(-) diff --git a/ext/intl/converter/converter.c b/ext/intl/converter/converter.c index 13549564389..db2b73e2cb6 100644 --- a/ext/intl/converter/converter.c +++ b/ext/intl/converter/converter.c @@ -109,10 +109,12 @@ PHP_METHOD(UConverter, toUCallback) { zend_string *source, *codeUnits; zval *error; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "lSSz", - &reason, &source, &codeUnits, &error) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(4, 4) + Z_PARAM_LONG(reason) + Z_PARAM_STR(source) + Z_PARAM_STR(codeUnits) + Z_PARAM_ZVAL(error) + ZEND_PARSE_PARAMETERS_END(); php_converter_default_callback(return_value, ZEND_THIS, reason, error); } @@ -124,10 +126,12 @@ PHP_METHOD(UConverter, fromUCallback) { zval *source, *error; zend_long codePoint; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "lalz", - &reason, &source, &codePoint, &error) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(4, 4) + Z_PARAM_LONG(reason) + Z_PARAM_ARRAY(source) + Z_PARAM_LONG(codePoint) + Z_PARAM_ZVAL(error) + ZEND_PARSE_PARAMETERS_END(); php_converter_default_callback(return_value, ZEND_THIS, reason, error); } @@ -333,7 +337,7 @@ static void php_converter_from_u_callback(const void *context, /* {{{ php_converter_set_callbacks */ static inline bool php_converter_set_callbacks(php_converter_object *objval, UConverter *cnv) { - bool ret = 1; + bool ret = true; UErrorCode error = U_ZERO_ERROR; if (objval->obj.ce == php_converter_ce) { @@ -403,9 +407,10 @@ static void php_converter_do_set_encoding(UConverter **pcnv, INTERNAL_FUNCTION_P char *enc; size_t enc_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &enc, &enc_len) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_STRING(enc, enc_len) + ZEND_PARSE_PARAMETERS_END(); + intl_errors_reset(&objval->error); RETURN_BOOL(php_converter_set_encoding(objval, pcnv, enc, enc_len)); @@ -430,9 +435,7 @@ PHP_METHOD(UConverter, setDestinationEncoding) { static void php_converter_do_get_encoding(php_converter_object *objval, UConverter *cnv, INTERNAL_FUNCTION_PARAMETERS) { const char *name; - if (zend_parse_parameters_none() == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_NONE(); intl_errors_reset(&objval->error); @@ -468,9 +471,7 @@ PHP_METHOD(UConverter, getDestinationEncoding) { static void php_converter_do_get_type(php_converter_object *objval, UConverter *cnv, INTERNAL_FUNCTION_PARAMETERS) { UConverterType t; - if (zend_parse_parameters_none() == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_NONE(); intl_errors_reset(&objval->error); if (!cnv) { @@ -535,9 +536,11 @@ PHP_METHOD(UConverter, __construct) { intl_error_reset(NULL); - if (zend_parse_parameters(ZEND_NUM_ARGS(), "|s!s!", &dest, &dest_len, &src, &src_len) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(0, 2) + Z_PARAM_OPTIONAL + Z_PARAM_STRING_OR_NULL(dest, dest_len) + Z_PARAM_STRING_OR_NULL(src, src_len) + ZEND_PARSE_PARAMETERS_END(); php_converter_set_encoding(objval, &(objval->src), src, src_len ); php_converter_set_encoding(objval, &(objval->dest), dest, dest_len); @@ -553,9 +556,10 @@ PHP_METHOD(UConverter, setSubstChars) { size_t chars_len; int ret = 1; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &chars, &chars_len) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_STRING(chars, chars_len) + ZEND_PARSE_PARAMETERS_END(); + intl_errors_reset(&objval->error); if (objval->src) { @@ -593,9 +597,7 @@ PHP_METHOD(UConverter, getSubstChars) { int8_t chars_len = sizeof(chars); UErrorCode error = U_ZERO_ERROR; - if (zend_parse_parameters_none() == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_NONE(); intl_errors_reset(&objval->error); if (!objval->src) { @@ -678,9 +680,9 @@ static zend_string* php_converter_do_convert(UConverter *dest_cnv, PHP_METHOD(UConverter, reasonText) { zend_long reason; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &reason) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_LONG(reason) + ZEND_PARSE_PARAMETERS_END(); intl_error_reset(NULL); switch (reason) { @@ -703,12 +705,13 @@ PHP_METHOD(UConverter, convert) { char *str; size_t str_len; zend_string *ret; - bool reverse = 0; + bool reverse = false; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|b", - &str, &str_len, &reverse) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 2) + Z_PARAM_STRING(str, str_len) + Z_PARAM_OPTIONAL + Z_PARAM_BOOL(reverse) + ZEND_PARSE_PARAMETERS_END(); intl_errors_reset(&objval->error); ret = php_converter_do_convert(reverse ? objval->src : objval->dest, @@ -730,10 +733,13 @@ PHP_METHOD(UConverter, transcode) { zval *options = NULL; UConverter *src_cnv = NULL, *dest_cnv = NULL; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "sss|a!", - &str, &str_len, &dest, &dest_len, &src, &src_len, &options) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(3, 4) + Z_PARAM_STRING(str, str_len) + Z_PARAM_STRING(dest, dest_len) + Z_PARAM_STRING(src, src_len) + Z_PARAM_OPTIONAL + Z_PARAM_ARRAY_OR_NULL(options) + ZEND_PARSE_PARAMETERS_END(); intl_error_reset(NULL); if (php_converter_set_encoding(NULL, &src_cnv, src, src_len) && @@ -784,9 +790,7 @@ PHP_METHOD(UConverter, transcode) { PHP_METHOD(UConverter, getErrorCode) { php_converter_object *objval = CONV_GET(ZEND_THIS); - if (zend_parse_parameters_none() == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_NONE(); RETURN_LONG(intl_error_get_code(&(objval->error))); } @@ -796,9 +800,7 @@ PHP_METHOD(UConverter, getErrorCode) { PHP_METHOD(UConverter, getErrorMessage) { php_converter_object *objval = CONV_GET(ZEND_THIS); - if (zend_parse_parameters_none() == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_NONE(); zend_string *message = intl_error_get_message(&(objval->error)); if (message) { @@ -814,9 +816,8 @@ PHP_METHOD(UConverter, getAvailable) { int32_t i, count = ucnv_countAvailable(); - if (zend_parse_parameters_none() == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_NONE(); + intl_error_reset(NULL); array_init(return_value); @@ -834,9 +835,9 @@ PHP_METHOD(UConverter, getAliases) { UErrorCode error = U_ZERO_ERROR; uint16_t i, count; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name, &name_len) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_STRING(name, name_len) + ZEND_PARSE_PARAMETERS_END(); intl_error_reset(NULL); count = ucnv_countAliases(name, &error); @@ -865,9 +866,7 @@ PHP_METHOD(UConverter, getAliases) { PHP_METHOD(UConverter, getStandards) { uint16_t i, count; - if (zend_parse_parameters_none() == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_NONE(); intl_error_reset(NULL); array_init(return_value); diff --git a/ext/intl/formatter/formatter_main.c b/ext/intl/formatter/formatter_main.c index 53c5a3e9be2..05464310f0c 100644 --- a/ext/intl/formatter/formatter_main.c +++ b/ext/intl/formatter/formatter_main.c @@ -26,7 +26,7 @@ /* {{{ */ static int numfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_error_handling *error_handling, bool *error_handling_replaced) { - const char* locale; + char* locale; char* pattern = NULL; size_t locale_len = 0, pattern_len = 0; zend_long style; @@ -34,12 +34,12 @@ static int numfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_error_handling *error_ int32_t spattern_len = 0; FORMATTER_METHOD_INIT_VARS; - /* Parse parameters. */ - if( zend_parse_parameters( ZEND_NUM_ARGS(), "sl|s!", - &locale, &locale_len, &style, &pattern, &pattern_len ) == FAILURE ) - { - return FAILURE; - } + ZEND_PARSE_PARAMETERS_START(2, 3) + Z_PARAM_STRING(locale, locale_len) + Z_PARAM_LONG(style) + Z_PARAM_OPTIONAL + Z_PARAM_STRING_OR_NULL(pattern, pattern_len) + ZEND_PARSE_PARAMETERS_END_EX(return FAILURE); if (error_handling != NULL) { zend_replace_error_handling(EH_THROW, IntlException_ce_ptr, error_handling); @@ -61,7 +61,7 @@ static int numfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_error_handling *error_ } if(locale_len == 0) { - locale = intl_locale_get_default(); + locale = (char *)intl_locale_get_default(); } if (strlen(uloc_getISO3Language(locale)) == 0) {