]> granicus.if.org Git - php/commitdiff
Avoid unnecessry reallocation
authorDmitry Stogov <dmitry@zend.com>
Tue, 1 Apr 2014 17:19:44 +0000 (21:19 +0400)
committerDmitry Stogov <dmitry@zend.com>
Tue, 1 Apr 2014 17:19:44 +0000 (21:19 +0400)
Zend/zend_builtin_functions.c

index be68653eebb699ce0aed2c68e15b4ea5952be017..de397b921b7096fc735aac1969e70f778e93eb92 100644 (file)
@@ -1015,10 +1015,14 @@ ZEND_FUNCTION(get_object_vars)
                }
                if (zend_hash_get_current_key_ex(properties, &key, &num_index, 0, &pos) == HASH_KEY_IS_STRING) {
                        if (zend_check_property_access(zobj, key TSRMLS_CC) == SUCCESS) {
-                               zend_unmangle_property_name_ex(key->val, key->len, &class_name, &prop_name, (int*) &prop_len);
                                /* Not separating references */
                                if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
-                               add_assoc_zval_ex(return_value, prop_name, prop_len, value);
+                               if (key->val[0] == 0) {
+                                       zend_unmangle_property_name_ex(key->val, key->len, &class_name, &prop_name, (int*) &prop_len);
+                                       zend_hash_str_update(Z_ARRVAL_P(return_value), prop_name, prop_len, value);
+                               } else {
+                                       zend_hash_update(Z_ARRVAL_P(return_value), key, value);
+                               }
                        }
                }
                zend_hash_move_forward_ex(properties, &pos);