35 object->extra_flags = 0;
37 object->properties =
NULL;
40 zval *guard_value =
object->properties_table +
object->ce->default_properties_count;
48 _zend_object_std_init(
object, ce);
91 p =
object->properties_table;
93 end =
p +
object->ce->default_properties_count;
102 zval_ptr_dtor_str(
p);
119 if (
UNEXPECTED(zend_object_is_lazy(
object))) {
124 const zend_op *old_opline_before_exception;
130 if (
EG(current_execute_data)) {
135 "Call to private %s::__destruct() from %s%s",
137 scope ?
"scope " :
"global scope",
144 "Call to private %s::__destruct() from global scope during shutdown ignored",
151 if (
EG(current_execute_data)) {
156 "Call to protected %s::__destruct() from %s%s",
158 scope ?
"scope " :
"global scope",
165 "Call to protected %s::__destruct() from global scope during shutdown ignored",
178 old_exception =
NULL;
183 if (
EG(current_execute_data)
184 &&
EG(current_execute_data)->
func
186 zend_rethrow_exception(
EG(current_execute_data));
189 old_opline_before_exception =
EG(opline_before_exception);
194 zend_call_known_instance_method_with_0_params(destructor,
object,
NULL);
197 EG(opline_before_exception) = old_opline_before_exception;
212 _zend_object_std_init(
object, ce);
218 bool has_clone_method = old_object->
ce->
clone !=
NULL;
226 i_zval_ptr_dtor(dst);
229 if (has_clone_method) {
243 }
while (src !=
end);
244 }
else if (old_object->
properties && !has_clone_method) {
257 zval *prop, new_prop;
278 if (has_clone_method) {
290 if (has_clone_method) {
292 zend_call_known_instance_method_with_0_params(new_object->
ce->
clone, new_object,
NULL);
310 if (
UNEXPECTED(zend_object_is_lazy(old_object))) {
unsigned const char * end
unsigned char key[REFLECTION_KEY_LEN]
int default_properties_count
const zend_object_handlers * default_object_handlers
const zend_object_handlers * handlers
ZEND_API ZEND_COLD ZEND_NORETURN void zend_error_noreturn(int type, const char *format,...)
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
ZEND_API ZEND_COLD void zend_error(int type, const char *format,...)
#define FREE_HASHTABLE(ht)
#define ZEND_USER_CODE(type)
#define OBJ_PROP_NUM(obj, num)
struct _zend_property_info zend_property_info
#define ZEND_ACC_USE_GUARDS
#define ZEND_ACC_PROTECTED
void zend_exception_set_previous(zend_object *exception, zend_object *add_previous)
#define ZEND_REF_HAS_TYPE_SOURCES(ref)
#define ZEND_REF_DEL_TYPE_SOURCE(ref, source)
ZEND_API zend_class_entry * zend_get_executed_scope(void)
#define ZEND_CLASS_HAS_READONLY_PROPS(ce)
#define ZEND_REF_ADD_TYPE_SOURCE(ref, source)
union _zend_function zend_function
ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_add_new(HashTable *ht, zend_ulong h, zval *pData)
ZEND_API void ZEND_FASTCALL zend_hash_extend(HashTable *ht, uint32_t nSize, bool packed)
ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht)
ZEND_API void ZEND_FASTCALL zend_hash_real_init_mixed(HashTable *ht)
#define ZEND_HASH_MAP_FOREACH_KEY_VAL(ht, _h, _key, _val)
#define zend_new_array(size)
#define ZEND_HASH_FOREACH_END()
#define HASH_FLAG_HAS_EMPTY_IND
zend_object * zend_lazy_object_clone(zend_object *old_obj)
void zend_lazy_object_del_info(zend_object *obj)
struct _zend_string zend_string
ZEND_API bool zend_check_protected(const zend_class_entry *ce, const zend_class_entry *scope)
ZEND_API const zend_object_handlers std_object_handlers
#define zend_get_function_root_class(fbc)
ZEND_API zend_object *ZEND_FASTCALL zend_objects_new(zend_class_entry *ce)
ZEND_API void zend_objects_destroy_object(zend_object *object)
void zend_object_dtor_property(zend_object *object, zval *p)
ZEND_API void ZEND_FASTCALL zend_objects_clone_members(zend_object *new_object, zend_object *old_object)
ZEND_API zend_object * zend_objects_clone_obj(zend_object *old_object)
void zend_object_dtor_dynamic_properties(zend_object *object)
ZEND_API void ZEND_FASTCALL zend_object_std_init(zend_object *object, zend_class_entry *ce)
ZEND_API void zend_object_std_dtor(zend_object *object)
ZEND_API void ZEND_FASTCALL zend_objects_store_put(zend_object *object)
#define EXPECTED(condition)
#define zend_always_inline
#define UNEXPECTED(condition)
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
#define Z_ISREF_P(zval_p)
#define GC_SET_REFCOUNT(p, rc)
#define Z_ARRVAL_P(zval_p)
#define Z_REFCOUNTED_P(zval_p)
#define ZVAL_COPY_VALUE_PROP(z, v)
#define ZVAL_INDIRECT(z, v)
struct _zend_array HashTable
#define IS_PROP_REINITABLE
#define ZEND_TYPE_IS_SET(t)
#define Z_INDIRECT_P(zval_p)
#define Z_GUARD_P(zval_p)
#define IS_ARRAY_IMMUTABLE
#define IS_OBJ_WEAKLY_REFERENCED
#define ZVAL_COPY_VALUE(z, v)
ZEND_API void zval_add_ref(zval *p)
zend_property_info * prop_info
void zend_weakrefs_notify(zend_object *object)