20#ifndef ZEND_OBJECTS_API_H
21#define ZEND_OBJECTS_API_H
28#define OBJ_BUCKET_INVALID (1<<0)
30#define IS_OBJ_VALID(o) (!(((uintptr_t)(o)) & OBJ_BUCKET_INVALID))
32#define SET_OBJ_INVALID(o) ((zend_object*)((((uintptr_t)(o)) | OBJ_BUCKET_INVALID)))
34#define GET_OBJ_BUCKET_NUMBER(o) (((intptr_t)(o)) >> 1)
36#define SET_OBJ_BUCKET_NUMBER(o, n) do { \
37 (o) = (zend_object*)((((uintptr_t)(n)) << 1) | OBJ_BUCKET_INVALID); \
40#define ZEND_OBJECTS_STORE_ADD_TO_FREE_LIST(h) do { \
41 SET_OBJ_BUCKET_NUMBER(EG(objects_store).object_buckets[(h)], EG(objects_store).free_list_head); \
42 EG(objects_store).free_list_head = (h); \
45#define OBJ_RELEASE(obj) zend_object_release(obj)
94 void *obj =
emalloc(obj_size + zend_object_properties_size(ce));
108 if (table[prop_num]) {
109 return table[prop_num];
117 if (
UNEXPECTED(zend_object_is_lazy_proxy(obj))) {
123 if (table[prop_num]) {
124 return table[prop_num];
memset(ptr, 0, type->size)
int default_properties_count
struct _zend_property_info ** properties_info_table
zend_object ** object_buckets
struct _zend_property_info zend_property_info
#define ZEND_ACC_USE_GUARDS
ZEND_API void ZEND_FASTCALL gc_possible_root(zend_refcounted *ref)
zend_property_info * zend_lazy_object_get_property_info_for_slot(zend_object *obj, zval *slot)
ZEND_API void ZEND_FASTCALL zend_objects_store_destroy(zend_objects_store *objects)
ZEND_API void ZEND_FASTCALL zend_objects_store_del(zend_object *object)
ZEND_API void ZEND_FASTCALL zend_objects_store_put(zend_object *object)
ZEND_API void ZEND_FASTCALL zend_objects_store_free_object_storage(zend_objects_store *objects, bool fast_shutdown)
ZEND_API void ZEND_FASTCALL zend_objects_store_mark_destructed(zend_objects_store *objects)
ZEND_API void ZEND_FASTCALL zend_objects_store_call_destructors(zend_objects_store *objects)
ZEND_API void ZEND_FASTCALL zend_objects_store_init(zend_objects_store *objects, uint32_t init_size)
ZEND_API void ZEND_FASTCALL zend_objects_store_del(zend_object *object)
ZEND_API ZEND_COLD zend_property_info * zend_get_property_info_for_slot_slow(zend_object *obj, zval *slot)
struct _zend_objects_store zend_objects_store
#define zend_always_inline
#define UNEXPECTED(condition)
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
#define IS_OBJ_DESTRUCTOR_CALLED
#define ZEND_TYPE_IS_SET(t)
struct _zend_refcounted zend_refcounted
#define GC_ADD_FLAGS(p, flags)
zend_property_info * prop_info