40static uint32_t zho_find_dynamic_prop_offset(
zend_array *properties)
55static zend_array *zho_build_properties_ex(
zend_object *
zobj,
bool check_access,
bool force_ptr,
bool include_dynamic_props)
59 ? zend_hash_num_elements(
zobj->properties)
64 int32_t parent_count = 0;
87 const char *tmp = zend_get_unmangled_property_name(property_name);
91 property_name = unmangled_name;
93 zend_string_release(unmangled_name);
100 zend_hash_update_ptr(properties, property_name,
prop_info);
110 zend_string_release(property_name);
117 if (include_dynamic_props &&
zobj->properties) {
124 zval *tmp = _zend_hash_append(properties, prop_name, prop_value);
141 return zho_build_properties_ex(
zobj,
false,
false,
true);
175 if (
ZSTR_VAL(unmangled_name)[0] ==
'\0') {
176 const char *tmp = zend_get_unmangled_property_name(unmangled_name);
177 unmangled_name = zend_string_init(tmp,
strlen(tmp),
false);
181 zend_string_release(unmangled_name);
183 if (
value == &
EG(uninitialized_zval)) {
194 if (!hooked_iter->
by_ref) {
199 "Cannot acquire reference to readonly property %s::$%s",
212 const char *tmp = zend_get_unmangled_property_name(
prop_info->name);
262 zho_declared_it_fetch_current(iter);
264 zho_dynamic_it_fetch_current(iter);
271 zho_it_move_forward(iter);
288 zho_it_fetch_current(iter);
295 zho_it_fetch_current(iter);
302 zho_it_fetch_current(iter);
317 zend_hash_move_forward(properties);
318 if (zend_hash_has_more_elements(properties) !=
SUCCESS) {
339 zend_hash_internal_pointer_reset(properties);
349 zend_get_gc_buffer_add_zval(gc_buffer, &iter->
data);
350 zend_get_gc_buffer_add_zval(gc_buffer, &hooked_iter->
declared_props);
351 zend_get_gc_buffer_add_zval(gc_buffer, &hooked_iter->
current_data);
352 zend_get_gc_buffer_use(gc_buffer, table,
n);
359 zho_it_get_current_data,
360 zho_it_get_current_key,
381 iterator->
it.
funcs = &zend_hooked_object_it_funcs;
382 iterator->
by_ref = by_ref;
383 zend_array *properties = zho_build_properties_ex(
zobj,
true,
true,
false);
386 zho_dynamic_it_init(iterator);
390 return &iterator->
it;
unsigned const char * pos
unsigned char key[REFLECTION_KEY_LEN]
HashTable properties_info
int default_properties_count
const zend_object_iterator_funcs * funcs
uint32_t dynamic_prop_offset
struct _zend_function::@236135173067030250234125302313220025134003177336 common
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
ZEND_API zval * zend_read_property_ex(zend_class_entry *scope, zend_object *object, zend_string *name, bool silent, zval *rv)
#define ZEND_ACC_READONLY
#define OBJ_PROP(obj, offset)
struct _zend_property_info zend_property_info
#define ZEND_ACC_RETURN_REFERENCE
#define ZEND_ACC_PROTECTED
#define ZEND_REF_ADD_TYPE_SOURCE(ref, source)
union _zend_function zend_function
ZEND_API zend_get_gc_buffer * zend_get_gc_buffer_create(void)
ZEND_API uint32_t ZEND_FASTCALL zend_hash_iterator_add(HashTable *ht, HashPosition pos)
ZEND_API zval *ZEND_FASTCALL zend_hash_lookup(HashTable *ht, zend_string *key)
ZEND_API HashPosition ZEND_FASTCALL zend_hash_iterator_pos(uint32_t idx, HashTable *ht)
ZEND_API void ZEND_FASTCALL zend_hash_real_init_mixed(HashTable *ht)
ZEND_API const HashTable zend_empty_array
ZEND_API void ZEND_FASTCALL zend_hash_iterator_del(uint32_t idx)
#define ZEND_HASH_MAP_FOREACH_VAL(ht, _val)
#define ZEND_HASH_MAP_FOREACH_PTR(ht, _ptr)
#define zend_new_array(size)
#define ZEND_HASH_FOREACH_STR_KEY_VAL(ht, _key, _val)
#define ZEND_HASH_FOREACH_END()
#define HASH_FLAG_HAS_EMPTY_IND
ZEND_API void zend_iterator_init(zend_object_iterator *iter)
struct _zend_object_iterator zend_object_iterator
struct _zend_object_iterator_funcs zend_object_iterator_funcs
ZEND_API zend_object * zend_lazy_object_init(zend_object *obj)
struct _zend_string zend_string
ZEND_API zend_result zend_check_property_access(const zend_object *zobj, zend_string *prop_info_name, bool is_dynamic)
#define UNEXPECTED(condition)
ZEND_API zend_array * zend_hooked_object_build_properties(zend_object *zobj)
ZEND_API zend_object_iterator * zend_hooked_object_get_iterator(zend_class_entry *ce, zval *object, int by_ref)
struct _zend_array zend_array
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
#define Z_TRY_ADDREF_P(pz)
#define ZVAL_STR_COPY(z, s)
#define ZVAL_INDIRECT(z, v)
struct _zend_array HashTable
#define ZEND_TYPE_IS_SET(t)
#define ZVAL_MAKE_REF(zv)
#define ZVAL_OBJ_COPY(z, o)
ZEND_RESULT_CODE zend_result
#define ZVAL_DEINDIRECT(z)
ZEND_API void zval_ptr_dtor(zval *zval_ptr)
zend_property_info * prop_info