]> granicus.if.org Git - php/commitdiff
Fixed unicode support
authorDmitry Stogov <dmitry@php.net>
Thu, 10 Jul 2008 07:55:48 +0000 (07:55 +0000)
committerDmitry Stogov <dmitry@php.net>
Thu, 10 Jul 2008 07:55:48 +0000 (07:55 +0000)
Zend/tests/closure_015.phpt [new file with mode: 0644]
Zend/zend_closures.c

diff --git a/Zend/tests/closure_015.phpt b/Zend/tests/closure_015.phpt
new file mode 100644 (file)
index 0000000..ee1e485
--- /dev/null
@@ -0,0 +1,16 @@
+--TEST--
+Closure 015: converting to string/unicode
+--FILE--
+<?php
+$x = function() { return 1; };
+print (string) $x;
+print "\n";
+print (unicode) $x;
+print "\n";
+print $x;
+print "\n";
+?>
+--EXPECT--
+Closure object
+Closure object
+Closure object
index ff67d7e502e90458e11d126266009e82dc2d0c43..64a74bcd32ba13ab70c79bdb11edb6f337d10d44 100644 (file)
@@ -27,6 +27,7 @@
 #include "zend_globals.h"
 
 #define ZEND_INVOKE_FUNC_NAME "__invoke"
+#define ZEND_CLOSURE_PRINT_NAME "Closure object"
 
 typedef struct _zend_closure {
        zend_object    std;
@@ -88,9 +89,12 @@ static int zend_closure_cast_object_tostring(zval *readobj, zval *writeobj, int
 
        switch (type) {
                case IS_STRING:
+                       INIT_PZVAL(writeobj);
+                       ZVAL_STRINGL(writeobj, ZEND_CLOSURE_PRINT_NAME, sizeof(ZEND_CLOSURE_PRINT_NAME)-1, 1);
+                       return SUCCESS;
                case IS_UNICODE:
                        INIT_PZVAL(writeobj);
-                       ZVAL_ASCII_STRINGL(writeobj, "Closure object", sizeof("Closure object")-1, ZSTR_DUPLICATE);
+                       ZVAL_UNICODEL(writeobj, USTR_MAKE(ZEND_CLOSURE_PRINT_NAME), sizeof(ZEND_CLOSURE_PRINT_NAME)-1, 0);
                        return SUCCESS;
                default:
                        ce = Z_OBJCE_P(readobj);