55#define REFLECTION_ATTRIBUTE_IS_INSTANCEOF (1 << 1)
60#define REFLECTION_KEY_LEN 16
67#define REFLECTION_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(reflection, v)
72 return &
Z_OBJ_P(
object)->properties_table[0];
78 return &
Z_OBJ_P(
object)->properties_table[1];
110#define _DO_THROW(msg) \
111 zend_throw_exception(reflection_exception_ptr, msg, 0);
113#define GET_REFLECTION_OBJECT() do { \
114 intern = Z_REFLECTION_P(ZEND_THIS); \
115 if (intern->ptr == NULL) { \
116 if (EG(exception) && EG(exception)->ce == reflection_exception_ptr) { \
119 zend_throw_error(NULL, "Internal error: Failed to retrieve the reflection object"); \
124#define GET_REFLECTION_OBJECT_PTR(target) do { \
125 GET_REFLECTION_OBJECT(); \
126 target = intern->ptr; \
186#define Z_REFLECTION_P(zv) reflection_object_from_obj(Z_OBJ_P((zv)))
236 _free_function(reference->
fptr);
240static void reflection_free_objects_storage(
zend_object *
object)
247 reflection_free_parameter_reference(intern->
ptr);
259 _free_function(intern->
ptr);
262 reflection_free_property_reference(intern->
ptr);
267 zend_string_release(attr_ref->
filename);
288 *gc_data = &intern->
obj;
322 int count, count_static_props = 0, count_static_funcs = 0, count_shadow_props = 0;
328 smart_str_appendc(str,
'\n');
334 char *
kind =
"Class";
401 _class_const_string(str,
key, c,
ZSTR_VAL(sub_indent));
403 zend_string_release(sub_indent);
418 count_shadow_props++;
420 count_static_props++;
427 if (count_static_props > 0) {
432 _property_string(str, prop,
NULL,
ZSTR_VAL(sub_indent));
448 count_static_funcs++;
455 if (count_static_funcs > 0) {
463 _function_string(str, mptr, ce,
ZSTR_VAL(sub_indent));
480 _property_string(str, prop,
NULL,
ZSTR_VAL(sub_indent));
492 if (properties && zend_hash_num_elements(properties)) {
504 smart_str_append_smart_str(str, &prop_str);
506 smart_str_free(&prop_str);
529 smart_str_appendc(&method_str,
'\n');
530 _function_string(&method_str, mptr, ce,
ZSTR_VAL(sub_indent));
532 _free_function(closure);
536 smart_str_append_smart_str(str, &method_str);
540 smart_str_free(&method_str);
557 smart_str_appends(str, indent);
558 smart_str_appends(str,
"Constant [ ");
562 smart_str_appends(str,
"<");
564#define DUMP_CONST_FLAG(flag, output) \
566 if (flags & flag) { \
567 if (!first) smart_str_appends(str, ", "); \
568 smart_str_appends(str, output); \
575#undef DUMP_CONST_FLAG
577 smart_str_appends(str,
"> ");
580 smart_str_appends(str,
type);
581 smart_str_appendc(str,
' ');
582 smart_str_appends(str,
name);
583 smart_str_appends(str,
" ] { ");
586 smart_str_append(str,
ZSTR_KNOWN(ZEND_STR_ARRAY_CAPITALIZED));
592 smart_str_append(str, value_str);
593 zend_tmp_string_release(tmp_value_str);
596 smart_str_appends(str,
" }\n");
613 smart_str_append_printf(str,
"%s%s\n", indent, ZSTR_VAL(c->doc_comment));
618 smart_str_appends(str,
"Array");
620 smart_str_appends(str,
"Object");
622 zend_string *tmp_value_str;
623 zend_string *value_str = zval_get_tmp_string(&c->value, &tmp_value_str);
624 smart_str_append(str, value_str);
625 zend_tmp_string_release(tmp_value_str);
627 smart_str_appends(str,
" }\n");
630 zend_string_release(type_str);
671 smart_str_appendc(str,
'[');
674 smart_str_appends(str,
", ");
680 smart_str_appendc(str,
'\'');
682 smart_str_appendc(str,
'\'');
684 smart_str_append_long(str, num_key);
686 smart_str_appends(str,
" => ");
688 format_default_value(str,
zv);
690 smart_str_appendc(str,
']');
698 smart_str_appends(str,
"object(");
699 smart_str_append(str, class->name);
700 smart_str_appends(str,
")");
704 smart_str_append(str, ast_str);
705 zend_string_release(ast_str);
710static inline bool has_internal_arg_info(
const zend_function *fptr) {
726 smart_str_append(str, type_str);
727 smart_str_appendc(str,
' ');
728 zend_string_release(type_str);
731 smart_str_appendc(str,
'&');
734 smart_str_appends(str,
"...");
741 smart_str_appends(str,
" = ");
744 if (has_internal_arg_info(fptr)
748 smart_str_appends(str,
"<default>");
753 smart_str_appends(str,
" = ");
754 if (format_default_value(str, default_value) ==
FAILURE) {
760 smart_str_appends(str,
" ]");
778 smart_str_appendc(str,
'\n');
782 _parameter_string(str, fptr, arg_info, i, i < num_required, indent);
783 smart_str_appendc(str,
'\n');
802 count = zend_hash_num_elements(static_variables);
835 smart_str_appendl(str, indent,
strlen(indent));
839 smart_str_appends(str,
", deprecated");
862 smart_str_appends(str,
", ctor");
864 smart_str_appends(str,
"> ");
867 smart_str_appends(str,
"abstract ");
870 smart_str_appends(str,
"final ");
873 smart_str_appends(str,
"static ");
876 if (fptr->common.
scope) {
880 smart_str_appends(str,
"public ");
883 smart_str_appends(str,
"private ");
886 smart_str_appends(str,
"protected ");
889 smart_str_appends(str,
"<visibility error> ");
892 smart_str_appends(str,
"method ");
894 smart_str_appends(str,
"function ");
898 smart_str_appendc(str,
'&');
905 fptr->op_array.line_start,
906 fptr->op_array.line_end);
909 smart_str_0(¶m_indent);
911 _function_closure_string(str, fptr,
ZSTR_VAL(param_indent.
s));
913 _function_parameter_string(str, fptr,
ZSTR_VAL(param_indent.
s));
914 smart_str_free(¶m_indent);
920 zend_string_release(type_str);
922 smart_str_appends(str,
"]\n");
952 smart_str_appends(str,
"abstract ");
955 smart_str_appends(str,
"final ");
960 smart_str_appends(str,
"public ");
963 smart_str_appends(str,
"private ");
966 smart_str_appends(str,
"protected ");
971 smart_str_appends(str,
"private(set) ");
974 smart_str_appends(str,
"protected(set) ");
981 smart_str_appends(str,
"static ");
984 smart_str_appends(str,
"readonly ");
988 smart_str_append(str, type_str);
989 smart_str_appendc(str,
' ');
990 zend_string_release(type_str);
993 const char *class_name;
1000 smart_str_appends(str,
" = ");
1007 smart_str_appends(str,
" ]\n");
1011static void _extension_ini_string(
const zend_ini_entry *ini_entry,
smart_str *str,
const char *indent,
int number)
1018 smart_str_appends(str,
"ALL");
1021 smart_str_appends(str,
"USER");
1033 smart_str_appends(str,
"> ]\n");
1049 _class_string(str, ce,
NULL, indent);
1060 smart_str_appends(str,
"<persistent>");
1063 smart_str_appends(str,
"<temporary>" );
1066 module->module_number, module->name,
1067 (module->version ==
NO_VERSION_YET) ?
"<no_version>" : module->version);
1072 smart_str_appends(str,
"\n - Dependencies {\n");
1079 smart_str_appends(str,
"Required");
1082 smart_str_appends(str,
"Conflicts");
1085 smart_str_appends(str,
"Optional");
1088 smart_str_appends(str,
"Error");
1098 smart_str_appends(str,
") ]\n");
1108 _extension_ini_string(ini_entry, &str_ini, indent, module->module_number);
1110 if (smart_str_get_len(&str_ini) > 0) {
1112 smart_str_append_smart_str(str, &str_ini);
1115 smart_str_free(&str_ini);
1121 int num_constants = 0;
1130 if (num_constants) {
1132 smart_str_append_smart_str(str, &str_constants);
1135 smart_str_free(&str_constants);
1149 _function_string(str, fptr,
NULL,
" ");
1162 int num_classes = 0;
1165 _extension_class_string(ce,
key, &str_classes,
ZSTR_VAL(sub_indent), module, &num_classes);
1169 smart_str_append_smart_str(str, &str_classes);
1172 smart_str_free(&str_classes);
1193 reference->
filename = filename ? zend_string_copy(filename) :
NULL;
1194 reference->
target = target;
1195 intern->
ptr = reference;
1214 if (
attr->offset ==
offset && zend_string_equals(
attr->lcname, filter)) {
1215 reflection_attribute_factory(&tmp, attributes,
attr,
scope, target, filename);
1216 add_next_index_zval(
ret, &tmp);
1220 zend_string_release(filter);
1242 if (!instanceof_function(ce, base)) {
1247 reflection_attribute_factory(&tmp, attributes,
attr,
scope, target, filename);
1248 add_next_index_zval(
ret, &tmp);
1308 if (extension->
URL) {
1312 smart_str_appends(str,
"]\n");
1337 reflection_instantiate(reflection_ce,
object);
1347static void reflection_extension_factory(
zval *
object,
const char *name_str)
1350 size_t name_len =
strlen(name_str);
1354 lcname = zend_string_alloc(name_len, 0);
1356 module = zend_hash_find_ptr(&module_registry, lcname);
1357 zend_string_efree(
lcname);
1364 intern->
ptr =
module;
1367 ZVAL_STRINGL(reflection_prop_name(
object), module->name, name_len);
1384 reference->
fptr = fptr;
1385 intern->
ptr = reference;
1388 if (closure_object) {
1392 prop_name = reflection_prop_name(
object);
1393 if (has_internal_arg_info(fptr)) {
1427 if (type_mask_without_null != 0) {
1436 if ((type_mask_without_null & (type_mask_without_null - 1)) != 0) {
1443static void reflection_type_factory(
zend_type type,
zval *
object,
bool legacy_behavior)
1451 switch (type_kind) {
1468 intern->
ptr = reference;
1491 if (closure_object) {
1505 intern->
ptr = method;
1508 if (closure_object) {
1526 reference->
prop = prop;
1528 intern->
ptr = reference;
1539 reflection_property_factory(ce,
name, prop,
object);
1540 zend_string_release(
name);
1566 reflection_instantiate(case_reflection_class,
object);
1586 if (!default_value) {
1599 _DO_THROW(
"Cannot clone object using __clone()");
1674 lcname = zend_string_tolower(fname);
1676 zend_string_release(
lcname);
1681 "Function %s() does not exist",
ZSTR_VAL(fname));
1714 _function_string(&str, fptr, intern->
ce,
"");
1801 && closure_func && (called_scope || closure_func->
common.
scope)) {
1822 if (closure_func ==
NULL ||
1832 if (!static_variables) {
1847 (((
char*)static_variables->
arData) +
2083 zend_call_known_fcc(&fcc, &
retval,
num_args, params, named_params);
2092 zend_unwrap_reference(&
retval);
2122 zend_call_known_fcc(&fcc, &
retval, 0,
NULL, params);
2131 zend_unwrap_reference(&
retval);
2219 reflection_parameter_factory(
2220 _copy_function(fptr),
2224 i < fptr->common.required_num_args,
2309#define REFLECTION_CHECK_VALID_GENERATOR(ex) \
2311 _DO_THROW("Cannot fetch information from a closed Generator"); \
2331 root_generator = zend_generator_get_current(
generator);
2333 cur_prev =
generator->execute_data->prev_execute_data;
2344 EG(current_execute_data) = ex_backup;
2347 generator->execute_data->prev_execute_data = cur_prev;
2397 }
else if (
func->op_array.scope) {
2469 bool is_closure = 0;
2484 fptr = zend_hash_find_ptr(
EG(function_table),
lcname);
2485 zend_string_release(
lcname);
2488 "Function %s() does not exist",
Z_STRVAL_P(reference));
2503 _DO_THROW(
"Expected array($object, $method) or array($classname, $method)");
2510 name = zval_try_get_string(classref);
2517 zend_string_release(
name);
2520 zend_string_release(
name);
2523 name = zval_try_get_string(method);
2537 zend_string_release(
name);
2538 zend_string_release(
lcname);
2541 zend_string_release(
name);
2542 zend_string_release(
lcname);
2572 if (arg_name !=
NULL) {
2576 if (has_internal_arg_info(fptr)) {
2578 if (arg_info[i].
name) {
2587 if (arg_info[i].
name) {
2588 if (zend_string_equals(arg_name, arg_info[i].
name)) {
2595 if (position == -1) {
2596 _DO_THROW(
"The parameter specified by its name could not be found");
2605 _DO_THROW(
"The parameter specified by its offset could not be found");
2611 reflection_free_parameter_reference(intern->
ptr);
2615 ref->
arg_info = &arg_info[position];
2616 ref->
offset = (uint32_t)position;
2617 ref->
required = (uint32_t)position < fptr->common.required_num_args;
2624 if (reference && is_closure) {
2630 prop_name = reflection_prop_name(
object);
2632 if (has_internal_arg_info(fptr)) {
2679 if (has_internal_arg_info(param->
fptr)) {
2756 "Parameter uses \"self\" as type but function is not a class member");
2763 "Parameter uses \"parent\" as type but function is not a class member");
2768 "Parameter uses \"parent\" as type although class does not have a parent");
2776 "Class \"%s\" does not exist",
ZSTR_VAL(class_name));
2986 "Internal error: Failed to retrieve the default value");
3011 "Internal error: Failed to retrieve the default value");
3043 "Internal error: Failed to retrieve the default value");
3062 "::",
sizeof(
"::")-1,
3129 return zend_named_reflection_type_to_string(
type);
3187 zval reflection_type;
3193 reflection_type_factory(
type, &reflection_type, 0);
3293 size_t method_name_len;
3300 if (is_constructor) {
3303 "use ReflectionMethod::createFromMethodName() instead");
3326 orig_obj = arg1_obj;
3329 method_name_len =
ZSTR_LEN(arg2_str);
3330 }
else if (arg2_str) {
3331 class_name = zend_string_copy(arg1_str);
3333 method_name_len =
ZSTR_LEN(arg2_str);
3343 tmp_len = tmp -
name;
3345 class_name = zend_string_init(
name, tmp_len, 0);
3346 method_name = tmp + 2;
3347 method_name_len =
ZSTR_LEN(arg1_str) - tmp_len - 2;
3355 zend_string_release(class_name);
3359 zend_string_release(class_name);
3362 if (is_constructor) {
3380 "Method %s::%s() does not exist",
ZSTR_VAL(ce->
name), method_name);
3413 _function_string(&str, mptr, intern->
ce,
"");
3440 _DO_THROW(
"Given object is not an instance of the class this method was declared in");
3471 "Trying to invoke abstract method %s::%s()",
3499 "Trying to invoke non static method %s::%s() without an object",
3506 if (!instanceof_function(obj_ce, mptr->
common.
scope)) {
3510 _DO_THROW(
"Given object is not an instance of the class this method was declared in");
3525 zend_unwrap_reference(&
retval);
3880 if (classname_obj) {
3881 ce = classname_obj->
ce;
3921 "Typed property ReflectionClassConstant::$name "
3922 "must not be accessed before initialization");
3928 _class_const_string(&str,
Z_STR_P(
name), ref,
"");
3943 "Typed property ReflectionClassConstant::$name "
3944 "must not be accessed before initialization");
4055 "Typed property ReflectionClassConstant::$name "
4056 "must not be accessed before initialization");
4164 ZVAL_STR_COPY(reflection_prop_name(
object), arg_obj->ce->name);
4165 intern->
ptr = arg_obj->ce;
4196 zval *prop, prop_copy;
4206 if (statics != is_static) {
4300 old_scope =
EG(fake_scope);
4301 EG(fake_scope) = ce;
4303 EG(fake_scope) = old_scope;
4336 old_scope =
EG(fake_scope);
4337 EG(fake_scope) = ce;
4339 EG(fake_scope) = old_scope;
4396 _class_string(&str, ce, &intern->
obj,
"");
4571 lc_name = zend_string_tolower(
name);
4573 zend_string_release(lc_name);
4591 lc_name = zend_string_tolower(
name);
4592 if (!
Z_ISUNDEF(intern->
obj) && is_closure_invoke(ce, lc_name)
4598 }
else if (
Z_ISUNDEF(intern->
obj) && is_closure_invoke(ce, lc_name)
4610 zend_string_release(lc_name);
4623 reflection_method_factory(ce, mptr,
NULL, &method);
4638 bool filter_is_null = 1;
4644 if (filter_is_null) {
4661 obj =
Z_OBJ(obj_tmp);
4668 _free_function(closure);
4714 char *tmp, *str_name;
4715 size_t classname_len, str_name_len;
4737 classname = zend_string_alloc(classname_len, 0);
4739 ZSTR_VAL(classname)[classname_len] =
'\0';
4753 if (!instanceof_function(ce, ce2)) {
4759 property_info = zend_hash_str_find_ptr(&ce->
properties_info, str_name, str_name_len);
4760 if (property_info !=
NULL
4762 || property_info->
ce == ce)) {
4763 reflection_property_factory_str(ce, str_name, str_name_len, property_info,
return_value);
4778 if (pptr->
flags & filter) {
4780 reflection_property_factory(ce,
key, pptr, &
property);
4816 bool filter_is_null = 1;
4822 if (filter_is_null) {
4872 bool filter_is_null = 1;
4878 if (filter_is_null) {
4906 bool filter_is_null = 1;
4912 if (filter_is_null) {
4922 reflection_class_constant_factory(
name,
constant, &class_const);
4949 if ((c = zend_hash_find_ptr(constants_table,
name)) ==
NULL) {
5042 zend_object_store_ctor_failed(
Z_OBJ(obj));
5133 old_scope =
EG(fake_scope);
5134 EG(fake_scope) = ce;
5136 EG(fake_scope) = old_scope;
5205 argc = zend_hash_num_elements(
args);
5212 old_scope =
EG(fake_scope);
5213 EG(fake_scope) = ce;
5215 EG(fake_scope) = old_scope;
5238 int strategy,
bool is_reset)
5269 uint32_t
arg_num = 2 + is_reset;
5271 "contains invalid flags");
5277 "does not accept ReflectionClass::SKIP_DESTRUCTOR");
5282 if (zend_object_is_lazy(obj) && !zend_lazy_object_initialized(obj)) {
5354 RETURN_BOOL(zend_object_is_lazy(
object) && !zend_lazy_object_initialized(
object));
5371 if (zend_object_is_lazy(
object)
5372 && !zend_lazy_object_initialized(
object)) {
5376 if (zend_lazy_object_initialized(
object)) {
5397 if (zend_object_is_lazy(
object)
5398 && !zend_lazy_object_initialized(
object)) {
5402 if (zend_lazy_object_initialized(
object)) {
5423 if (!zend_object_is_lazy(
object)
5424 || zend_lazy_object_initialized(
object)) {
5572 class_name = trait->
name;
5624 argument = reflection_object_from_obj(class_obj);
5630 class_ce = argument->
ptr;
5640 RETURN_BOOL((ce != class_ce && instanceof_function(ce, class_ce)));
5656 if (interface_obj) {
5657 argument = reflection_object_from_obj(interface_obj);
5663 interface_ce = argument->
ptr;
5678 RETURN_BOOL(instanceof_function(ce, interface_ce));
5829 if (classname_obj) {
5830 ce = classname_obj->
ce;
5839 if (property_info ==
NULL
5841 && property_info->
ce != ce)) {
5843 if (property_info ==
NULL && classname_obj) {
5848 if (dynam_prop == 0) {
5854 zval *prop_name = reflection_prop_name(
object);
5858 if (dynam_prop == 0) {
5865 reflection_free_property_reference(intern->
ptr);
5869 reference->
prop = dynam_prop ?
NULL : property_info;
5871 intern->
ptr = reference;
5983 bool is_dynamic = ref->
prop ==
NULL;
5984 RETURN_BOOL(dynamic_true ? is_dynamic : !is_dynamic);
6053 _DO_THROW(
"Given object is not an instance of the class this property was declared in");
6058 if (member_p != &
rv) {
6062 zend_unwrap_reference(member_p);
6090 zend_string_release(method_name);
6098 zend_string_release(method_name);
6140 if (!instanceof_function(
Z_OBJCE_P(
object), intern->
ce)) {
6141 _DO_THROW(
"Given object is not an instance of the class this property was declared in");
6149 _DO_THROW(
"May not use getRawValue on static properties");
6157 if (member_p != &
rv) {
6161 zend_unwrap_reference(member_p);
6179 zend_call_known_instance_method_with_1_params(
func,
object,
NULL,
value);
6200 _DO_THROW(
"May not use setRawValue on static properties");
6207static zend_result reflection_property_check_lazy_compatible(
6213 "Can not use %s on dynamic property %s::$%s",
6221 "Can not use %s on static property %s::$%s",
6229 "Can not use %s on virtual property %s::$%s",
6238 "Can not use %s on internal class %s",
6264 while (zend_object_is_lazy_proxy(
object)
6265 && zend_lazy_object_initialized(
object)) {
6270 intern->
ce,
object);
6272 if (reflection_property_check_lazy_compatible(prop, ref->
unmangled_name,
6273 intern,
object,
"setRawValueWithoutLazyInitialization") ==
FAILURE) {
6283 reflection_property_set_raw_value(prop, ref->
unmangled_name, intern,
object,
6288 && zend_object_is_lazy(
object)
6289 && !zend_lazy_object_initialized(
object)) {
6295 && zend_object_is_lazy(
object)
6296 && !zend_lazy_object_initialized(
object)) {
6316 if (reflection_property_check_lazy_compatible(ref->
prop,
6318 "skipLazyInitialization") ==
FAILURE) {
6322 while (zend_object_is_lazy_proxy(
object)
6323 && zend_lazy_object_initialized(
object)) {
6340 if (zend_object_is_lazy(
object)
6341 && !zend_lazy_object_initialized(
object)) {
6364 while (zend_object_is_lazy_proxy(
object)
6365 && zend_lazy_object_initialized(
object)) {
6403 _DO_THROW(
"Given object is not an instance of the class this property was declared in");
6407 old_scope =
EG(fake_scope);
6408 EG(fake_scope) = intern->
ce;
6410 EG(fake_scope) = old_scope;
6743 "Extension \"%s\" does not exist", name_str);
6747 zval *prop_name = reflection_prop_name(
object);
6750 intern->
ptr =
module;
6767 _extension_string(&str, module,
"");
6859 if (ini_entry->
value) {
6883 _addinientry(ini_entry,
return_value, module->module_number);
6901 if (add_reflection_class) {
6979 rel_type =
"Required";
6980 len +=
sizeof(
"Required") - 1;
6983 rel_type =
"Conflicts";
6984 len +=
sizeof(
"Conflicts") - 1;
6987 rel_type =
"Optional";
6988 len +=
sizeof(
"Optional") - 1;
6992 len +=
sizeof(
"Error") - 1;
7004 relation = zend_string_alloc(
len, 0);
7007 dep->
rel ?
" " :
"",
7008 dep->
rel ? dep->
rel :
"",
7081 "Zend Extension \"%s\" does not exist", name_str);
7085 intern->
ptr = extension;
7102 _zend_extension_string(&str, extension,
"");
7171 if (extension->
URL) {
7202 "Cannot directly instantiate ReflectionReference. "
7203 "Use ReflectionReference::fromArrayElement() instead"
7259 unsigned char digest[20];
7268 _DO_THROW(
"Corrupted ReflectionReference object");
7292 _DO_THROW(
"Cannot directly instantiate ReflectionAttribute");
7298 _DO_THROW(
"Cannot clone object using __clone()");
7314 smart_str_appends(&str,
"Attribute [ ");
7315 smart_str_append(&str,
attr->data->name);
7316 smart_str_appends(&str,
" ]");
7318 if (
attr->data->argc > 0) {
7319 smart_str_appends(&str,
" {\n");
7322 for (uint32_t i = 0; i <
attr->data->argc; i++) {
7324 if (
attr->data->args[i].name !=
NULL) {
7325 smart_str_append(&str,
attr->data->args[i].name);
7326 smart_str_appends(&str,
" = ");
7329 if (format_default_value(&str, &
attr->data->args[i].value) ==
FAILURE) {
7330 smart_str_free(&str);
7334 smart_str_appends(&str,
" ]\n");
7336 smart_str_appends(&str,
" }\n");
7338 smart_str_appends(&str,
"}\n");
7340 smart_str_appendc(&str,
'\n');
7408 for (i = 0; i <
attr->data->argc; i++) {
7413 if (
attr->data->args[i].name) {
7462 zend_string_release(location);
7463 zend_string_release(allowed);
7515 if (class_const ==
NULL) {
7564 reflection_enum_case_factory(ce,
name,
constant, &class_const);
7706#define REFLECTION_CHECK_VALID_FIBER(fiber) do { \
7707 if (fiber == NULL || fiber->context.status == ZEND_FIBER_STATUS_INIT || fiber->context.status == ZEND_FIBER_STATUS_DEAD) { \
7708 zend_throw_error(NULL, "Cannot fetch information from a fiber that has not been started or is terminated"); \
7805 if (zend_hash_exists(&
object->ce->properties_info,
name)
7810 return &
EG(uninitialized_zval);
7833 size_t source_len =
ZSTR_LEN(
name) - backslash_prefixed;
7834 zend_string *lc_name = zend_string_alloc(source_len,
false);
7835 const char *ns_end = zend_memrchr(source,
'\\', source_len);
7841 memcpy(
ZSTR_VAL(lc_name) + ns_len, source + ns_len, source_len - ns_len);
7850 intern->
ptr = const_;
7853 zval *name_zv = reflection_prop_name(
object);
7957 reflection_object_handlers.free_obj = reflection_free_objects_storage;
7958 reflection_object_handlers.clone_obj =
NULL;
7959 reflection_object_handlers.write_property = _reflection_write_property;
7960 reflection_object_handlers.get_gc = reflection_get_gc;
count(Countable|array $value, int $mode=COUNT_NORMAL)
strstr(string $haystack, string $needle, bool $before_needle=false)
const php_stream_filter_ops * ops
foreach($dp as $el) foreach( $dp as $el) if( $pass2< 2) echo ""
PHPAPI ZEND_COLD void php_info_print_module(zend_module_entry *zend_module)
php_info_print_table_start()
#define PHP_MINIT_FUNCTION
#define PHP_MINFO_FUNCTION
unsigned const char * end
PHP_JSON_API size_t int options
#define REFLECTION_ATTRIBUTE_IS_INSTANCEOF
PHPAPI zend_class_entry * reflection_zend_extension_ptr
PHPAPI zend_class_entry * reflection_extension_ptr
PHPAPI zend_class_entry * reflection_function_ptr
struct _attribute_reference attribute_reference
reflection_object_handlers clone_obj
#define REFLECTION_CHECK_VALID_GENERATOR(ex)
PHPAPI zend_class_entry * reflection_attribute_ptr
struct _type_reference type_reference
PHPAPI zend_class_entry * reflector_ptr
PHPAPI zend_class_entry * reflection_constant_ptr
PHPAPI zend_class_entry * reflection_property_ptr
PHPAPI zend_class_entry * reflection_intersection_type_ptr
#define GET_REFLECTION_OBJECT_PTR(target)
PHPAPI zend_class_entry * reflection_parameter_ptr
PHPAPI zend_class_entry * reflection_fiber_ptr
#define Z_REFLECTION_P(zv)
unsigned char key[REFLECTION_KEY_LEN]
#define GET_REFLECTION_OBJECT()
PHPAPI void zend_reflection_class_factory(zend_class_entry *ce, zval *object)
PHPAPI zend_class_entry * reflection_reference_ptr
PHPAPI zend_class_entry * reflection_enum_ptr
PHPAPI zend_class_entry * reflection_enum_unit_case_ptr
#define REFLECTION_CHECK_VALID_FIBER(fiber)
#define DUMP_CONST_FLAG(flag, output)
#define REFLECTION_KEY_LEN
PHPAPI zend_class_entry * reflection_type_ptr
zend_module_entry reflection_module_entry
php_info_print_table_row(2, "Reflection", "enabled")
PHPAPI zend_class_entry * reflection_method_ptr
@ REF_TYPE_CLASS_CONSTANT
PHPAPI zend_class_entry * reflection_property_hook_type_ptr
PHPAPI zend_class_entry * reflection_object_ptr
PHPAPI zend_class_entry * reflection_ptr
struct _parameter_reference parameter_reference
PHPAPI zend_class_entry * reflection_named_type_ptr
struct _property_reference property_reference
php_info_print_table_end()
PHPAPI zend_class_entry * reflection_generator_ptr
PHPAPI zend_class_entry * reflection_class_constant_ptr
PHPAPI zend_class_entry * reflection_enum_backed_case_ptr
PHPAPI zend_class_entry * reflection_class_ptr
PHPAPI zend_class_entry * reflection_function_abstract_ptr
PHPAPI zend_class_entry * reflection_union_type_ptr
PHPAPI zend_class_entry * reflection_exception_ptr
void reflection_class_new_lazy(INTERNAL_FUNCTION_PARAMETERS, int strategy, bool is_reset)
#define PHP_REFLECTION_VERSION
zend_test_fiber * active_fiber
PHPAPI void PHP_SHA1Final(unsigned char digest[20], PHP_SHA1_CTX *context)
PHPAPI void PHP_SHA1Update(PHP_SHA1_CTX *context, const unsigned char *input, size_t inputLen)
#define PHP_SHA1Init(ctx)
struct _zend_arg_info * arg_info
zend_string * unmangled_name
zend_property_info * prop
zend_string * default_value
zend_string * doc_comment
HashTable constants_table
zend_object *(* create_object)(zend_class_entry *class_type)
struct _zend_module_entry * module
zval * default_static_members_table
struct _zend_class_entry::@126215362204241324314155352336150042254204116267::@166057154351252324007362117353350250255142166322 user
HashTable properties_info
zend_object_iterator *(* get_iterator)(zend_class_entry *ce, zval *object, int by_ref)
zend_class_name * trait_names
union _zend_class_entry::@126215362204241324314155352336150042254204116267 info
struct _zend_class_entry::@126215362204241324314155352336150042254204116267::@031207115026352130035014265255253014334154061307 internal
zend_trait_alias ** trait_aliases
zend_class_entry ** interfaces
int default_static_members_count
zend_function * constructor
uint32_t enum_backing_type
zend_class_entry * parent
zend_string * doc_comment
zval * default_properties_table
zend_execute_data * prev_execute_data
zend_function * function_handler
zend_class_entry * called_scope
zend_execute_data * stack_bottom
zend_fiber_context context
zend_execute_data * execute_data
zend_execute_data * execute_data
zend_string * function_name
zend_function * prototype
struct _zend_module_entry * module
zend_internal_arg_info * arg_info
zend_string * doc_comment
zend_object_get_properties_t get_properties
const zend_object_handlers * handlers
HashTable * static_variables
zend_string * doc_comment
zend_string * doc_comment
zend_trait_method_reference trait_method
zend_string * method_name
reflection_type_t ref_type
zend_function * prototype
uint32_t required_num_args
zend_string * function_name
struct _zend_function::@236135173067030250234125302313220025134003177336 common
zend_internal_function internal_function
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 INTERNAL_FUNCTION_PARAMETERS
#define DEBUG_BACKTRACE_PROVIDE_OBJECT
struct _zend_trait_method_reference zend_trait_method_reference
#define INTERNAL_FUNCTION_PARAM_PASSTHRU
ZEND_API zend_result zend_update_class_constants(zend_class_entry *class_type)
ZEND_API zval * zend_read_property_ex(zend_class_entry *scope, zend_object *object, zend_string *name, bool silent, zval *rv)
ZEND_API const char * zend_zval_value_name(const zval *arg)
ZEND_API zend_result add_next_index_stringl(zval *arg, const char *str, size_t length)
ZEND_API zval * zend_read_static_property_ex(zend_class_entry *scope, zend_string *name, bool silent)
ZEND_API HashTable module_registry
ZEND_API zend_result zend_get_default_from_internal_arg_info(zval *default_value_zval, zend_internal_arg_info *arg_info)
ZEND_API const char * zend_zval_type_name(const zval *arg)
ZEND_API zend_result object_init_ex(zval *arg, zend_class_entry *class_type)
ZEND_API ZEND_COLD void zend_argument_error(zend_class_entry *error_ce, uint32_t arg_num, const char *format,...)
ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec,...)
ZEND_API void object_properties_init(zend_object *object, zend_class_entry *class_type)
ZEND_API bool zend_is_callable_ex(zval *callable, zend_object *object, uint32_t check_flags, zend_string **callable_name, zend_fcall_info_cache *fcc, char **error)
ZEND_API void add_assoc_str_ex(zval *arg, const char *key, size_t key_len, zend_string *str)
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format,...)
ZEND_API ZEND_COLD void zend_argument_type_error(uint32_t arg_num, const char *format,...)
ZEND_API void zend_update_property_ex(zend_class_entry *scope, zend_object *object, zend_string *name, zval *value)
ZEND_API zend_result zend_update_class_constant(zend_class_constant *c, const zend_string *name, zend_class_entry *scope)
ZEND_API zend_result zend_update_static_property_ex(zend_class_entry *scope, zend_string *name, zval *value)
ZEND_API zend_result add_next_index_str(zval *arg, zend_string *str)
ZEND_API zend_result zend_parse_parameters_ex(int flags, uint32_t num_args, const char *type_spec,...)
#define CE_STATIC_MEMBERS(ce)
#define Z_PARAM_FUNC(dest_fci, dest_fcc)
#define RETURN_COPY_DEREF(zv)
struct _zend_fcall_info_cache zend_fcall_info_cache
#define Z_PARAM_OBJ_OF_CLASS_OR_STR(destination_object, base_ce, destination_string)
#define RETURN_STRINGL(s, l)
#define ZEND_PARSE_PARAMS_QUIET
#define ZEND_PARSE_PARAMETERS_END()
#define Z_PARAM_STR_OR_NULL(dest)
#define ZEND_PARSE_PARAMETERS_NONE()
#define Z_PARAM_OBJ_OR_STR(destination_object, destination_string)
#define ZVAL_STRING(z, s)
#define ZEND_DECLARE_MODULE_GLOBALS(module_name)
#define RETVAL_STR_COPY(s)
#define RETVAL_NEW_STR(s)
#define zend_parse_parameters_none()
#define Z_PARAM_STR(dest)
#define ZEND_PARSE_PARAMETERS_START(min_num_args, max_num_args)
#define ZEND_END_MODULE_GLOBALS(module_name)
#define Z_PARAM_LONG(dest)
#define RETURN_OBJ_COPY(r)
struct _zend_fcall_info zend_fcall_info
#define ZEND_METHOD(classname, name)
#define Z_PARAM_OBJ(dest)
#define CE_CONSTANTS_TABLE(ce)
#define Z_PARAM_ARRAY_HT(dest)
#define Z_PARAM_OBJ_OF_CLASS(dest, _ce)
#define RETURN_COPY_VALUE(zv)
#define Z_PARAM_STR_OR_LONG(dest_str, dest_long)
#define Z_PARAM_OBJECT_OF_CLASS(dest, _ce)
#define RETURN_EMPTY_ARRAY()
#define RETURN_EMPTY_STRING()
ZEND_API void zend_call_known_function(zend_function *fn, zend_object *object, zend_class_entry *called_scope, zval *retval_ptr, uint32_t param_count, zval *params, HashTable *named_params)
#define Z_PARAM_ZVAL(dest)
#define ZVAL_STRINGL(z, s, l)
#define RETURN_ZVAL(zv, copy, dtor)
#define Z_PARAM_OBJECT_OR_NULL(dest)
#define ZEND_BEGIN_MODULE_GLOBALS(module_name)
#define RETVAL_STRINGL(s, l)
#define RETURN_STR_COPY(s)
#define Z_PARAM_VARIADIC_WITH_NAMED(dest, dest_num, dest_named)
ZEND_API ZEND_COLD zend_string * zend_ast_export(const char *prefix, zend_ast *ast, const char *suffix)
@ ZEND_AST_CONSTANT_CLASS
ZEND_API zend_result zend_get_attribute_value(zval *ret, zend_attribute *attr, uint32_t i, zend_class_entry *scope)
ZEND_API zend_result zend_get_attribute_object(zval *obj, zend_class_entry *attribute_ce, zend_attribute *attribute_data, zend_class_entry *scope, zend_string *filename)
ZEND_API bool zend_is_attribute_repeated(HashTable *attributes, zend_attribute *attr)
uint32_t zend_attribute_attribute_get_flags(zend_attribute *attr, zend_class_entry *scope)
ZEND_API zend_string * zend_get_attribute_target_names(uint32_t flags)
ZEND_API zend_attribute * zend_get_attribute_str(HashTable *attributes, const char *str, size_t len)
#define ZEND_ATTRIBUTE_TARGET_METHOD
#define ZEND_ATTRIBUTE_TARGET_PARAMETER
#define ZEND_ATTRIBUTE_IS_REPEATABLE
struct _zend_attribute zend_attribute
#define ZEND_ATTRIBUTE_TARGET_FUNCTION
#define ZEND_ATTRIBUTE_TARGET_CLASS_CONST
#define ZEND_ATTRIBUTE_TARGET_PROPERTY
#define ZEND_ATTRIBUTE_TARGET_CLASS
ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int options, int limit)
strcmp(string $string1, string $string2)
ZEND_API const zend_function * zend_get_closure_method_def(zend_object *obj)
ZEND_API zend_class_entry * zend_ce_closure
ZEND_API zval * zend_get_closure_this_ptr(zval *obj)
zend_string_release_ex(func->internal_function.function_name, 0)
ZEND_API void zend_create_fake_closure(zval *res, zend_function *func, zend_class_entry *scope, zend_class_entry *called_scope, zval *this_ptr)
ZEND_API zend_function * zend_get_closure_invoke_method(zend_object *object)
#define ZEND_CLOSURE_OBJECT(op_array)
ZEND_API zend_string * zend_type_to_string(zend_type type)
#define ZEND_ARG_IS_PROMOTED(arg_info)
#define ZEND_DESTRUCTOR_FUNC_NAME
#define OBJ_PROP_TO_NUM(offset)
#define ZEND_USER_CODE(type)
#define ZEND_ACC_FAKE_CLOSURE
#define ZEND_ACC_IMPLICIT_ABSTRACT_CLASS
#define ZEND_INTERNAL_FUNCTION
#define ZEND_ACC_ABSTRACT
#define ZEND_CLASS_CONST_FLAGS(c)
#define ZEND_ACC_PROMOTED
#define ZEND_ACC_READONLY
#define ZEND_ACC_PROTECTED_SET
#define ZEND_ARG_SEND_MODE(arg_info)
#define zend_unmangle_property_name(mangled_property, class_name, prop_name)
#define ZEND_FETCH_CLASS_TRAIT
#define ZEND_ACC_PPP_SET_MASK
#define ZEND_ACC_USER_ARG_INFO
#define ZEND_ACC_EXPLICIT_ABSTRACT_CLASS
#define ZEND_USER_FUNCTION
#define ZEND_ACC_INTERFACE
#define ZEND_ACC_PRIVATE_SET
#define ZEND_ACC_CALL_VIA_TRAMPOLINE
#define ZEND_ACC_GENERATOR
struct _zend_op_array zend_op_array
#define ZEND_ACC_READONLY_CLASS
#define OBJ_PROP(obj, offset)
struct _zend_class_constant zend_class_constant
struct _zend_property_info zend_property_info
#define ZEND_BIND_IMPLICIT
#define ZEND_ARG_TYPE_IS_TENTATIVE(arg_info)
struct _zend_internal_arg_info zend_internal_arg_info
#define ZEND_ACC_ANON_CLASS
#define RT_CONSTANT(opline, node)
#define ZEND_ACC_PPP_MASK
#define ZEND_ARG_IS_VARIADIC(arg_info)
#define ZEND_ACC_HAS_RETURN_TYPE
struct _zend_arg_info zend_arg_info
#define ZEND_ACC_PUBLIC_SET
#define ZEND_ACC_VARIADIC
#define ZEND_CLASS_CONST_IS_CASE
#define ZEND_INTERNAL_CLASS
struct _zend_internal_function zend_internal_function
#define ZEND_ACC_DEPRECATED
#define ZEND_INVOKE_FUNC_NAME
#define ZEND_ACC_RETURN_REFERENCE
char * zend_visibility_string(uint32_t fn_flags)
#define ZEND_ACC_PROTECTED
#define ZEND_BIND_EXPLICIT
#define strcasecmp(s1, s2)
ZEND_API zend_constant * zend_get_constant_ptr(zend_string *name)
#define ZEND_CONSTANT_FLAGS(c)
#define ZEND_CONSTANT_MODULE_NUMBER(c)
#define CONST_NO_FILE_CACHE
struct _zend_constant zend_constant
ZEND_API zend_class_entry * zend_ce_exception
ZEND_API void zend_clear_exception(void)
ZEND_API ZEND_COLD zend_object * zend_throw_exception_ex(zend_class_entry *exception_ce, zend_long code, const char *format,...)
ZEND_API zend_function *ZEND_FASTCALL zend_fetch_function(zend_string *name)
ZEND_API bool zend_never_inline zend_verify_property_type(const zend_property_info *info, zval *property, bool strict)
ZEND_API bool ZEND_FASTCALL zend_verify_ref_assignable_zval(zend_reference *ref, zval *zv, bool strict)
ZEND_API zend_class_entry * zend_lookup_class(zend_string *name)
ZEND_API zend_class_entry * zend_fetch_class_by_name(zend_string *class_name, zend_string *lcname, uint32_t fetch_type)
ZEND_API zend_result ZEND_FASTCALL zval_update_constant_ex(zval *pp, zend_class_entry *scope)
ZEND_API zend_string * get_active_function_or_method_name(void)
ZEND_API zend_class_entry * zend_lookup_class_ex(zend_string *name, zend_string *lcname, uint32_t flags)
ZEND_API zend_extension * zend_get_extension(const char *extension_name)
struct _zend_extension zend_extension
ZEND_API zend_class_entry * zend_ce_fiber
union _zend_function zend_function
ZEND_API zend_class_entry * zend_ce_generator
struct _zend_generator zend_generator
struct _zend_ini_entry zend_ini_entry
struct _zend_fiber zend_fiber
ZEND_API zval *ZEND_FASTCALL zend_hash_next_index_insert_new(HashTable *ht, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_next_index_insert(HashTable *ht, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_add_new(HashTable *ht, zend_string *key, zval *pData)
ZEND_API void ZEND_FASTCALL zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor)
ZEND_API HashTable *ZEND_FASTCALL zend_array_dup(HashTable *source)
ZEND_API zval *ZEND_FASTCALL zend_hash_update(HashTable *ht, zend_string *key, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_find(const HashTable *ht, zend_string *key)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_find(const HashTable *ht, zend_ulong h)
#define ZEND_HASH_MAP_FOREACH_PTR(ht, _ptr)
#define ZEND_HASH_PACKED_FOREACH_PTR(ht, _ptr)
#define ZEND_HASH_FOREACH_KEY_VAL(ht, _h, _key, _val)
#define ZEND_HASH_FOREACH_STR_KEY_VAL(ht, _key, _val)
#define ZEND_HASH_MAP_FOREACH_STR_KEY(ht, _key)
#define ZEND_HASH_MAP_FOREACH_STR_KEY_PTR(ht, _key, _ptr)
#define ZEND_HASH_FOREACH_END()
#define ZEND_HASH_FOREACH_STR_KEY(ht, _key)
ZEND_API zend_class_entry * zend_ce_traversable
ZEND_API zend_class_entry * zend_ce_stringable
ZEND_API bool zend_class_can_be_lazy(zend_class_entry *ce)
ZEND_API zend_object * zend_lazy_object_mark_as_initialized(zend_object *obj)
zend_object * zend_lazy_object_get_instance(zend_object *obj)
ZEND_API zend_object * zend_lazy_object_init(zend_object *obj)
ZEND_API zend_object * zend_object_make_lazy(zend_object *obj, zend_class_entry *reflection_ce, zval *initializer_zv, zend_fcall_info_cache *initializer_fcc, zend_lazy_object_flags_t flags)
void zend_lazy_object_realize(zend_object *obj)
bool zend_lazy_object_decr_lazy_props(zend_object *obj)
zval * zend_lazy_object_get_initializer_zv(zend_object *obj)
#define ZEND_LAZY_OBJECT_STRATEGY_GHOST
#define ZEND_LAZY_OBJECT_USER_MASK
#define ZEND_LAZY_OBJECT_SKIP_DESTRUCTOR
#define ZEND_LAZY_OBJECT_STRATEGY_PROXY
struct _zend_string zend_string
#define ZEND_MAP_PTR_GET(ptr)
#define ZEND_MAP_PTR_SET(ptr, val)
#define STANDARD_MODULE_HEADER
#define ZEND_MODULE_GLOBALS(module_name)
#define MODULE_DEP_OPTIONAL
struct _zend_module_dep zend_module_dep
#define MODULE_DEP_REQUIRED
struct _zend_module_entry zend_module_entry
#define MODULE_DEP_CONFLICTS
#define STANDARD_MODULE_PROPERTIES_EX
#define MODULE_PERSISTENT
ZEND_API zval * zend_std_get_static_property_with_info(zend_class_entry *ce, zend_string *property_name, int type, zend_property_info **property_info_ptr)
ZEND_API HashTable * zend_get_properties_no_lazy_init(zend_object *zobj)
ZEND_API void zend_class_init_statics(zend_class_entry *class_type)
ZEND_API HashTable * zend_std_get_properties(zend_object *zobj)
ZEND_API const zend_object_handlers std_object_handlers
ZEND_API zval * zend_std_write_property(zend_object *zobj, zend_string *name, zval *value, void **cache_slot)
ZEND_API zend_function * zend_get_property_hook_trampoline(const zend_property_info *prop_info, zend_property_hook_kind kind, zend_string *prop_name)
ZEND_API zval * zend_std_get_static_property(zend_class_entry *ce, zend_string *property_name, int type)
#define ZEND_PROPERTY_EXISTS
#define IS_VALID_PROPERTY_OFFSET(offset)
#define zend_free_trampoline(func)
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 char *ZEND_FASTCALL zend_str_tolower_copy(char *dest, const char *source, size_t length)
ZEND_API char *ZEND_FASTCALL zend_str_tolower_dup(const char *source, size_t length)
#define ALLOCA_FLAG(name)
#define do_alloca(p, use_heap)
#define zend_always_inline
#define XtOffsetOf(s_type, field)
#define ZEND_UNREACHABLE()
#define free_alloca(p, use_heap)
#define EMPTY_SWITCH_DEFAULT_CASE()
#define UNEXPECTED(condition)
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
ZEND_API void ZEND_FASTCALL smart_str_append_escaped(smart_str *str, const char *s, size_t l)
ZEND_API zend_result ZEND_FASTCALL smart_str_append_zval(smart_str *dest, const zval *value, size_t truncate)
ZEND_API void smart_str_append_printf(smart_str *dest, const char *format,...)
ZEND_API zend_string * zend_string_concat2(const char *str1, size_t str1_len, const char *str2, size_t str2_len)
ZEND_API zend_string * zend_string_concat3(const char *str1, size_t str1_len, const char *str2, size_t str2_len, const char *str3, size_t str3_len)
#define ZSTR_ALLOCA_FREE(str, use_heap)
#define zend_string_equals_literal(str, literal)
#define zend_string_equals_ci(s1, s2)
#define zend_string_equals_literal_ci(str, c)
#define ZSTR_ALLOCA_ALLOC(str, _len, use_heap)
#define ZEND_TYPE_IS_ITERABLE_FALLBACK(t)
#define ZEND_TYPE_PURE_MASK(t)
#define Z_ISREF_P(zval_p)
#define Z_CONSTANT_FLAGS_P(zval_p)
#define Z_TRY_ADDREF_P(pz)
#define ZEND_TYPE_NAME(t)
#define ZEND_TYPE_INIT_MASK(_type_mask)
#define Z_REFVAL_P(zval_p)
#define Z_STRVAL_P(zval_p)
#define Z_ISUNDEF_P(zval_p)
#define Z_ARRVAL_P(zval_p)
#define ZEND_TYPE_IS_INTERSECTION(t)
#define ZVAL_STR_COPY(z, s)
struct _zend_array HashTable
#define ZVAL_COPY_OR_DUP(z, v)
#define Z_OBJ_HT_P(zval_p)
#define ZEND_TYPE_HAS_NAME(t)
#define ZEND_TYPE_IS_UNION(t)
#define ZEND_TYPE_FULL_MASK(t)
#define ZEND_TYPE_HAS_LIST(t)
#define ZEND_TYPE_LIST_FOREACH_END()
#define Z_OBJCE_P(zval_p)
#define ZEND_TYPE_INIT_CODE(code, allow_null, extra_flags)
#define ZEND_TYPE_IS_ONLY_MASK(t)
#define ZEND_TYPE_IS_SET(t)
#define ZVAL_OBJ_COPY(z, o)
ZEND_RESULT_CODE zend_result
#define ZVAL_COPY_PROP(z, v)
#define ZEND_TYPE_PURE_MASK_WITHOUT_NULL(t)
struct _zend_object_handlers zend_object_handlers
#define ZEND_TYPE_INIT_CLASS(class_name, allow_null, extra_flags)
#define ZEND_TYPE_ALLOW_NULL(t)
#define ZEND_TYPE_LIST_FOREACH(list, type_ptr)
#define ZEND_TYPE_LIST(t)
struct _zend_ast zend_ast
struct _zend_execute_data zend_execute_data
#define Z_ASTVAL_P(zval_p)
#define ZVAL_COPY_VALUE(z, v)
#define Z_OBJ_HANDLER(zval, hf)
struct _zend_reference zend_reference
#define ZVAL_DEINDIRECT(z)
#define _ZEND_TYPE_ITERABLE_BIT
#define ZEND_TYPE_IS_COMPLEX(t)
ZEND_API void zval_ptr_dtor(zval *zval_ptr)
ZEND_API void zval_add_ref(zval *p)
zend_property_info * prop_info
zend_generator * generator
function(EX_VAR(opline->result.var))
#define ZEND_RECV_VARIADIC