expr_copy->value.str.val = estrndup("Object", expr_copy->value.str.len);
#endif
break;
+ case IS_DOUBLE:
+ *expr_copy = *expr;
+ zval_copy_ctor(expr_copy);
+ zend_locale_sprintf_double(expr_copy ZEND_FILE_LINE_CC);
+ break;
default:
*expr_copy = *expr;
zval_copy_ctor(expr_copy);
EG(current_execute_data) = NULL;
EG(This) = NULL;
+
+ EG(float_separator)[0] = '.';
}
struct _zend_execute_data *current_execute_data;
+ /* locale stuff */
+ char float_separator[1];
+
void *reserved[ZEND_MAX_RESERVED_RESOURCES];
};
result->value.lval = Z_OBJ_HT_P(o1)->compare_objects(o1, o2 TSRMLS_CC);
}
}
+
+ZEND_API void zend_locale_sprintf_double(zval *op ZEND_FILE_LINE_DC)
+{
+ double dval = op->value.dval;
+
+ TSRMLS_FETCH();
+
+ op->value.str.val = (char *) emalloc_rel(MAX_LENGTH_OF_DOUBLE + EG(precision) + 1);
+ sprintf(op->value.str.val, "%.*G", (int) EG(precision), dval);
+ op->value.str.len = strlen(op->value.str.val);
+
+ if (EG(float_separator)[0] != '.') {
+ char *p = op->value.str.val;
+ if ((p = strchr(p, '.'))) {
+ *p = EG(float_separator)[0];
+ }
+ }
+}
\ No newline at end of file
ZEND_API int zend_atoi(const char *str, int str_len);
+ZEND_API void zend_locale_sprintf_double(zval *op ZEND_FILE_LINE_DC);
+
#define convert_to_ex_master(ppzv, lower_type, upper_type) \
if ((*ppzv)->type!=IS_##upper_type) { \
if (!(*ppzv)->is_ref) { \