123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- #ifndef ZEND_OBJECT_HANDLERS_H
- #define ZEND_OBJECT_HANDLERS_H
- struct _zend_property_info;
- #define ZEND_WRONG_PROPERTY_INFO \
- ((struct _zend_property_info*)((intptr_t)-1))
- #define ZEND_DYNAMIC_PROPERTY_OFFSET ((uintptr_t)(intptr_t)(-1))
- #define IS_VALID_PROPERTY_OFFSET(offset) ((intptr_t)(offset) > 0)
- #define IS_WRONG_PROPERTY_OFFSET(offset) ((intptr_t)(offset) == 0)
- #define IS_DYNAMIC_PROPERTY_OFFSET(offset) ((intptr_t)(offset) < 0)
- #define IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(offset) (offset == ZEND_DYNAMIC_PROPERTY_OFFSET)
- #define ZEND_DECODE_DYN_PROP_OFFSET(offset) ((uintptr_t)(-(intptr_t)(offset) - 2))
- #define ZEND_ENCODE_DYN_PROP_OFFSET(offset) ((uintptr_t)(-((intptr_t)(offset) + 2)))
- typedef zval *(*zend_object_read_property_t)(zval *object, zval *member, int type, void **cache_slot, zval *rv);
- typedef zval *(*zend_object_read_dimension_t)(zval *object, zval *offset, int type, zval *rv);
- typedef void (*zend_object_write_property_t)(zval *object, zval *member, zval *value, void **cache_slot);
- typedef void (*zend_object_write_dimension_t)(zval *object, zval *offset, zval *value);
- typedef zval *(*zend_object_get_property_ptr_ptr_t)(zval *object, zval *member, int type, void **cache_slot);
- typedef void (*zend_object_set_t)(zval *object, zval *value);
- typedef zval* (*zend_object_get_t)(zval *object, zval *rv);
- typedef int (*zend_object_has_property_t)(zval *object, zval *member, int has_set_exists, void **cache_slot);
- typedef int (*zend_object_has_dimension_t)(zval *object, zval *member, int check_empty);
- typedef void (*zend_object_unset_property_t)(zval *object, zval *member, void **cache_slot);
- typedef void (*zend_object_unset_dimension_t)(zval *object, zval *offset);
- typedef HashTable *(*zend_object_get_properties_t)(zval *object);
- typedef HashTable *(*zend_object_get_debug_info_t)(zval *object, int *is_temp);
- typedef int (*zend_object_call_method_t)(zend_string *method, zend_object *object, INTERNAL_FUNCTION_PARAMETERS);
- typedef zend_function *(*zend_object_get_method_t)(zend_object **object, zend_string *method, const zval *key);
- typedef zend_function *(*zend_object_get_constructor_t)(zend_object *object);
- typedef void (*zend_object_dtor_obj_t)(zend_object *object);
- typedef void (*zend_object_free_obj_t)(zend_object *object);
- typedef zend_object* (*zend_object_clone_obj_t)(zval *object);
- typedef zend_string *(*zend_object_get_class_name_t)(const zend_object *object);
- typedef int (*zend_object_compare_t)(zval *object1, zval *object2);
- typedef int (*zend_object_compare_zvals_t)(zval *resul, zval *op1, zval *op2);
- typedef int (*zend_object_cast_t)(zval *readobj, zval *retval, int type);
- typedef int (*zend_object_count_elements_t)(zval *object, zend_long *count);
- typedef int (*zend_object_get_closure_t)(zval *obj, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zend_object **obj_ptr);
- typedef HashTable *(*zend_object_get_gc_t)(zval *object, zval **table, int *n);
- typedef int (*zend_object_do_operation_t)(zend_uchar opcode, zval *result, zval *op1, zval *op2);
- struct _zend_object_handlers {
-
- int offset;
-
- zend_object_free_obj_t free_obj;
- zend_object_dtor_obj_t dtor_obj;
- zend_object_clone_obj_t clone_obj;
-
- zend_object_read_property_t read_property;
- zend_object_write_property_t write_property;
- zend_object_read_dimension_t read_dimension;
- zend_object_write_dimension_t write_dimension;
- zend_object_get_property_ptr_ptr_t get_property_ptr_ptr;
- zend_object_get_t get;
- zend_object_set_t set;
- zend_object_has_property_t has_property;
- zend_object_unset_property_t unset_property;
- zend_object_has_dimension_t has_dimension;
- zend_object_unset_dimension_t unset_dimension;
- zend_object_get_properties_t get_properties;
- zend_object_get_method_t get_method;
- zend_object_call_method_t call_method;
- zend_object_get_constructor_t get_constructor;
- zend_object_get_class_name_t get_class_name;
- zend_object_compare_t compare_objects;
- zend_object_cast_t cast_object;
- zend_object_count_elements_t count_elements;
- zend_object_get_debug_info_t get_debug_info;
- zend_object_get_closure_t get_closure;
- zend_object_get_gc_t get_gc;
- zend_object_do_operation_t do_operation;
- zend_object_compare_zvals_t compare;
- };
- BEGIN_EXTERN_C()
- extern const ZEND_API zend_object_handlers std_object_handlers;
- #define zend_get_std_object_handlers() \
- (&std_object_handlers)
- #define zend_get_function_root_class(fbc) \
- ((fbc)->common.prototype ? (fbc)->common.prototype->common.scope : (fbc)->common.scope)
- #define ZEND_PROPERTY_ISSET 0x0
- #define ZEND_PROPERTY_NOT_EMPTY ZEND_ISEMPTY
- #define ZEND_PROPERTY_EXISTS 0x2
- ZEND_API void zend_class_init_statics(zend_class_entry *ce);
- ZEND_API zend_function *zend_std_get_static_method(zend_class_entry *ce, zend_string *function_name_strval, const zval *key);
- ZEND_API zval *zend_std_get_static_property(zend_class_entry *ce, zend_string *property_name, zend_bool silent);
- ZEND_API ZEND_COLD zend_bool zend_std_unset_static_property(zend_class_entry *ce, zend_string *property_name);
- ZEND_API zend_function *zend_std_get_constructor(zend_object *object);
- ZEND_API struct _zend_property_info *zend_get_property_info(zend_class_entry *ce, zend_string *member, int silent);
- ZEND_API HashTable *zend_std_get_properties(zval *object);
- ZEND_API HashTable *zend_std_get_gc(zval *object, zval **table, int *n);
- ZEND_API HashTable *zend_std_get_debug_info(zval *object, int *is_temp);
- ZEND_API int zend_std_cast_object_tostring(zval *readobj, zval *writeobj, int type);
- ZEND_API zval *zend_std_get_property_ptr_ptr(zval *object, zval *member, int type, void **cache_slot);
- ZEND_API zval *zend_std_read_property(zval *object, zval *member, int type, void **cache_slot, zval *rv);
- ZEND_API void zend_std_write_property(zval *object, zval *member, zval *value, void **cache_slot);
- ZEND_API int zend_std_has_property(zval *object, zval *member, int has_set_exists, void **cache_slot);
- ZEND_API void zend_std_unset_property(zval *object, zval *member, void **cache_slot);
- ZEND_API zval *zend_std_read_dimension(zval *object, zval *offset, int type, zval *rv);
- ZEND_API void zend_std_write_dimension(zval *object, zval *offset, zval *value);
- ZEND_API int zend_std_has_dimension(zval *object, zval *offset, int check_empty);
- ZEND_API void zend_std_unset_dimension(zval *object, zval *offset);
- ZEND_API zend_function *zend_std_get_method(zend_object **obj_ptr, zend_string *method_name, const zval *key);
- ZEND_API zend_string *zend_std_get_class_name(const zend_object *zobj);
- ZEND_API int zend_std_compare_objects(zval *o1, zval *o2);
- ZEND_API int zend_std_get_closure(zval *obj, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zend_object **obj_ptr);
- ZEND_API void rebuild_object_properties(zend_object *zobj);
- ZEND_API int zend_check_private(zend_function *fbc, zend_class_entry *ce, zend_string *function_name);
- ZEND_API int zend_check_protected(zend_class_entry *ce, zend_class_entry *scope);
- ZEND_API int zend_check_property_access(zend_object *zobj, zend_string *prop_info_name);
- ZEND_API zend_function *zend_get_call_trampoline_func(zend_class_entry *ce, zend_string *method_name, int is_static);
- ZEND_API uint32_t *zend_get_property_guard(zend_object *zobj, zend_string *member);
- #define zend_free_trampoline(func) do { \
- if ((func) == &EG(trampoline)) { \
- EG(trampoline).common.function_name = NULL; \
- } else { \
- efree(func); \
- } \
- } while (0)
- END_EXTERN_C()
- #endif
|