From b6e9c76d67a8cfb397598ac354d9aeb9609ba1d2 Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Sat, 28 Jun 2014 12:20:35 +0800 Subject: Refactoring ext/intl (only compilerable now, far to finish :<) --- ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp') diff --git a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp index 454e5249fd..0871f4416f 100644 --- a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp +++ b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp @@ -66,7 +66,7 @@ static void _php_intlrbbi_constructor_body(INTERNAL_FUNCTION_PARAMETERS) smart_str parse_error_str; parse_error_str = intl_parse_error_to_string(&parseError); spprintf(&msg, 0, "rbbi_create_instance: unable to create " - "RuleBasedBreakIterator from rules (%s)", parse_error_str.c); + "RuleBasedBreakIterator from rules (%s)", parse_error_str.s? parse_error_str.s->val : ""); smart_str_free(&parse_error_str); intl_error_set_custom_msg(NULL, msg, 1 TSRMLS_CC); efree(msg); @@ -101,7 +101,7 @@ U_CFUNC PHP_METHOD(IntlRuleBasedBreakIterator, __construct) _php_intlrbbi_constructor_body(INTERNAL_FUNCTION_PARAM_PASSTHRU); if (Z_TYPE_P(return_value) == IS_NULL) { - zend_object_store_ctor_failed(&orig_this TSRMLS_CC); + zend_object_store_ctor_failed(Z_OBJ(orig_this) TSRMLS_CC); zval_dtor(&orig_this); } } @@ -119,17 +119,20 @@ U_CFUNC PHP_FUNCTION(rbbi_get_rules) BREAKITER_METHOD_FETCH_OBJECT; + char *str; + int str_len; const UnicodeString rules = fetch_rbbi(bio)->getRules(); - Z_TYPE_P(return_value) = IS_STRING; - if (intl_charFromString(rules, &Z_STRVAL_P(return_value), - &Z_STRLEN_P(return_value), BREAKITER_ERROR_CODE_P(bio)) == FAILURE) + if (intl_charFromString(rules, &str, &str_len, BREAKITER_ERROR_CODE_P(bio)) == FAILURE) { intl_errors_set(BREAKITER_ERROR_P(bio), BREAKITER_ERROR_CODE(bio), "rbbi_hash_code: Error converting result to UTF-8 string", 0 TSRMLS_CC); RETURN_FALSE; } + RETVAL_STRINGL(str, str_len); + //??? + efree(str); } U_CFUNC PHP_FUNCTION(rbbi_get_rule_status) -- cgit v1.2.1 From 9fb8c16b6cd5f8c47ab6b83b821f0bf79448bcac Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Sun, 29 Jun 2014 15:24:00 +0800 Subject: Fixed temporarily un-expected object re-init --- .../breakiterator/rulebasedbreakiterator_methods.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp') diff --git a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp index 0871f4416f..36a3a8d20d 100644 --- a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp +++ b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp @@ -42,7 +42,8 @@ static void _php_intlrbbi_constructor_body(INTERNAL_FUNCTION_PARAMETERS) &rules, &rules_len, &compiled) == FAILURE) { intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, "rbbi_create_instance: bad arguments", 0 TSRMLS_CC); - RETURN_NULL(); + Z_OBJ_P(return_value) == NULL; + return; } // instantiation of ICU object @@ -71,7 +72,8 @@ static void _php_intlrbbi_constructor_body(INTERNAL_FUNCTION_PARAMETERS) intl_error_set_custom_msg(NULL, msg, 1 TSRMLS_CC); efree(msg); delete rbbi; - RETURN_NULL(); + Z_OBJ_P(return_value) == NULL; + return; } } else { // compiled #if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 48 @@ -79,17 +81,18 @@ static void _php_intlrbbi_constructor_body(INTERNAL_FUNCTION_PARAMETERS) if (U_FAILURE(status)) { intl_error_set(NULL, status, "rbbi_create_instance: unable to " "create instance from compiled rules", 0 TSRMLS_CC); - delete rbbi; - RETURN_NULL(); + Z_OBJ_P(return_value) == NULL; + return; } #else intl_error_set(NULL, U_UNSUPPORTED_ERROR, "rbbi_create_instance: " "compiled rules require ICU >= 4.8", 0 TSRMLS_CC); - RETURN_NULL(); + Z_OBJ_P(return_value) == NULL; + return; #endif } - breakiterator_object_create(return_value, rbbi TSRMLS_CC); + breakiterator_object_create(return_value, rbbi, 0 TSRMLS_CC); } U_CFUNC PHP_METHOD(IntlRuleBasedBreakIterator, __construct) @@ -97,10 +100,9 @@ U_CFUNC PHP_METHOD(IntlRuleBasedBreakIterator, __construct) zval orig_this = *getThis(); return_value = getThis(); - //changes this to IS_NULL (without first destroying) if there's an error _php_intlrbbi_constructor_body(INTERNAL_FUNCTION_PARAM_PASSTHRU); - if (Z_TYPE_P(return_value) == IS_NULL) { + if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) { zend_object_store_ctor_failed(Z_OBJ(orig_this) TSRMLS_CC); zval_dtor(&orig_this); } -- cgit v1.2.1 From 424894de021f1be6fce205bea46de89838c8e600 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 30 Jun 2014 18:08:16 +0400 Subject: Fixed compilation problems --- ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp') diff --git a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp index 36a3a8d20d..c13a432605 100644 --- a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp +++ b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp @@ -217,10 +217,10 @@ U_CFUNC PHP_FUNCTION(rbbi_get_binary_rules) RETURN_FALSE; } - char *ret_rules = static_cast(emalloc(rules_len + 1)); - memcpy(ret_rules, rules, rules_len); - ret_rules[rules_len] = '\0'; + zend_string *ret_rules = STR_ALLOC(rules_len, 0); + memcpy(ret_rules->val, rules, rules_len); + ret_rules->val[rules_len] = '\0'; - RETURN_STRINGL(ret_rules, rules_len, 0); + RETURN_STR(ret_rules); } #endif -- cgit v1.2.1 From ca414c69040c66642b38d9f3aebe343265adc3f5 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 9 Jul 2014 00:15:27 +0400 Subject: Typo --- ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp') diff --git a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp index c13a432605..e171cf76ab 100644 --- a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp +++ b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp @@ -42,7 +42,7 @@ static void _php_intlrbbi_constructor_body(INTERNAL_FUNCTION_PARAMETERS) &rules, &rules_len, &compiled) == FAILURE) { intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, "rbbi_create_instance: bad arguments", 0 TSRMLS_CC); - Z_OBJ_P(return_value) == NULL; + Z_OBJ_P(return_value) = NULL; return; } @@ -72,7 +72,7 @@ static void _php_intlrbbi_constructor_body(INTERNAL_FUNCTION_PARAMETERS) intl_error_set_custom_msg(NULL, msg, 1 TSRMLS_CC); efree(msg); delete rbbi; - Z_OBJ_P(return_value) == NULL; + Z_OBJ_P(return_value) = NULL; return; } } else { // compiled @@ -81,13 +81,13 @@ static void _php_intlrbbi_constructor_body(INTERNAL_FUNCTION_PARAMETERS) if (U_FAILURE(status)) { intl_error_set(NULL, status, "rbbi_create_instance: unable to " "create instance from compiled rules", 0 TSRMLS_CC); - Z_OBJ_P(return_value) == NULL; + Z_OBJ_P(return_value) = NULL; return; } #else intl_error_set(NULL, U_UNSUPPORTED_ERROR, "rbbi_create_instance: " "compiled rules require ICU >= 4.8", 0 TSRMLS_CC); - Z_OBJ_P(return_value) == NULL; + Z_OBJ_P(return_value) = NULL; return; #endif } -- cgit v1.2.1 From 1dd07d6bf438a6a60f2fefcdd7e5c45045ef88f9 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 9 Jul 2014 11:57:42 +0400 Subject: Partial fix that allows internal constructors to set $this to null. The address of $this passed to drectly called internal constructor in execute_data->return_value. Internal constructors should use ZEND_CTOR_MAKE_NULL() macro (insted of previous ZEND_NULL(EG(This))) to do the work. This patch doesn't fix the problem for indirectly called constructors. e.g. parant::__construct(). --- ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp') diff --git a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp index e171cf76ab..50df1a61ab 100644 --- a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp +++ b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp @@ -105,6 +105,7 @@ U_CFUNC PHP_METHOD(IntlRuleBasedBreakIterator, __construct) if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) { zend_object_store_ctor_failed(Z_OBJ(orig_this) TSRMLS_CC); zval_dtor(&orig_this); + ZEND_CTOR_MAKE_NULL(); } } -- cgit v1.2.1 From 63d3f0b844b3a5f1c94be3c97bca29235dc2b3fc Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Tue, 19 Aug 2014 08:07:31 +0200 Subject: basic macro replacements, all at once --- ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp') diff --git a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp index 50df1a61ab..5755b0adb8 100644 --- a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp +++ b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp @@ -151,7 +151,7 @@ U_CFUNC PHP_FUNCTION(rbbi_get_rule_status) BREAKITER_METHOD_FETCH_OBJECT; - RETURN_LONG(fetch_rbbi(bio)->getRuleStatus()); + RETURN_INT(fetch_rbbi(bio)->getRuleStatus()); } U_CFUNC PHP_FUNCTION(rbbi_get_rule_status_vec) @@ -189,7 +189,7 @@ U_CFUNC PHP_FUNCTION(rbbi_get_rule_status_vec) array_init_size(return_value, num_rules); for (int32_t i = 0; i < num_rules; i++) { - add_next_index_long(return_value, rules[i]); + add_next_index_int(return_value, rules[i]); } delete[] rules; } -- cgit v1.2.1 From c3e3c98ec666812daaaca896cf5ef758a8a6df14 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Mon, 25 Aug 2014 19:24:55 +0200 Subject: master renames phase 1 --- ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp') diff --git a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp index 5755b0adb8..098f8ab3cc 100644 --- a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp +++ b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp @@ -151,7 +151,7 @@ U_CFUNC PHP_FUNCTION(rbbi_get_rule_status) BREAKITER_METHOD_FETCH_OBJECT; - RETURN_INT(fetch_rbbi(bio)->getRuleStatus()); + RETURN_LONG(fetch_rbbi(bio)->getRuleStatus()); } U_CFUNC PHP_FUNCTION(rbbi_get_rule_status_vec) @@ -189,7 +189,7 @@ U_CFUNC PHP_FUNCTION(rbbi_get_rule_status_vec) array_init_size(return_value, num_rules); for (int32_t i = 0; i < num_rules; i++) { - add_next_index_int(return_value, rules[i]); + add_next_index_long(return_value, rules[i]); } delete[] rules; } @@ -218,7 +218,7 @@ U_CFUNC PHP_FUNCTION(rbbi_get_binary_rules) RETURN_FALSE; } - zend_string *ret_rules = STR_ALLOC(rules_len, 0); + zend_string *ret_rules = zend_string_alloc(rules_len, 0); memcpy(ret_rules->val, rules, rules_len); ret_rules->val[rules_len] = '\0'; -- cgit v1.2.1 From 3234480827b27ff5d3469a732167afd289632a96 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Wed, 27 Aug 2014 15:31:48 +0200 Subject: first show to make 's' work with size_t --- ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp') diff --git a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp index 098f8ab3cc..74bebb2db2 100644 --- a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp +++ b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp @@ -33,7 +33,7 @@ static void _php_intlrbbi_constructor_body(INTERNAL_FUNCTION_PARAMETERS) { zval *object = getThis(); char *rules; - int rules_len; + size_t rules_len; zend_bool compiled = 0; UErrorCode status = U_ZERO_ERROR; intl_error_reset(NULL TSRMLS_CC); -- cgit v1.2.1 From d0cb715373c3fbe9dc095378ec5ed8c71f799f67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Schl=C3=BCter?= Date: Fri, 19 Sep 2014 18:33:14 +0200 Subject: s/PHP 5/PHP 7/ --- ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp') diff --git a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp index 74bebb2db2..d3b36291b2 100644 --- a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp +++ b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | -- cgit v1.2.1