]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.0'
authorDmitry Stogov <dmitry@zend.com>
Wed, 22 Jun 2016 14:28:59 +0000 (17:28 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 22 Jun 2016 14:28:59 +0000 (17:28 +0300)
* PHP-7.0:
  Allow "proxy" ovjects to substitute their class names through get_class_name() handler (similar to var_dump() and others).

1  2 
Zend/zend_builtin_functions.c
Zend/zend_exceptions.c

index 5ae536f425a07f6110fa09a7407d7168433be97b,006a499db9424c4fdb06f0e7273d099a0fa9f1fe..b9d8341b523b1726e988618e3e6119eb13160d96
@@@ -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 &&
Simple merge