mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
Inlining in the most frequently used code paths
This commit is contained in:
parent
fd080a06d8
commit
6f91090f6a
@ -1189,7 +1189,7 @@ ZEND_API int zend_update_class_constants(zend_class_entry *class_type) /* {{{ */
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
ZEND_API void object_properties_init(zend_object *object, zend_class_entry *class_type) /* {{{ */
|
||||
static zend_always_inline void _object_properties_init(zend_object *object, zend_class_entry *class_type) /* {{{ */
|
||||
{
|
||||
if (class_type->default_properties_count) {
|
||||
zval *src = class_type->default_properties_table;
|
||||
@ -1209,11 +1209,17 @@ ZEND_API void object_properties_init(zend_object *object, zend_class_entry *clas
|
||||
dst++;
|
||||
} while (src != end);
|
||||
}
|
||||
object->properties = NULL;
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
ZEND_API void object_properties_init(zend_object *object, zend_class_entry *class_type) /* {{{ */
|
||||
{
|
||||
object->properties = NULL;
|
||||
_object_properties_init(object, class_type);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
ZEND_API void object_properties_init_ex(zend_object *object, HashTable *properties) /* {{{ */
|
||||
{
|
||||
object->properties = properties;
|
||||
@ -1298,7 +1304,7 @@ ZEND_API void object_properties_load(zend_object *object, HashTable *properties)
|
||||
* class and all props being public. If only a subset is given or the class
|
||||
* has protected members then you need to merge the properties separately by
|
||||
* calling zend_merge_properties(). */
|
||||
ZEND_API int object_and_properties_init(zval *arg, zend_class_entry *class_type, HashTable *properties) /* {{{ */
|
||||
static zend_always_inline int _object_and_properties_init(zval *arg, zend_class_entry *class_type, HashTable *properties) /* {{{ */
|
||||
{
|
||||
if (UNEXPECTED(class_type->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_TRAIT|ZEND_ACC_IMPLICIT_ABSTRACT_CLASS|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS))) {
|
||||
if (class_type->ce_flags & ZEND_ACC_INTERFACE) {
|
||||
@ -1322,11 +1328,13 @@ ZEND_API int object_and_properties_init(zval *arg, zend_class_entry *class_type,
|
||||
}
|
||||
|
||||
if (class_type->create_object == NULL) {
|
||||
ZVAL_OBJ(arg, zend_objects_new(class_type));
|
||||
zend_object *obj = zend_objects_new(class_type);
|
||||
|
||||
ZVAL_OBJ(arg, obj);
|
||||
if (properties) {
|
||||
object_properties_init_ex(Z_OBJ_P(arg), properties);
|
||||
object_properties_init_ex(obj, properties);
|
||||
} else {
|
||||
object_properties_init(Z_OBJ_P(arg), class_type);
|
||||
_object_properties_init(obj, class_type);
|
||||
}
|
||||
} else {
|
||||
ZVAL_OBJ(arg, class_type->create_object(class_type));
|
||||
@ -1335,9 +1343,15 @@ ZEND_API int object_and_properties_init(zval *arg, zend_class_entry *class_type,
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
ZEND_API int object_and_properties_init(zval *arg, zend_class_entry *class_type, HashTable *properties) /* {{{ */
|
||||
{
|
||||
return _object_and_properties_init(arg, class_type, properties);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
ZEND_API int object_init_ex(zval *arg, zend_class_entry *class_type) /* {{{ */
|
||||
{
|
||||
return object_and_properties_init(arg, class_type, 0);
|
||||
return _object_and_properties_init(arg, class_type, NULL);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include "zend_interfaces.h"
|
||||
#include "zend_exceptions.h"
|
||||
|
||||
ZEND_API void ZEND_FASTCALL zend_object_std_init(zend_object *object, zend_class_entry *ce)
|
||||
static zend_always_inline void _zend_object_std_init(zend_object *object, zend_class_entry *ce)
|
||||
{
|
||||
GC_SET_REFCOUNT(object, 1);
|
||||
GC_TYPE_INFO(object) = IS_OBJECT | (GC_COLLECTABLE << GC_FLAGS_SHIFT);
|
||||
@ -37,6 +37,11 @@ ZEND_API void ZEND_FASTCALL zend_object_std_init(zend_object *object, zend_class
|
||||
}
|
||||
}
|
||||
|
||||
ZEND_API void ZEND_FASTCALL zend_object_std_init(zend_object *object, zend_class_entry *ce)
|
||||
{
|
||||
_zend_object_std_init(object, ce);
|
||||
}
|
||||
|
||||
ZEND_API void zend_object_std_dtor(zend_object *object)
|
||||
{
|
||||
zval *p, *end;
|
||||
@ -174,7 +179,7 @@ ZEND_API zend_object* ZEND_FASTCALL zend_objects_new(zend_class_entry *ce)
|
||||
{
|
||||
zend_object *object = emalloc(sizeof(zend_object) + zend_object_properties_size(ce));
|
||||
|
||||
zend_object_std_init(object, ce);
|
||||
_zend_object_std_init(object, ce);
|
||||
object->handlers = &std_object_handlers;
|
||||
return object;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user