summaryrefslogtreecommitdiff
path: root/ext/intl/msgformat/msgformat_helpers.cpp
diff options
context:
space:
mode:
authorGustavo André dos Santos Lopes <cataphract@php.net>2012-07-22 04:22:48 +0200
committerGustavo André dos Santos Lopes <cataphract@php.net>2012-07-22 04:22:48 +0200
commit99e48d3a5751b486fdc49a3409edd509faa3b27c (patch)
tree911f0481885ad0039d09b9d69fd5c6138776ae13 /ext/intl/msgformat/msgformat_helpers.cpp
parent11a5afec22e62af1555ceedc41460b96f8c06ed5 (diff)
parent2498c90c71980168b5b9ac2fa006340b9460b1f2 (diff)
downloadphp-git-99e48d3a5751b486fdc49a3409edd509faa3b27c.tar.gz
Merge branch 'datefmt_tz_cal_interop'
* datefmt_tz_cal_interop: Readded accidentally removed line Added IntlDateFormatter::formatObject(). Refactor Refactored internal_get_timestamp() Unified zval -> UDate conversions
Diffstat (limited to 'ext/intl/msgformat/msgformat_helpers.cpp')
-rwxr-xr-xext/intl/msgformat/msgformat_helpers.cpp76
1 files changed, 2 insertions, 74 deletions
diff --git a/ext/intl/msgformat/msgformat_helpers.cpp b/ext/intl/msgformat/msgformat_helpers.cpp
index fd8df1a39c..9ee1cdcfb0 100755
--- a/ext/intl/msgformat/msgformat_helpers.cpp
+++ b/ext/intl/msgformat/msgformat_helpers.cpp
@@ -31,6 +31,7 @@
#include <vector>
#include "../intl_convertcpp.h"
+#include "../common/common_date.h"
extern "C" {
#include "php_intl.h"
@@ -38,23 +39,10 @@ extern "C" {
#include "msgformat_format.h"
#include "msgformat_helpers.h"
#include "intl_convert.h"
-#define USE_CALENDAR_POINTER 1
-#include "../calendar/calendar_class.h"
-/* avoid redefinition of int8_t, already defined in unicode/pwin32.h */
-#define _MSC_STDINT_H_ 1
-#include "ext/date/php_date.h"
#define USE_TIMEZONE_POINTER
#include "../timezone/timezone_class.h"
}
-#ifndef INFINITY
-#define INFINITY (DBL_MAX+DBL_MAX)
-#endif
-
-#ifndef NAN
-#define NAN (INFINITY-INFINITY)
-#endif
-
#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 48
#define HAS_MESSAGE_PATTERN 1
#endif
@@ -95,66 +83,6 @@ U_CFUNC int32_t umsg_format_arg_count(UMessageFormat *fmt)
return fmt_count;
}
-static double umsg_helper_zval_to_millis(zval *z, UErrorCode *status TSRMLS_DC) {
- double rv = NAN;
- long lv;
- int type;
-
- if (U_FAILURE(*status)) {
- return NAN;
- }
-
- switch (Z_TYPE_P(z)) {
- case IS_STRING:
- type = is_numeric_string(Z_STRVAL_P(z), Z_STRLEN_P(z), &lv, &rv, 0);
- if (type == IS_DOUBLE) {
- rv *= U_MILLIS_PER_SECOND;
- } else if (type == IS_LONG) {
- rv = U_MILLIS_PER_SECOND * (double)lv;
- } else {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
- }
- break;
- case IS_LONG:
- rv = U_MILLIS_PER_SECOND * (double)Z_LVAL_P(z);
- break;
- case IS_DOUBLE:
- rv = U_MILLIS_PER_SECOND * Z_DVAL_P(z);
- break;
- case IS_OBJECT:
- if (instanceof_function(Z_OBJCE_P(z), php_date_get_date_ce() TSRMLS_CC)) {
- zval retval;
- zval *zfuncname;
- INIT_ZVAL(retval);
- MAKE_STD_ZVAL(zfuncname);
- ZVAL_STRING(zfuncname, "getTimestamp", 1);
- if (call_user_function(NULL, &(z), zfuncname, &retval, 0, NULL TSRMLS_CC)
- != SUCCESS || Z_TYPE(retval) != IS_LONG) {
- *status = U_INTERNAL_PROGRAM_ERROR;
- } else {
- rv = U_MILLIS_PER_SECOND * (double)Z_LVAL(retval);
- }
- zval_ptr_dtor(&zfuncname);
- } else if (instanceof_function(Z_OBJCE_P(z), Calendar_ce_ptr TSRMLS_CC)) {
- Calendar_object *co = (Calendar_object *)
- zend_object_store_get_object(z TSRMLS_CC );
- if (co->ucal == NULL) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
- } else {
- rv = (double)co->ucal->getTime(*status);
- }
- } else {
- /* TODO: try with cast(), get() to obtain a number */
- *status = U_ILLEGAL_ARGUMENT_ERROR;
- }
- break;
- default:
- *status = U_ILLEGAL_ARGUMENT_ERROR;
- }
-
- return rv;
-}
-
static HashTable *umsg_get_numeric_types(MessageFormatter_object *mfo,
intl_error& err TSRMLS_DC)
{
@@ -613,7 +541,7 @@ retry_kint64:
}
case Formattable::kDate:
{
- double dd = umsg_helper_zval_to_millis(*elem, &err.code TSRMLS_CC);
+ double dd = intl_zval_to_millis(*elem, &err, "msgfmt_format" TSRMLS_CC);
if (U_FAILURE(err.code)) {
char *message, *key_char;
int key_len;