Question on zend_make_printable

[email protected] (Marcus Boerger)
Newsgroups php.i18n
Message-ID <[email protected]>
Hello Anrei,

  why don't we simply make zend_make_printable_zval() call on of
zend_make_unicode_zval/zend_make_string_zval() depending on ini
setting unicode_semantics, see attached patch.

-- 
Best regards,
 Marcus                          mailto:[email protected]
ze2-make_printabe-20060603.diff.txt (text/plain, 2.8 KB)
Index: Zend/zend.c
===================================================================
RCS file: /repository/ZendEngine2/zend.c,v
retrieving revision 1.359
diff -u -p -d -r1.359 zend.c
--- Zend/zend.c	3 Jun 2006 11:41:29 -0000	1.359
+++ Zend/zend.c	3 Jun 2006 11:43:06 -0000
@@ -348,79 +348,11 @@ ZEND_API void zend_make_string_zval(zval
 
 ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_copy)
 {
-	UErrorCode temp = U_ZERO_ERROR;
-	TSRMLS_FETCH();
-
-	if (
-	  /* UTODO: clean this up */
-	    (Z_TYPE_P(expr) == IS_STRING &&
-	    (!strcmp(ucnv_getName(ZEND_U_CONVERTER(UG(output_encoding_conv)), &temp),
-				 ucnv_getName(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), &temp))))) {
-		*use_copy = 0;
-		return;
-	}
-	switch (Z_TYPE_P(expr)) {
-		case IS_NULL:
-			Z_STRLEN_P(expr_copy) = 0;
-			Z_STRVAL_P(expr_copy) = STR_EMPTY_ALLOC();
-			break;
-		case IS_BOOL:
-			if (Z_LVAL_P(expr)) {
-				Z_STRLEN_P(expr_copy) = 1;
-				Z_STRVAL_P(expr_copy) = estrndup("1", 1);
-			} else {
-				Z_STRLEN_P(expr_copy) = 0;
-				Z_STRVAL_P(expr_copy) = STR_EMPTY_ALLOC();
-			}
-			break;
-		case IS_RESOURCE:
-			Z_STRVAL_P(expr_copy) = (char *) emalloc(sizeof("Resource id #")-1 + MAX_LENGTH_OF_LONG);
-			Z_STRLEN_P(expr_copy) = sprintf(Z_STRVAL_P(expr_copy), "Resource id #%ld", Z_LVAL_P(expr));
-			break;
-		case IS_ARRAY:
-			Z_STRLEN_P(expr_copy) = sizeof("Array")-1;
-			Z_STRVAL_P(expr_copy) = estrndup("Array", Z_STRLEN_P(expr_copy));
-			break;
-		case IS_OBJECT:
-			if(Z_OBJ_HT_P(expr)->cast_object && Z_OBJ_HANDLER_P(expr, cast_object)(expr, expr_copy, IS_STRING TSRMLS_CC) == SUCCESS) {
-				break;
-			}
-			if (Z_OBJ_HANDLER_P(expr, get)) {
-				zval *z = Z_OBJ_HANDLER_P(expr, get)(expr TSRMLS_CC);
-				
-				z->refcount++;
-				if(Z_TYPE_P(z) != IS_OBJECT) {
-					zend_make_printable_zval(z, expr_copy, use_copy);
-					if (*use_copy) {
-						zval_ptr_dtor(&z);
-					} else {
-						ZVAL_ZVAL(expr_copy, z, 0, 1);
-						*use_copy = 1;
-					}
-					return;
-				}
-				zval_ptr_dtor(&z);
-			}
-			zend_error(EG(exception) ? E_ERROR : E_RECOVERABLE_ERROR, "Object of class %v could not be converted to string", Z_OBJCE_P(expr)->name);
-			ZVAL_EMPTY_STRING(expr_copy);
-			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);
-			if (UG(unicode)) {
-				convert_to_string_with_converter(expr_copy, ZEND_U_CONVERTER(UG(output_encoding_conv)));
-			} else {
-				convert_to_string(expr_copy);
-			}
-			break;
+	if (UG(unicode)) {
+		zend_make_unicode_zval(expr, expr_copy, use_copy);
+	} else {
+		zend_make_string_zval(expr, expr_copy, use_copy);
 	}
-	Z_TYPE_P(expr_copy) = IS_STRING;
-	*use_copy = 1;
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.