From e88c71d3560d06a3d5a330b8572dd2aa83ecc5b6 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 27 Apr 2016 00:24:20 +0300 Subject: Optimize property guards for the most usual case with only one acive guard. --- Zend/zend_objects.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'Zend/zend_objects.c') diff --git a/Zend/zend_objects.c b/Zend/zend_objects.c index 793d1ac4c3..0f052335db 100644 --- a/Zend/zend_objects.c +++ b/Zend/zend_objects.c @@ -46,7 +46,6 @@ ZEND_API void zend_object_std_init(zend_object *object, zend_class_entry *ce) } if (UNEXPECTED(ce->ce_flags & ZEND_ACC_USE_GUARDS)) { GC_FLAGS(object) |= IS_OBJ_USE_GUARDS; - Z_PTR_P(p) = NULL; ZVAL_UNDEF(p); } } @@ -71,11 +70,17 @@ ZEND_API void zend_object_std_dtor(zend_object *object) } while (p != end); } if (UNEXPECTED(GC_FLAGS(object) & IS_OBJ_HAS_GUARDS)) { - HashTable *guards = Z_PTR_P(p); + if (EXPECTED(Z_TYPE_P(p) == IS_STRING)) { + zend_string_release(Z_STR_P(p)); + } else { + HashTable *guards; - ZEND_ASSERT(guards != NULL); - zend_hash_destroy(guards); - FREE_HASHTABLE(guards); + ZEND_ASSERT(Z_TYPE_P(p) == IS_ARRAY); + guards = Z_ARRVAL_P(p); + ZEND_ASSERT(guards != NULL); + zend_hash_destroy(guards); + FREE_HASHTABLE(guards); + } } } -- cgit v1.2.1