#define ZEND_CORE_VERSION_INFO "Zend Engine v" ZEND_VERSION ", Copyright (c) 1998-2009 Zend Technologies\n"
#define PRINT_ZVAL_INDENT 4
-static void print_hash(HashTable *ht, int indent, zend_bool is_object TSRMLS_DC) /* {{{ */
+static void print_hash(zend_write_func_t write_func, HashTable *ht, int indent, zend_bool is_object TSRMLS_DC) /* {{{ */
{
zval **tmp;
zstr string_key;
zend_uchar ztype;
for (i = 0; i < indent; i++) {
- ZEND_PUTS(" ");
+ ZEND_PUTS_EX(" ");
}
- ZEND_PUTS("(\n");
+ ZEND_PUTS_EX("(\n");
indent += PRINT_ZVAL_INDENT;
zend_hash_internal_pointer_reset_ex(ht, &iterator);
while (zend_hash_get_current_data_ex(ht, (void **) &tmp, &iterator) == SUCCESS) {
zend_uchar key_type;
for (i = 0; i < indent; i++) {
- ZEND_PUTS(" ");
+ ZEND_PUTS_EX(" ");
}
- ZEND_PUTS("[");
+ ZEND_PUTS_EX("[");
switch ((key_type = zend_hash_get_current_key_ex(ht, &string_key, &str_len, &num_key, 0, &iterator))) {
case HASH_KEY_IS_STRING:
ztype = IS_STRING;
int mangled = zend_u_unmangle_property_name(ztype, string_key, str_len - 1, &class_name, &prop_name);
+ if (ztype == IS_UNICODE) {
+ UConverter *conv = ZEND_U_CONVERTER(UG(output_encoding_conv));
+ UErrorCode status = U_ZERO_ERROR;
+ char *s = NULL;
+ int s_len;
+
+ zend_unicode_to_string_ex(conv, &s, &s_len, prop_name.u, u_strlen(prop_name.u), &status);
+ if (U_FAILURE(status)) {
+ zend_error(E_WARNING, "Could not convert Unicode to printable form");
+ return;
+ }
+ ZEND_WRITE_EX(s, s_len);
+ efree(s);
+ } else {
+ ZEND_PUTS_EX(prop_name.s);
+ }
if (class_name.v && mangled == SUCCESS) {
if (class_name.s[0]=='*') {
- zend_printf("%R:protected", ztype, prop_name);
+ ZEND_PUTS_EX(":protected");
} else {
- zend_printf("%R:%v:private", ztype, prop_name, class_name);
+ ZEND_PUTS_EX(":");
+ if (UG(unicode)) {
+ UConverter *conv = ZEND_U_CONVERTER(UG(output_encoding_conv));
+ UErrorCode status = U_ZERO_ERROR;
+ char *s = NULL;
+ int s_len;
+
+ zend_unicode_to_string_ex(conv, &s, &s_len, class_name.u, u_strlen(class_name.u), &status);
+ if (U_FAILURE(status)) {
+ zend_error(E_WARNING, "Could not convert Unicode to printable form");
+ return;
+ }
+ ZEND_WRITE_EX(s, s_len);
+ efree(s);
+ } else {
+ ZEND_PUTS_EX(class_name.s);
+ }
+ ZEND_PUTS_EX(":private");
}
- } else {
- zend_printf("%R", ztype, prop_name);
}
} else {
- zend_printf("%R", ztype, string_key);
+ if (ztype == IS_UNICODE) {
+ UConverter *conv = ZEND_U_CONVERTER(UG(output_encoding_conv));
+ UErrorCode status = U_ZERO_ERROR;
+ char *s = NULL;
+ int s_len;
+
+ zend_unicode_to_string_ex(conv, &s, &s_len, string_key.u, str_len-1, &status);
+ if (U_FAILURE(status)) {
+ zend_error(E_WARNING, "Could not convert Unicode to printable form");
+ return;
+ }
+ ZEND_WRITE_EX(s, s_len);
+ efree(s);
+ } else {
+ ZEND_WRITE_EX(string_key.s, str_len-1);
+ }
}
break;
case HASH_KEY_IS_LONG:
- zend_printf("%ld", num_key);
+ {
+ char key[25];
+ snprintf(key, sizeof(key), "%ld", num_key);
+ ZEND_PUTS_EX(key);
+ }
break;
}
- ZEND_PUTS("] => ");
- zend_print_zval_r(*tmp, indent+PRINT_ZVAL_INDENT TSRMLS_CC);
- ZEND_PUTS("\n");
+ ZEND_PUTS_EX("] => ");
+ zend_print_zval_r_ex(write_func, *tmp, indent+PRINT_ZVAL_INDENT TSRMLS_CC);
+ ZEND_PUTS_EX("\n");
zend_hash_move_forward_ex(ht, &iterator);
}
indent -= PRINT_ZVAL_INDENT;
for (i = 0; i < indent; i++) {
- ZEND_PUTS(" ");
+ ZEND_PUTS_EX(" ");
}
- ZEND_PUTS(")\n");
+ ZEND_PUTS_EX(")\n");
}
/* }}} */
{
switch (Z_TYPE_P(expr)) {
case IS_ARRAY:
- ZEND_PUTS("Array\n");
+ ZEND_PUTS_EX("Array\n");
if (++Z_ARRVAL_P(expr)->nApplyCount>1) {
- ZEND_PUTS(" *RECURSION*");
+ ZEND_PUTS_EX(" *RECURSION*");
Z_ARRVAL_P(expr)->nApplyCount--;
return;
}
- print_hash(Z_ARRVAL_P(expr), indent, 0 TSRMLS_CC);
+ print_hash(write_func, Z_ARRVAL_P(expr), indent, 0 TSRMLS_CC);
Z_ARRVAL_P(expr)->nApplyCount--;
break;
case IS_OBJECT:
Z_OBJ_HANDLER_P(expr, get_class_name)(expr, &class_name, &clen, 0 TSRMLS_CC);
}
if (class_name.v) {
- zend_printf("%v Object\n", class_name.v);
+ if (UG(unicode)) {
+ UConverter *conv = ZEND_U_CONVERTER(UG(output_encoding_conv));
+ UErrorCode status = U_ZERO_ERROR;
+ char *s = NULL;
+ int s_len;
+
+ zend_unicode_to_string_ex(conv, &s, &s_len, class_name.u, clen, &status);
+ if (U_FAILURE(status)) {
+ zend_error(E_WARNING, "Could not convert Unicode to printable form");
+ return;
+ }
+ ZEND_WRITE_EX(s, s_len);
+ efree(s);
+ } else {
+ ZEND_PUTS_EX(class_name.s);
+ }
} else {
- zend_printf("%s Object\n", "Unknown Class");
+ ZEND_PUTS_EX("Unknown Class");
}
+ ZEND_PUTS_EX(" Object\n");
if (class_name.v) {
efree(class_name.v);
}
break;
}
if (++properties->nApplyCount>1) {
- ZEND_PUTS(" *RECURSION*");
+ ZEND_PUTS_EX(" *RECURSION*");
properties->nApplyCount--;
return;
}
- print_hash(properties, indent, 1 TSRMLS_CC);
+ print_hash(write_func, properties, indent, 1 TSRMLS_CC);
properties->nApplyCount--;
if (is_temp) {
zend_hash_destroy(properties);
break;
}
default:
- zend_print_variable(expr);
+ zend_print_zval_ex(write_func, expr, indent);
break;
}
}