From: Dmitry Stogov Date: Wed, 22 Jun 2016 14:28:59 +0000 (+0300) Subject: Merge branch 'PHP-7.0' X-Git-Tag: php-7.1.0alpha3~105^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f8faffe37edd74e0314f74436825bfcf5be78a49;p=php Merge branch 'PHP-7.0' * PHP-7.0: Allow "proxy" ovjects to substitute their class names through get_class_name() handler (similar to var_dump() and others). --- f8faffe37edd74e0314f74436825bfcf5be78a49 diff --cc Zend/zend_builtin_functions.c index 5ae536f425,006a499db9..b9d8341b52 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@@ -2701,25 -2614,25 +2708,26 @@@ ZEND_API void zend_fetch_debug_backtrac if (object) { if (func->common.scope) { - add_assoc_str_ex(&stack_frame, "class", sizeof("class")-1, zend_string_copy(func->common.scope->name)); + ZVAL_STR_COPY(&tmp, func->common.scope->name); - } else { + } else if (object->handlers->get_class_name == std_object_handlers.get_class_name) { - add_assoc_str_ex(&stack_frame, "class", sizeof("class")-1, zend_string_copy(object->ce->name)); + ZVAL_STR_COPY(&tmp, object->ce->name); - + } else { - zend_string *class_name = object->handlers->get_class_name(object); - add_assoc_str_ex(&stack_frame, "class", sizeof("class")-1, class_name); - zend_string_release(class_name); ++ ZVAL_STR(&tmp, object->handlers->get_class_name(object)); } + zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_CLASS], &tmp); if ((options & DEBUG_BACKTRACE_PROVIDE_OBJECT) != 0) { - zval zv; - ZVAL_OBJ(&zv, object); - add_assoc_zval_ex(&stack_frame, "object", sizeof("object")-1, &zv); - Z_ADDREF(zv); + ZVAL_OBJ(&tmp, object); + zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_OBJECT], &tmp); + Z_ADDREF(tmp); } - add_assoc_string_ex(&stack_frame, "type", sizeof("type")-1, "->"); + ZVAL_INTERNED_STR(&tmp, CG(known_strings)[ZEND_STR_OBJECT_OPERATOR]); + zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_TYPE], &tmp); } else if (func->common.scope) { - add_assoc_str_ex(&stack_frame, "class", sizeof("class")-1, zend_string_copy(func->common.scope->name)); - add_assoc_string_ex(&stack_frame, "type", sizeof("type")-1, "::"); + ZVAL_STR_COPY(&tmp, func->common.scope->name); + zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_CLASS], &tmp); + ZVAL_INTERNED_STR(&tmp, CG(known_strings)[ZEND_STR_PAAMAYIM_NEKUDOTAYIM]); + zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_TYPE], &tmp); } if ((options & DEBUG_BACKTRACE_IGNORE_ARGS) == 0 &&