diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2015-02-04 15:24:13 +0300 | 
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2015-02-04 15:24:13 +0300 | 
| commit | 9e70d7672dd646b8c9b29ccc452e4dc5aa015437 (patch) | |
| tree | 0b852db11ab8fdcab020d6f13ee631291849b6d2 /Zend/zend_objects.c | |
| parent | 87377c1707beec44f35cd6d91e5822a31479f170 (diff) | |
| download | php-git-9e70d7672dd646b8c9b29ccc452e4dc5aa015437.tar.gz | |
Move zend_object->guards into additional slot of zend_object->properties_table[]. As result size of objects without __get/__set/__unset/__isset magic methods is reduced.
Diffstat (limited to 'Zend/zend_objects.c')
| -rw-r--r-- | Zend/zend_objects.c | 19 | 
1 files changed, 13 insertions, 6 deletions
diff --git a/Zend/zend_objects.c b/Zend/zend_objects.c index 8ba1f5a78d..60e446b4fd 100644 --- a/Zend/zend_objects.c +++ b/Zend/zend_objects.c @@ -32,7 +32,6 @@ ZEND_API void zend_object_std_init(zend_object *object, zend_class_entry *ce)  	GC_TYPE_INFO(object) = IS_OBJECT;  	object->ce = ce;  	object->properties = NULL; -	object->guards = NULL;  	zend_objects_store_put(object);  	if (EXPECTED(ce->default_properties_count != 0)) {  		zval *p = object->properties_table; @@ -43,16 +42,17 @@ ZEND_API void zend_object_std_init(zend_object *object, zend_class_entry *ce)  			p++;  		} while (p != end);  	} +	if (ce->ce_flags & ZEND_ACC_USE_GUARDS) { +		GC_FLAGS(object) |= IS_OBJ_USE_GUARDS; +		ZVAL_UNDEF(&object->properties_table[ce->default_properties_count]); +		Z_PTR(object->properties_table[ce->default_properties_count]) = NULL; +	}  }  ZEND_API void zend_object_std_dtor(zend_object *object)  {  	int i, count; -	if (object->guards) { -		zend_hash_destroy(object->guards); -		FREE_HASHTABLE(object->guards); -	}  	if (object->properties) {  		zend_array_destroy(object->properties);  		FREE_HASHTABLE(object->properties); @@ -61,6 +61,13 @@ ZEND_API void zend_object_std_dtor(zend_object *object)  	for (i = 0; i < count; i++) {  		i_zval_ptr_dtor(&object->properties_table[i] ZEND_FILE_LINE_CC);  	} +	if (GC_FLAGS(object) & IS_OBJ_HAS_GUARDS) { +		HashTable *guards = Z_PTR(object->properties_table[count]); + +		ZEND_ASSERT(guards != NULL); +		zend_hash_destroy(guards); +		FREE_HASHTABLE(guards); +	}  }  ZEND_API void zend_objects_destroy_object(zend_object *object) @@ -131,7 +138,7 @@ ZEND_API void zend_objects_destroy_object(zend_object *object)  ZEND_API zend_object *zend_objects_new(zend_class_entry *ce)  { -	zend_object *object = emalloc(sizeof(zend_object) + sizeof(zval) * (ce->default_properties_count - 1)); +	zend_object *object = emalloc(sizeof(zend_object) + zend_object_properties_size(ce));  	zend_object_std_init(object, ce);  	object->handlers = &std_object_handlers;  | 
