58 if (param_count>arg_count) {
62 while (param_count-->0) {
80 if (param_count>arg_count) {
84 while (param_count-->0) {
108 zend_tmp_string_release(tmp_property_name);
231 "%s() expects %s %d argument%s, %d given",
233 min_num_args == max_num_args ?
"exactly" :
num_args < min_num_args ?
"at least" :
"at most",
234 num_args < min_num_args ? min_num_args : max_num_args,
235 (
num_args < min_num_args ? min_num_args : max_num_args) == 1 ?
"" :
"s",
286 static const char *
const expected_error[] = {
295 if ((expected_type == Z_EXPECTED_PATH || expected_type == Z_EXPECTED_PATH_OR_NULL)
394 const char *arg_name;
395 char *message =
NULL;
406 arg_name ?
" ($" :
"", arg_name ? arg_name :
"", arg_name ?
")" :
"", message
417 va_start(va, format);
427 va_start(va, format);
437 va_start(va, format);
452 zend_get_object_type(old_ce),
455 zend_error(
type,
"Cannot redeclare %s %s (previously declared in %s:%d)",
456 zend_get_object_type(old_ce),
476 if (!try_convert_to_string(
arg)) {
483 if ((!*pce || !instanceof_function(*pce, ce_base))) {
497static ZEND_COLD bool zend_null_arg_deprecated(
const char *fallback_type, uint32_t
arg_num) {
500 uint32_t arg_offset =
arg_num - 1;
501 if (arg_offset >=
func->common.num_args) {
503 arg_offset =
func->common.num_args;
513 const char *
type = type_str ?
ZSTR_VAL(type_str) : fallback_type;
515 "%s(): Passing null to parameter #%" PRIu32
"%s%s%s of type %s is deprecated",
517 arg_name ?
" ($" :
"", arg_name ? arg_name :
"", arg_name ?
")" :
"",
521 zend_string_release(type_str);
593 lval = zend_dval_to_lval(d);
595 if (
UNEXPECTED(!zend_is_long_compatible(d, lval))) {
705 zend_string_release(str);
810static const char *zend_parse_arg_impl(
zval *
arg, va_list *va,
const char **spec,
char **
error, uint32_t
arg_num)
812 const char *spec_walk = *spec;
813 char c = *spec_walk++;
821 if (*spec_walk ==
'/') {
825 }
else if (*spec_walk ==
'!') {
844 return check_null ?
"?int" :
"int";
851 double *
p = va_arg(*va,
double *);
859 return check_null ?
"?float" :
"float";
868 if (!zend_parse_arg_number(
arg,
p, check_null,
arg_num)) {
869 return check_null ?
"int|float|null" :
"int|float";
876 char **
p = va_arg(*va,
char **);
877 size_t *pl = va_arg(*va,
size_t *);
878 if (!zend_parse_arg_string(
arg,
p, pl, check_null,
arg_num)) {
879 return check_null ?
"?string" :
"string";
886 char **
p = va_arg(*va,
char **);
887 size_t *pl = va_arg(*va,
size_t *);
888 if (!zend_parse_arg_path(
arg,
p, pl, check_null,
arg_num)) {
893 return check_null ?
"?string" :
"string";
902 if (!zend_parse_arg_path_str(
arg, str, check_null,
arg_num)) {
907 return check_null ?
"?string" :
"string";
916 if (!zend_parse_arg_str(
arg, str, check_null,
arg_num)) {
917 return check_null ?
"?string" :
"string";
924 bool *
p = va_arg(*va,
bool *);
932 return check_null ?
"?bool" :
"bool";
941 if (!zend_parse_arg_resource(
arg,
p, check_null)) {
942 return check_null ?
"resource or null" :
"resource";
952 if (!zend_parse_arg_array(
arg,
p, check_null, c ==
'A')) {
953 return check_null ?
"?array" :
"array";
963 if (!zend_parse_arg_array_ht(
arg,
p, check_null, c ==
'H', separate)) {
964 return check_null ?
"?array" :
"array";
973 if (!zend_parse_arg_object(
arg,
p,
NULL, check_null)) {
974 return check_null ?
"?object" :
"object";
984 if (!zend_parse_arg_object(
arg,
p, ce, check_null)) {
993 return check_null ?
"?object" :
"object";
1008 if (!try_convert_to_string(
arg)) {
1019 if ((!*pce || !instanceof_function(*pce, ce_base))) {
1041 char *is_callable_error =
NULL;
1060 if (is_callable_error) {
1061 zend_spprintf(
error, 0,
"must be a valid callback%s, %s", check_null ?
" or null" :
"", is_callable_error);
1062 efree(is_callable_error);
1065 return check_null ?
"a valid callback or null" :
"a valid callback";
1073 zend_parse_arg_zval_deref(real_arg,
p, check_null);
1079 ZEND_ASSERT(0 &&
"ZPP modifier no longer supported");
1093 const char *expected_type =
NULL;
1097 if (expected_type) {
1103 if (
strcmp(
error,
"must not contain any null bytes") == 0) {
1135static ZEND_COLD void zend_parse_parameters_debug_error(
const char *
msg) {
1137 const char *class_name = active_function->
common.
scope
1140 class_name, class_name[0] ?
"::" :
"",
1146 const char *spec_walk;
1149 uint32_t min_num_args = 0;
1150 uint32_t max_num_args = 0;
1151 uint32_t post_varargs = 0;
1153 bool have_varargs = 0;
1154 bool have_optional_args = 0;
1156 uint32_t *n_varargs =
NULL;
1158 for (spec_walk = type_spec; *spec_walk; spec_walk++) {
1167 case 'f':
case 'F':
case 'A':
1175 min_num_args = max_num_args;
1176 have_optional_args = 1;
1187 zend_parse_parameters_debug_error(
1188 "only one varargs specifier (* or +) is permitted");
1197 post_varargs = max_num_args;
1206 zend_parse_parameters_debug_error(
"bad type specifier while parsing parameters");
1212 if (!have_optional_args) {
1213 min_num_args = max_num_args;
1218 post_varargs = max_num_args - post_varargs;
1228 min_num_args == max_num_args ?
"exactly" :
num_args < min_num_args ?
"at least" :
"at most",
1229 num_args < min_num_args ? min_num_args : max_num_args,
1230 (
num_args < min_num_args ? min_num_args : max_num_args) == 1 ?
"" :
"s",
1240 zend_parse_parameters_debug_error(
"could not obtain parameters for parsing");
1246 if (*type_spec ==
'|') {
1250 if (*type_spec ==
'*' || *type_spec ==
'+') {
1251 uint32_t num_varargs =
num_args + 1 - post_varargs;
1254 varargs = va_arg(*va,
zval **);
1255 n_varargs = va_arg(*va, uint32_t *);
1258 if (num_varargs > 0) {
1259 *n_varargs = num_varargs;
1275 if (varargs && *varargs) {
1292 va_start(va, type_spec);
1306 va_start(va, type_spec);
1319 const char *
p = type_spec;
1327 bool is_method =
EG(current_execute_data)->func->common.scope !=
NULL;
1330 va_start(va, type_spec);
1336 va_start(va, type_spec);
1338 object = va_arg(va,
zval **);
1342 if (ce && !instanceof_function(
Z_OBJCE_P(this_ptr), ce)) {
1358 const char *
p = type_spec;
1363 va_start(va, type_spec);
1368 va_start(va, type_spec);
1370 object = va_arg(va,
zval **);
1374 if (ce && !instanceof_function(
Z_OBJCE_P(this_ptr), ce)) {
1409 EG(fake_scope) = old_scope;
1425 return mutable_data;
1441 if (c->
ce == class_type) {
1454 _zend_hash_append_ptr(constants_table,
key, c);
1460 if (!mutable_data) {
1461 mutable_data = zend_allocate_mutable_data(class_type);
1466 return constants_table;
1521 zval *default_properties_table =
NULL;
1534 if (uses_mutable_data) {
1542 mutable_data = zend_allocate_mutable_data(class_type);
1546 if (class_type->
parent) {
1555 if (uses_mutable_data) {
1557 if (!constants_table) {
1568 if (c->
ce != class_type) {
1585 if (!static_members_table) {
1596 if (!default_properties_table) {
1599 dst = default_properties_table;
1605 }
while (dst !=
end);
1651 if (uses_mutable_data) {
1665 zval *dst =
object->properties_table;
1676 }
while (src !=
end);
1682 }
while (src !=
end);
1690 object->properties =
NULL;
1691 _object_properties_init(
object, class_type);
1697 object->properties = properties;
1698 if (
object->ce->default_properties_count) {
1738 const char *class_name, *prop_name;
1739 size_t prop_name_len;
1741 zend_string *pname = zend_string_init(prop_name, prop_name_len, 0);
1743 if (class_name && class_name[0] !=
'*') {
1750 EG(fake_scope) = prev_scope;
1764 if (
object->properties) {
1834 _object_properties_init(obj, class_type);
1845 return _object_and_properties_init(
arg, class_type, properties);
1851 return _object_and_properties_init(
arg, class_type,
NULL);
1864 if (constructor ==
NULL) {
1881 if (
UNEXPECTED(named_params !=
NULL && zend_hash_num_elements(named_params) != 0)) {
1884 zend_hash_get_current_key(named_params, &arg_name,
NULL);
1888 zend_object_store_ctor_failed(obj);
1910 zend_object_store_ctor_failed(obj);
2382 str = zend_string_init(
key, key_len, 0);
2393 if (module->module_started) {
2396 module->module_started = 1;
2407 lcname = zend_string_alloc(name_len, 0);
2411 zend_string_efree(
lcname);
2414 module->module_started = 0;
2417 zend_string_efree(
lcname);
2424 if (module->globals_size) {
2426 ts_allocate_id(module->globals_id_ptr, module->globals_size, (ts_allocate_ctor) module->globals_ctor, (ts_allocate_dtor) module->globals_dtor);
2428 if (module->globals_ctor) {
2429 module->globals_ctor(module->globals_ptr);
2433 if (module->module_startup_func) {
2434 EG(current_module) =
module;
2435 if (module->module_startup_func(module->type, module->module_number)==
FAILURE) {
2437 EG(current_module) =
NULL;
2440 EG(current_module) =
NULL;
2446static int zend_startup_module_zval(
zval *
zv)
2492 int startup_count = 0;
2493 int shutdown_count = 0;
2494 int post_deactivate_count = 0;
2495 int dl_loaded_count = 0;
2497 int class_count = 0;
2501 if (module->request_startup_func) {
2504 if (module->request_shutdown_func) {
2507 if (module->post_deactivate_func) {
2508 post_deactivate_count++;
2510 if (module->handle) {
2515 module_request_startup_handlers,
2517 (startup_count + 1 +
2518 shutdown_count + 1 +
2519 post_deactivate_count + 1));
2520 module_request_startup_handlers[startup_count] =
NULL;
2521 module_request_shutdown_handlers = module_request_startup_handlers + startup_count + 1;
2522 module_request_shutdown_handlers[shutdown_count] =
NULL;
2523 module_post_deactivate_handlers = module_request_shutdown_handlers + shutdown_count + 1;
2524 module_post_deactivate_handlers[post_deactivate_count] =
NULL;
2526 modules_dl_loaded = realloc(modules_dl_loaded,
sizeof(
zend_module_entry*) * (dl_loaded_count + 1));
2527 modules_dl_loaded[dl_loaded_count] =
NULL;
2531 if (module->request_startup_func) {
2532 module_request_startup_handlers[startup_count++] =
module;
2534 if (module->request_shutdown_func) {
2535 module_request_shutdown_handlers[--shutdown_count] =
module;
2537 if (module->post_deactivate_func) {
2538 module_post_deactivate_handlers[--post_deactivate_count] =
module;
2540 if (module->handle) {
2541 modules_dl_loaded[--dl_loaded_count] =
module;
2554 class_cleanup_handlers,
2557 class_cleanup_handlers[class_count] =
NULL;
2563 class_cleanup_handlers[--class_count] = ce;
2579 free(class_cleanup_handlers);
2580 class_cleanup_handlers =
NULL;
2581 free(module_request_startup_handlers);
2582 module_request_startup_handlers =
NULL;
2598 zend_printf(
"%s: Registering module %d\n", module->name, module->module_number);
2608 lcname = zend_string_alloc(name_len, 0);
2612 zend_string_efree(
lcname);
2617 zend_string_efree(
lcname);
2623 name_len =
strlen(module->name);
2632 zend_string_release(
lcname);
2635 module = module_ptr;
2636 EG(current_module) =
module;
2638 module->module_number = module_number;
2639 module->type = module_type;
2643 zend_string_release(
lcname);
2644 EG(current_module) =
NULL;
2649 EG(current_module) =
NULL;
2650 zend_string_release(
lcname);
2661static void zend_check_magic_method_args(
2666 zend_error(error_type,
"Method %s::%s() cannot take arguments",
2669 zend_error(error_type,
"Method %s::%s() must take exactly 1 argument",
2672 zend_error(error_type,
"Method %s::%s() must take exactly %" PRIu32
" arguments",
2677 for (uint32_t i = 0; i <
num_args; i++) {
2679 zend_error(error_type,
"Method %s::%s() cannot take arguments by reference",
2692 zend_error(error_type,
"%s::%s(): Parameter #%d ($%s) must be of type %s when declared",
2715 is_complex_type =
true;
2718 if (extra_types || (is_complex_type && return_type !=
MAY_BE_OBJECT)) {
2719 zend_error(error_type,
"%s::%s(): Return type must be %s when declared",
2725static void zend_check_magic_method_non_static(
2729 zend_error(error_type,
"Method %s::%s() cannot be static",
2734static void zend_check_magic_method_static(
2738 zend_error(error_type,
"Method %s::%s() must be static",
2743static void zend_check_magic_method_public(
2753static void zend_check_magic_method_no_return_type(
2770 zend_check_magic_method_non_static(ce, fptr, error_type);
2771 zend_check_magic_method_no_return_type(ce, fptr, error_type);
2773 zend_check_magic_method_args(0, ce, fptr, error_type);
2774 zend_check_magic_method_non_static(ce, fptr, error_type);
2775 zend_check_magic_method_no_return_type(ce, fptr, error_type);
2777 zend_check_magic_method_args(0, ce, fptr, error_type);
2778 zend_check_magic_method_non_static(ce, fptr, error_type);
2779 zend_check_magic_method_return_type(ce, fptr, error_type,
MAY_BE_VOID);
2781 zend_check_magic_method_args(1, ce, fptr, error_type);
2782 zend_check_magic_method_non_static(ce, fptr, error_type);
2783 zend_check_magic_method_public(ce, fptr, error_type);
2784 zend_check_magic_method_arg_type(0, ce, fptr, error_type,
MAY_BE_STRING);
2786 zend_check_magic_method_args(2, ce, fptr, error_type);
2787 zend_check_magic_method_non_static(ce, fptr, error_type);
2788 zend_check_magic_method_public(ce, fptr, error_type);
2789 zend_check_magic_method_arg_type(0, ce, fptr, error_type,
MAY_BE_STRING);
2790 zend_check_magic_method_return_type(ce, fptr, error_type,
MAY_BE_VOID);
2792 zend_check_magic_method_args(1, ce, fptr, error_type);
2793 zend_check_magic_method_non_static(ce, fptr, error_type);
2794 zend_check_magic_method_public(ce, fptr, error_type);
2795 zend_check_magic_method_arg_type(0, ce, fptr, error_type,
MAY_BE_STRING);
2796 zend_check_magic_method_return_type(ce, fptr, error_type,
MAY_BE_VOID);
2798 zend_check_magic_method_args(1, ce, fptr, error_type);
2799 zend_check_magic_method_non_static(ce, fptr, error_type);
2800 zend_check_magic_method_public(ce, fptr, error_type);
2801 zend_check_magic_method_arg_type(0, ce, fptr, error_type,
MAY_BE_STRING);
2802 zend_check_magic_method_return_type(ce, fptr, error_type,
MAY_BE_BOOL);
2804 zend_check_magic_method_args(2, ce, fptr, error_type);
2805 zend_check_magic_method_non_static(ce, fptr, error_type);
2806 zend_check_magic_method_public(ce, fptr, error_type);
2807 zend_check_magic_method_arg_type(0, ce, fptr, error_type,
MAY_BE_STRING);
2808 zend_check_magic_method_arg_type(1, ce, fptr, error_type,
MAY_BE_ARRAY);
2810 zend_check_magic_method_args(2, ce, fptr, error_type);
2811 zend_check_magic_method_static(ce, fptr, error_type);
2812 zend_check_magic_method_public(ce, fptr, error_type);
2813 zend_check_magic_method_arg_type(0, ce, fptr, error_type,
MAY_BE_STRING);
2814 zend_check_magic_method_arg_type(1, ce, fptr, error_type,
MAY_BE_ARRAY);
2816 zend_check_magic_method_args(0, ce, fptr, error_type);
2817 zend_check_magic_method_non_static(ce, fptr, error_type);
2818 zend_check_magic_method_public(ce, fptr, error_type);
2819 zend_check_magic_method_return_type(ce, fptr, error_type,
MAY_BE_STRING);
2821 zend_check_magic_method_args(0, ce, fptr, error_type);
2822 zend_check_magic_method_non_static(ce, fptr, error_type);
2823 zend_check_magic_method_public(ce, fptr, error_type);
2826 zend_check_magic_method_args(0, ce, fptr, error_type);
2827 zend_check_magic_method_non_static(ce, fptr, error_type);
2828 zend_check_magic_method_public(ce, fptr, error_type);
2829 zend_check_magic_method_return_type(ce, fptr, error_type,
MAY_BE_ARRAY);
2831 zend_check_magic_method_args(1, ce, fptr, error_type);
2832 zend_check_magic_method_non_static(ce, fptr, error_type);
2833 zend_check_magic_method_public(ce, fptr, error_type);
2834 zend_check_magic_method_arg_type(0, ce, fptr, error_type,
MAY_BE_ARRAY);
2835 zend_check_magic_method_return_type(ce, fptr, error_type,
MAY_BE_VOID);
2837 zend_check_magic_method_args(1, ce, fptr, error_type);
2838 zend_check_magic_method_static(ce, fptr, error_type);
2839 zend_check_magic_method_public(ce, fptr, error_type);
2840 zend_check_magic_method_arg_type(0, ce, fptr, error_type,
MAY_BE_ARRAY);
2841 zend_check_magic_method_return_type(ce, fptr, error_type,
MAY_BE_OBJECT);
2842 }
else if (zend_string_equals(
lcname,
ZSTR_KNOWN(ZEND_STR_MAGIC_INVOKE))) {
2843 zend_check_magic_method_non_static(ce, fptr, error_type);
2844 zend_check_magic_method_public(ce, fptr, error_type);
2846 zend_check_magic_method_args(0, ce, fptr, error_type);
2847 zend_check_magic_method_non_static(ce, fptr, error_type);
2848 zend_check_magic_method_public(ce, fptr, error_type);
2849 zend_check_magic_method_return_type(ce, fptr, error_type,
MAY_BE_ARRAY);
2851 zend_check_magic_method_args(0, ce, fptr, error_type);
2852 zend_check_magic_method_non_static(ce, fptr, error_type);
2853 zend_check_magic_method_public(ce, fptr, error_type);
2854 zend_check_magic_method_return_type(ce, fptr, error_type,
MAY_BE_VOID);
2932 int count=0, unload=0;
2933 HashTable *target_function_table = function_table;
2944 if (!target_function_table) {
2945 target_function_table =
CG(function_table);
2948 internal_function->
module =
EG(current_module);
2953 internal_function->
T = 1;
2955 internal_function->
T = 0;
2959 while (
ptr->fname) {
2981 zend_error(error_type,
"Invalid access level for %s::%s() - access must be exactly one of public, protected or private",
ZSTR_VAL(
scope->name),
ptr->fname);
2991 if (
ptr->arg_info) {
3060 if (!internal_function->handler) {
3070 if (zend_hash_add_ptr(target_function_table, lowercase_name, reg_function) ==
NULL) {
3073 zend_string_release(lowercase_name);
3114 for (uint32_t
j = 0;
j < i;
j++) {
3117 "Duplicate parameter name $%s for function %s%s%s()", arg_info->
name,
3137 reg_function->
arg_info = new_arg_info + 1;
3146 size_t num_types = 1;
3147 const char *
p = class_name;
3153 if (num_types == 1) {
3166 const char *
start = class_name;
3190 new_arg_info[i].
type = legacy_iterable;
3193 zend_normalize_internal_type(&new_arg_info[i].
type);
3204 zend_string_release(lowercase_name);
3207 while (
ptr->fname) {
3209 lowercase_name = zend_string_alloc(fname_len, 0);
3211 if (zend_hash_exists(target_function_table, lowercase_name)) {
3214 zend_string_efree(lowercase_name);
3231 HashTable *target_function_table = function_table;
3235 if (!target_function_table) {
3236 target_function_table =
CG(function_table);
3238 while (
ptr->fname) {
3243 lowercase_name = zend_string_alloc(fname_len, 0);
3246 zend_string_efree(lowercase_name);
3266 module = zend_hash_str_find_ptr(&module_registry, module_name, strlen(module_name));
3271static void clean_module_classes(
int module_number)
3285static int clean_module_function(
zval *el,
void *
arg)
3306 bool orig_rc_debug = zend_rc_debug;
3314 zend_rc_debug =
false;
3318 clean_module_classes(module->module_number);
3321 if (module->module_started && module->module_shutdown_func) {
3323 zend_printf(
"%s: Module shutdown\n", module->name);
3325 module->module_shutdown_func(module->type, module->module_number);
3328 if (module->module_started
3329 && !module->module_shutdown_func
3335 if (module->globals_size) {
3337 if (*module->globals_id_ptr) {
3338 ts_free_id(*module->globals_id_ptr);
3341 if (module->globals_dtor) {
3342 module->globals_dtor(module->globals_ptr);
3347 module->module_started=0;
3351 clean_module_functions(module);
3355 zend_rc_debug = orig_rc_debug;
3363 if (!
getenv(
"ZEND_DONT_UNLOAD_MODULES")) {
3364 DL_UNLOAD(module->handle);
3378 if (module->request_startup_func(module->type, module->module_number)==
FAILURE) {
3389 EG(current_execute_data) =
NULL;
3391 if (
EG(full_tables_cleanup)) {
3395 if (module->request_shutdown_func) {
3397 module->request_shutdown_func(module->type, module->module_number);
3407 module->request_shutdown_func(module->type, module->module_number);
3422 free(modules_dl_loaded);
3423 modules_dl_loaded =
NULL;
3429 if (
EG(full_tables_cleanup)) {
3435 if (module->post_deactivate_func) {
3436 module->post_deactivate_func();
3440 module = Z_PTR_P(zv);
3445 if (module->handle) {
3456 module->post_deactivate_func();
3474 *class_entry = *orig_class_entry;
3488 zend_hash_update_ptr(
CG(class_table), lowercase_name, class_entry);
3494 &&
"Should be registered before first class using __toString()");
3517 zend_class_entry *register_class = do_register_internal_class(class_entry, ce_flags);
3520 zend_do_inheritance(register_class, parent_ce);
3524 return register_class;
3530 va_list interface_list;
3531 va_start(interface_list, num_interfaces);
3533 while (num_interfaces--) {
3545 va_end(interface_list);
3553 return do_register_internal_class(orig_class_entry, 0);
3573 if (
name[0] ==
'\\') {
3596 zend_observer_class_linked_notify(ce,
lcname);
3608 va_list symbol_table_list;
3610 if (num_symbol_tables <= 0)
return FAILURE;
3616 va_start(symbol_table_list, num_symbol_tables);
3617 while (num_symbol_tables-- > 0) {
3618 symbol_table = va_arg(symbol_table_list,
HashTable *);
3622 va_end(symbol_table_list);
3629static void zend_disable_function(
const char *function_name,
size_t function_name_length)
3632 (function_name_length ==
strlen(
"exit") && !memcmp(function_name,
"exit",
strlen(
"exit")))
3633 || (function_name_length ==
strlen(
"die") && !memcmp(function_name,
"die",
strlen(
"die")))
3643 if (!function_list || !*function_list) {
3647 const char *
s =
NULL, *e = function_list;
3653 zend_disable_function(
s, e -
s);
3666 zend_disable_function(
s, e -
s);
3677#pragma optimize("", off)
3699#pragma optimize("", on)
3714 key = zend_string_alloc(class_name_length, 0);
3716 disabled_class = zend_hash_find_ptr(
CG(class_table),
key);
3718 if (!disabled_class) {
3736 if (prop->
ce == disabled_class) {
3737 zend_string_release(prop->
name);
3766 if (
error) *
error =
estrdup(
"cannot access \"self\" when no class scope is active");
3768 if (!suppress_deprecation) {
3783 if (
error) *
error =
estrdup(
"cannot access \"parent\" when no class scope is active");
3784 }
else if (!
scope->parent) {
3785 if (
error) *
error =
estrdup(
"cannot access \"parent\" when current class scope has no parent");
3787 if (!suppress_deprecation) {
3804 if (!called_scope) {
3805 if (
error) *
error =
estrdup(
"cannot access \"static\" when no class scope is active");
3807 if (!suppress_deprecation) {
3826 instanceof_function(
scope, ce)) {
3865 int call_via_handler = 0;
3942 }
else if (!zend_is_callable_check_class(cname,
scope,
frame, fcc, &strict_class,
error, suppress_deprecation || ce_org !=
NULL)) {
3949 if (ce_org && !instanceof_function(ce_org, fcc->
calling_scope)) {
3953 if (ce_org && !suppress_deprecation) {
3955 "Callables of the form [\"%s\", \"%s\"] are deprecated",
3958 mname = zend_string_init(
Z_STRVAL_P(callable) + clen + 2, mlen, 0);
3959 }
else if (ce_org) {
3962 zend_string_addref(mname);
3973 lmname = zend_string_tolower(mname);
4011 goto get_function_via_handler;
4016get_function_via_handler:
4018 if (strict_class && ce_org->
__call) {
4020 call_via_handler = 1;
4044 if (call_via_handler && !fcc->
object) {
4114 return zend_string_copy(
Z_STR_P(callable));
4121 if (zend_hash_num_elements(
Z_ARRVAL_P(callable)) == 2) {
4122 obj = zend_hash_index_find_deref(
Z_ARRVAL_P(callable), 0);
4123 method = zend_hash_index_find_deref(
Z_ARRVAL_P(callable), 1);
4127 return ZSTR_KNOWN(ZEND_STR_ARRAY_CAPITALIZED);
4135 return ZSTR_KNOWN(ZEND_STR_ARRAY_CAPITALIZED);
4143 "::__invoke",
sizeof(
"::__invoke") - 1);
4166 bool strict_class = 0;
4196 if (fcc == &fcc_local) {
4203 if (zend_hash_num_elements(
Z_ARRVAL_P(callable)) != 2) {
4210 if (!obj || !method) {
4217 if (
error) *
error =
estrdup(
"first array member is not a valid class name or object");
4254 if (fcc == &fcc_local) {
4280 if (callable_name) {
4298 zval_ptr_dtor_str(callable);
4316 fci->
size =
sizeof(*fci);
4411 for (uint32_t i = 0; i < argc; ++i) {
4427 for (uint32_t i = 0; i < argc; ++i) {
4439 va_start(argv, argc);
4448 uint32_t org_count = 0;
4489 size_t name_len =
strlen(module_name);
4492 lname = zend_string_alloc(name_len, 0);
4494 module = zend_hash_find_ptr(&module_registry, lname);
4495 zend_string_efree(lname);
4496 return module ? module->version : NULL;
4544 "Property with asymmetric visibility %s::$%s must have type",
4547 uint32_t get_visibility = zend_visibility_to_set_visibility(access_type &
ZEND_ACC_PPP_MASK);
4549 if (get_visibility > set_visibility) {
4551 "Visibility of property %s::$%s must not be weaker than set visibility",
4571 property_info->
offset = (uint32_t)-1;
4572 goto skip_property_storage;
4580 if (property_info_ptr->
doc_comment && property_info_ptr->
ce == ce) {
4581 zend_string_release(property_info_ptr->
doc_comment);
4596 zval *property_default_ptr;
4601 if (property_info_ptr->
doc_comment && property_info_ptr->
ce == ce) {
4624skip_property_storage:
4627 if (is_persistent_class(ce)) {
4637 property_info->
name = zend_string_copy(
name);
4646 property_info->
flags = access_type;
4649 property_info->
prototype = property_info;
4651 property_info->
ce = ce;
4654 if (is_persistent_class(ce)) {
4655 zend_normalize_internal_type(&property_info->
type);
4660 return property_info;
4801 zend_string_release(
key);
4871 "A class constant must not be called 'class'; it is reserved for class name fetching");
4921 key = zend_string_init(
name, name_length, 0);
4924 zend_string_release(
key);
4985 object->handlers->write_property(
object,
name,
value,
NULL);
4987 EG(fake_scope) = old_scope;
4998 property = zend_string_init(
name, name_length, 0);
5002 EG(fake_scope) = old_scope;
5022 property = zend_string_init(
name, name_length, 0);
5023 object->handlers->unset_property(
object,
property, 0);
5026 EG(fake_scope) = old_scope;
5100 EG(fake_scope) = old_scope;
5126 zend_string_efree(
key);
5196 EG(fake_scope) = old_scope;
5206 str = zend_string_init(
name, name_length, 0);
5220 EG(fake_scope) = old_scope;
5230 zend_string_efree(
key);
5238 current->exception =
EG(exception_class);
5248 EG(error_handling) = error_handling;
5249 EG(exception_class) = exception_class;
5263 return upper_case ?
"Trait" :
"trait";
5265 return upper_case ?
"Interface" :
"interface";
5267 return upper_case ?
"Enum" :
"enum";
5269 return upper_case ?
"Class" :
"class";
5304static zend_result get_default_via_ast(
zval *default_value_zval,
const char *default_value) {
5309 "<?php ",
sizeof(
"<?php ") - 1, default_value,
strlen(default_value),
";", 1);
5312 zend_string_release(code);
5322 uint32_t original_compiler_options =
CG(compiler_options);
5324 CG(ast_arena) = ast_arena;
5329 CG(ast_arena) = original_ast_arena;
5330 CG(compiler_options) = original_compiler_options;
5334 zend_arena_destroy(ast_arena);
5339static zend_string *try_parse_string(
const char *str,
size_t len,
char quote) {
5344 for (
size_t i = 0; i <
len; i++) {
5345 if (str[i] ==
'\\' || str[i] == quote) {
5349 return zend_string_init(str,
len, 0);
5356 if (!default_value) {
5361 size_t default_value_len =
strlen(default_value);
5363 if (default_value_len ==
sizeof(
"null")-1
5364 && !memcmp(default_value,
"null",
sizeof(
"null")-1)) {
5367 }
else if (default_value_len ==
sizeof(
"true")-1
5368 && !memcmp(default_value,
"true",
sizeof(
"true")-1)) {
5371 }
else if (default_value_len ==
sizeof(
"false")-1
5372 && !memcmp(default_value,
"false",
sizeof(
"false")-1)) {
5375 }
else if (default_value_len >= 2
5376 && (default_value[0] ==
'\'' || default_value[0] ==
'"')
5377 && default_value[default_value_len - 1] == default_value[0]) {
5379 default_value + 1, default_value_len - 2, default_value[0]);
5384 }
else if (default_value_len ==
sizeof(
"[]")-1
5385 && !memcmp(default_value,
"[]",
sizeof(
"[]")-1)) {
5394 fprintf(stderr,
"Evaluating %s via AST\n", default_value);
5396 return get_default_via_ast(default_value_zval, default_value);
fprintf($stream, string $format, mixed ... $values)
getenv(?string $name=null, bool $local_only=false)
count(Countable|array $value, int $mode=COUNT_NORMAL)
strchr(string $haystack, string $needle, bool $before_needle=false)
memset(ptr, 0, type->size)
unsigned const char * end
php_json_error_code error_code
php_output_handler * active
reflection_object_handlers write_property
unsigned char key[REFLECTION_KEY_LEN]
spl_handler_SplDoublyLinkedList count_elements
zend_string * doc_comment
HashTable constants_table
zend_function * __debugInfo
zend_object *(* create_object)(zend_class_entry *class_type)
zend_function * __tostring
struct _zend_module_entry * module
zval * default_static_members_table
struct _zend_class_entry::@126215362204241324314155352336150042254204116267::@166057154351252324007362117353350250255142166322 user
HashTable properties_info
zend_function * __unserialize
union _zend_class_entry::@126215362204241324314155352336150042254204116267 info
struct _zend_class_entry::@126215362204241324314155352336150042254204116267::@031207115026352130035014265255253014334154061307 internal
const struct _zend_function_entry * builtin_functions
int default_properties_count
zend_function * __serialize
zend_class_entry ** interfaces
zend_function *(* get_static_method)(zend_class_entry *ce, zend_string *method)
int default_static_members_count
zend_function * constructor
uint32_t enum_backing_type
struct _zend_property_info ** properties_info_table
zend_class_entry * parent
zval * default_properties_table
zend_function * __callstatic
zend_function * destructor
zval * default_properties_table
HashTable * constants_table
zend_class_entry * calling_scope
zend_function * function_handler
zend_class_entry * called_scope
const char * default_value
uintptr_t required_num_args
uint32_t required_num_args
const zend_property_info * prop_info
zend_string * function_name
zend_function * prototype
struct _zend_module_entry * module
const zend_frameless_function_info * frameless_function_infos
void * reserved[ZEND_MAX_RESERVED_RESOURCES]
zend_internal_arg_info * arg_info
zend_string * doc_comment
const struct _zend_module_dep * deps
zend_object_get_method_t get_method
zend_object_get_constructor_t get_constructor
const zend_object_handlers * handlers
const zend_property_info * prototype
zend_string * doc_comment
zend_error_handling_t handling
zend_class_entry * exception
zend_string * function_name
struct _zend_function::@236135173067030250234125302313220025134003177336 common
zend_internal_function internal_function
ZEND_API void zend_alloc_ce_cache(zend_string *type_name)
ZEND_API ZEND_COLD ZEND_NORETURN void zend_error_noreturn(int type, const char *format,...)
ZEND_API ZEND_COLD void zend_argument_count_error(const char *format,...)
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
ZEND_API zend_class_entry * zend_standard_class_def
ZEND_API ZEND_COLD void zend_error(int type, const char *format,...)
ZEND_API ZEND_COLD void zend_illegal_container_offset(const zend_string *container, const zval *offset, int type)
ZEND_API size_t zend_spprintf(char **message, size_t max_len, const char *format,...)
ZEND_API size_t(* zend_printf)(const char *format,...)
ZEND_API size_t zend_vspprintf(char **pbuf, size_t max_len, const char *format, va_list ap)
struct _zend_class_mutable_data zend_class_mutable_data
ZEND_API ZEND_COLD void zend_class_redeclaration_error_ex(int type, zend_string *new_name, zend_class_entry *old_ce)
ZEND_API bool ZEND_FASTCALL zend_parse_arg_long_weak(const zval *arg, zend_long *dest, uint32_t arg_num)
ZEND_API zend_result zend_update_class_constants(zend_class_entry *class_type)
ZEND_API zend_result add_next_index_null(zval *arg)
ZEND_API void add_property_zval_ex(zval *arg, const char *key, size_t key_len, zval *value)
ZEND_API zval * zend_read_property_ex(zend_class_entry *scope, zend_object *object, zend_string *name, bool silent, zval *rv)
ZEND_API zend_result add_next_index_bool(zval *arg, bool b)
ZEND_API void add_property_array_ex(zval *arg, const char *key, size_t key_len, zend_array *arr)
ZEND_API zend_result zend_register_functions(zend_class_entry *scope, const zend_function_entry *functions, HashTable *function_table, int type)
ZEND_API bool zend_is_countable(const zval *countable)
ZEND_API zend_result array_set_zval_key(HashTable *ht, zval *key, zval *value)
ZEND_API void add_property_object_ex(zval *arg, const char *key, size_t key_len, zend_object *obj)
ZEND_API zend_result zend_try_assign_typed_ref_null(zend_reference *ref)
ZEND_API void zend_check_magic_method_implementation(const zend_class_entry *ce, const zend_function *fptr, zend_string *lcname, int error_type)
ZEND_API zend_class_entry * zend_register_internal_class_ex(zend_class_entry *class_entry, zend_class_entry *parent_ce)
ZEND_API zend_result zend_copy_parameters_array(uint32_t param_count, zval *argument_array)
ZEND_API ZEND_COLD const char * zend_get_object_type_case(const zend_class_entry *ce, bool upper_case)
ZEND_API zend_result object_and_properties_init(zval *arg, zend_class_entry *class_type, HashTable *properties)
ZEND_API const char * zend_zval_value_name(const zval *arg)
ZEND_API void add_assoc_bool_ex(zval *arg, const char *key, size_t key_len, bool b)
ZEND_API zend_module_entry * zend_register_module_ex(zend_module_entry *module, int module_type)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_or_null_error(uint32_t num, char *error)
ZEND_API zend_result zend_parse_parameter(int flags, uint32_t arg_num, zval *arg, const char *spec,...)
ZEND_API zend_result zend_try_assign_typed_ref_double(zend_reference *ref, double dval)
ZEND_API const char * zend_get_type_by_const(int type)
ZEND_API zend_module_entry * zend_register_internal_module(zend_module_entry *module)
ZEND_API zend_result add_next_index_object(zval *arg, zend_object *obj)
ZEND_API void zend_declare_property_double(zend_class_entry *ce, const char *name, size_t name_length, double value, int access_type)
ZEND_API void object_properties_init_ex(zend_object *object, HashTable *properties)
ZEND_API zend_result zend_register_class_alias_ex(const char *name, size_t name_len, zend_class_entry *ce, bool persistent)
ZEND_API void zend_activate_modules(void)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_type_error(uint32_t num, zend_expected_type expected_type, zval *arg)
ZEND_API void zend_fcall_info_argv(zend_fcall_info *fci, uint32_t argc, va_list *argv)
ZEND_API HashTable * zend_separate_class_constants_table(zend_class_entry *class_type)
ZEND_API void zend_declare_property_bool(zend_class_entry *ce, const char *name, size_t name_length, zend_long value, int access_type)
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 zend_property_info * zend_declare_typed_property(zend_class_entry *ce, zend_string *name, zval *property, int access_type, zend_string *doc_comment, zend_type type)
ZEND_API ZEND_COLD void zend_wrong_param_count(void)
ZEND_API void zend_declare_class_constant_double(zend_class_entry *ce, const char *name, size_t name_length, double value)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_or_long_error(uint32_t num, const char *name, zval *arg)
ZEND_API zend_result add_next_index_double(zval *arg, double d)
ZEND_API void add_index_array(zval *arg, zend_ulong index, zend_array *arr)
void zend_unload_modules(void)
ZEND_API HashTable module_registry
ZEND_API zend_result add_next_index_long(zval *arg, zend_long n)
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 bool ZEND_FASTCALL zend_parse_arg_class(zval *arg, zend_class_entry **pce, uint32_t num, bool check_null)
ZEND_API void zend_collect_module_handlers(void)
ZEND_API zend_result object_init_ex(zval *arg, zend_class_entry *class_type)
ZEND_API zend_result zend_disable_class(const char *class_name, size_t class_name_length)
ZEND_API zend_result zend_get_module_started(const char *module_name)
ZEND_API zend_result object_init_with_constructor(zval *arg, zend_class_entry *class_type, uint32_t param_count, zval *params, HashTable *named_params)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_or_string_or_null_error(uint32_t num, const char *name, zval *arg)
ZEND_API zend_result zend_fcall_info_init(zval *callable, uint32_t check_flags, zend_fcall_info *fci, zend_fcall_info_cache *fcc, zend_string **callable_name, char **error)
ZEND_API zval * zend_read_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, bool silent, zval *rv)
ZEND_API void add_index_stringl(zval *arg, zend_ulong index, const char *str, size_t length)
ZEND_API void add_assoc_double_ex(zval *arg, const char *key, size_t key_len, double d)
ZEND_API ZEND_COLD void zend_wrong_property_read(zval *object, zval *property)
ZEND_API void zend_declare_class_constant_null(zend_class_entry *ce, const char *name, size_t name_length)
ZEND_API void add_property_str_ex(zval *arg, const char *key, size_t key_len, zend_string *str)
ZEND_API zend_result zend_try_assign_typed_ref_long(zend_reference *ref, zend_long lval)
ZEND_API void add_assoc_array_ex(zval *arg, const char *key, size_t key_len, zend_array *arr)
ZEND_API void zend_declare_property_null(zend_class_entry *ce, const char *name, size_t name_length, int access_type)
ZEND_API zend_result zend_fcall_info_args_ex(zend_fcall_info *fci, zend_function *func, zval *args)
ZEND_API bool zend_is_callable_at_frame(zval *callable, zend_object *object, zend_execute_data *frame, uint32_t check_flags, zend_fcall_info_cache *fcc, char **error)
ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value)
ZEND_API void add_assoc_reference_ex(zval *arg, const char *key, size_t key_len, zend_reference *ref)
ZEND_API void zend_get_callable_zval_from_fcc(const zend_fcall_info_cache *fcc, zval *callable)
ZEND_API void zend_declare_property_stringl(zend_class_entry *ce, const char *name, size_t name_length, const char *value, size_t value_len, int access_type)
ZEND_API zend_result zend_update_static_property_bool(zend_class_entry *scope, const char *name, size_t name_length, zend_long value)
ZEND_API zend_class_entry * zend_register_internal_interface(zend_class_entry *orig_class_entry)
ZEND_API ZEND_COLD void zend_argument_error(zend_class_entry *error_ce, uint32_t arg_num, const char *format,...)
ZEND_API bool ZEND_FASTCALL zend_parse_arg_long_slow(const zval *arg, zend_long *dest, uint32_t arg_num)
ZEND_API zend_result zend_update_static_property_stringl(zend_class_entry *scope, const char *name, size_t name_length, const char *value, size_t value_len)
ZEND_API void zend_unset_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length)
ZEND_API void zend_update_property_string(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value)
ZEND_API void add_index_str(zval *arg, zend_ulong index, zend_string *str)
ZEND_API bool ZEND_FASTCALL zend_flf_parse_arg_bool_slow(const zval *arg, bool *dest, uint32_t arg_num)
ZEND_API void add_index_string(zval *arg, zend_ulong index, const char *str)
ZEND_API void add_property_resource_ex(zval *arg, const char *key, size_t key_len, zend_resource *r)
ZEND_API void zend_update_property_bool(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value)
ZEND_API void zend_startup_modules(void)
ZEND_API zend_result zend_try_assign_typed_ref_ex(zend_reference *ref, zval *val, bool strict)
ZEND_API void add_property_bool_ex(zval *arg, const char *key, size_t key_len, zend_long b)
ZEND_API void zend_declare_property_ex(zend_class_entry *ce, zend_string *name, zval *property, int access_type, zend_string *doc_comment)
ZEND_API void add_index_object(zval *arg, zend_ulong index, zend_object *obj)
ZEND_API zend_result add_next_index_reference(zval *arg, zend_reference *ref)
ZEND_API zend_class_entry * zend_register_internal_class(zend_class_entry *orig_class_entry)
ZEND_API zend_result zend_set_hash_symbol(zval *symbol, const char *name, size_t name_length, bool is_ref, int num_symbol_tables,...)
ZEND_API void add_index_resource(zval *arg, zend_ulong index, zend_resource *r)
ZEND_API void add_assoc_string_ex(zval *arg, const char *key, size_t key_len, const char *str)
ZEND_API zend_result zend_startup_module_ex(zend_module_entry *module)
void module_registry_unload(const zend_module_entry *module)
ZEND_API void add_index_double(zval *arg, zend_ulong index, double d)
ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_len)
ZEND_API void zend_declare_class_constant_string(zend_class_entry *ce, const char *name, size_t name_length, const char *value)
ZEND_API void add_property_long_ex(zval *arg, const char *key, size_t key_len, zend_long n)
ZEND_API bool zend_make_callable(zval *callable, zend_string **callable_name)
ZEND_API zend_result zend_update_static_property_null(zend_class_entry *scope, const char *name, size_t name_length)
ZEND_API void zend_fcall_info_args_clear(zend_fcall_info *fci, bool free_mem)
ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec,...)
ZEND_API void add_assoc_zval_ex(zval *arg, const char *key, size_t key_len, zval *value)
ZEND_API void add_index_bool(zval *arg, zend_ulong index, bool b)
ZEND_API zend_string * zend_get_callable_name_ex(zval *callable, zend_object *object)
ZEND_API void zend_fcall_info_args_restore(zend_fcall_info *fci, uint32_t param_count, zval *params)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_error(uint32_t num, const char *name, zval *arg)
ZEND_API zend_class_constant * zend_declare_typed_class_constant(zend_class_entry *ce, zend_string *name, zval *value, int flags, zend_string *doc_comment, zend_type type)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameters_none_error(void)
ZEND_API void add_assoc_stringl_ex(zval *arg, const char *key, size_t key_len, const char *str, size_t length)
ZEND_API void add_assoc_object_ex(zval *arg, const char *key, size_t key_len, zend_object *obj)
ZEND_API void zend_unregister_functions(const zend_function_entry *functions, int count, HashTable *function_table)
ZEND_API zend_result zend_update_static_property(zend_class_entry *scope, const char *name, size_t name_length, zval *value)
ZEND_API void add_property_string_ex(zval *arg, const char *key, size_t key_len, const char *str)
ZEND_API void zend_fcall_info_argn(zend_fcall_info *fci, uint32_t argc,...)
ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value)
ZEND_API bool ZEND_FASTCALL zend_parse_arg_double_slow(const zval *arg, double *dest, uint32_t arg_num)
ZEND_API zend_result zend_try_assign_typed_ref_zval(zend_reference *ref, zval *zv)
ZEND_API zend_result zend_try_assign_typed_ref_string(zend_reference *ref, const char *string)
ZEND_API void zend_deactivate_modules(void)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameters_count_error(uint32_t min_num_args, uint32_t max_num_args)
ZEND_API void add_index_reference(zval *arg, zend_ulong index, zend_reference *ref)
ZEND_API void zend_declare_property(zend_class_entry *ce, const char *name, size_t name_length, zval *property, int access_type)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_or_string_error(uint32_t num, const char *name, zval *arg)
ZEND_API zend_string * zend_get_callable_name(zval *callable)
ZEND_API zend_result zend_try_assign_typed_ref_str(zend_reference *ref, zend_string *str)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_argument_error_variadic(zend_class_entry *error_ce, uint32_t arg_num, const char *format, va_list va)
ZEND_API void object_properties_init(zend_object *object, zend_class_entry *class_type)
ZEND_API ZEND_COLD void zend_argument_must_not_be_empty_error(uint32_t arg_num)
ZEND_API zend_class_entry * zend_register_internal_class_with_flags(zend_class_entry *class_entry, zend_class_entry *parent_ce, uint32_t ce_flags)
ZEND_API void add_property_stringl_ex(zval *arg, const char *key, size_t key_len, const char *str, size_t length)
ZEND_API bool ZEND_FASTCALL zend_parse_arg_number_or_str_slow(zval *arg, zval **dest, uint32_t arg_num)
ZEND_API bool ZEND_FASTCALL zend_parse_arg_bool_weak(const zval *arg, bool *dest, uint32_t arg_num)
ZEND_API void zend_declare_property_string(zend_class_entry *ce, const char *name, size_t name_length, const char *value, int access_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 bool ZEND_FASTCALL zend_parse_arg_bool_slow(const zval *arg, bool *dest, uint32_t arg_num)
ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value)
ZEND_API bool ZEND_FASTCALL zend_parse_arg_double_weak(const zval *arg, double *dest, uint32_t arg_num)
ZEND_API zend_result add_next_index_resource(zval *arg, zend_resource *r)
ZEND_API void add_assoc_long_ex(zval *arg, const char *key, size_t key_len, zend_long n)
ZEND_API void zend_declare_class_constant(zend_class_entry *ce, const char *name, size_t name_length, zval *value)
ZEND_API const char * zend_get_module_version(const char *module_name)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_error(int error_code, uint32_t num, char *name, zend_expected_type expected_type, zval *arg)
ZEND_API zend_result zend_try_assign_typed_ref_bool(zend_reference *ref, bool val)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_unexpected_extra_named_error(void)
ZEND_API void add_assoc_resource_ex(zval *arg, const char *key, size_t key_len, zend_resource *r)
ZEND_API zend_result zend_fcall_info_args(zend_fcall_info *fci, zval *args)
ZEND_API zend_result zend_update_static_property_long(zend_class_entry *scope, const char *name, size_t name_length, zend_long value)
ZEND_API zend_result zend_try_assign_typed_ref_arr(zend_reference *ref, zend_array *arr)
ZEND_API ZEND_COLD void zend_class_redeclaration_error(int type, zend_class_entry *old_ce)
ZEND_API zend_result zend_parse_method_parameters(uint32_t num_args, zval *this_ptr, const char *type_spec,...)
ZEND_API zend_result zend_try_assign_typed_ref_res(zend_reference *ref, zend_resource *res)
ZEND_API void add_assoc_str_ex(zval *arg, const char *key, size_t key_len, zend_string *str)
ZEND_API void zend_add_magic_method(zend_class_entry *ce, zend_function *fptr, zend_string *lcname)
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format,...)
ZEND_API zval * zend_read_static_property(zend_class_entry *scope, const char *name, size_t name_length, bool silent)
ZEND_API void zend_release_fcall_info_cache(zend_fcall_info_cache *fcc)
ZEND_API void add_property_reference_ex(zval *arg, const char *key, size_t key_len, zend_reference *ref)
ZEND_API zend_result zend_parse_method_parameters_ex(int flags, uint32_t num_args, zval *this_ptr, const char *type_spec,...)
ZEND_API void add_property_double_ex(zval *arg, const char *key, size_t key_len, double d)
ZEND_API int zend_next_free_module(void)
ZEND_API zend_string * zend_zval_get_legacy_type(const zval *arg)
ZEND_API zend_result zend_startup_module(zend_module_entry *module)
ZEND_API void zend_disable_functions(const char *function_list)
ZEND_API zend_result zend_try_assign_typed_ref_empty_string(zend_reference *ref)
ZEND_API zend_result add_next_index_array(zval *arg, zend_array *arr)
ZEND_API void zend_fcall_info_argp(zend_fcall_info *fci, uint32_t argc, zval *argv)
void module_destructor(zend_module_entry *module)
ZEND_API zend_result zend_try_assign_typed_ref_stringl(zend_reference *ref, const char *string, size_t len)
ZEND_API ZEND_COLD void zend_argument_type_error(uint32_t arg_num, const char *format,...)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_or_null_error(uint32_t num, const char *name, zval *arg)
ZEND_API void zend_merge_properties(zval *obj, HashTable *properties)
ZEND_API void zend_update_property_null(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length)
ZEND_API void zend_update_property_ex(zend_class_entry *scope, zend_object *object, zend_string *name, zval *value)
ZEND_API zend_result zend_try_assign_typed_ref_zval_ex(zend_reference *ref, zval *zv, bool strict)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_or_long_or_null_error(uint32_t num, const char *name, zval *arg)
ZEND_API zend_result zend_update_class_constant(zend_class_constant *c, const zend_string *name, zend_class_entry *scope)
ZEND_API void zend_declare_class_constant_long(zend_class_entry *ce, const char *name, size_t name_length, zend_long value)
ZEND_API void zend_declare_class_constant_bool(zend_class_entry *ce, const char *name, size_t name_length, bool value)
ZEND_API zend_result add_next_index_string(zval *arg, const char *str)
ZEND_API zend_result zend_update_static_property_double(zend_class_entry *scope, const char *name, size_t name_length, double value)
ZEND_API void zend_update_property_str(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_string *value)
ZEND_API zend_result zend_get_parameters_array_ex(uint32_t param_count, zval *argument_array)
ZEND_API void add_index_null(zval *arg, zend_ulong index)
ZEND_API zend_result zend_try_assign_typed_ref(zend_reference *ref, zval *val)
ZEND_API bool ZEND_FASTCALL zend_parse_arg_str_slow(zval *arg, zend_string **dest, uint32_t arg_num)
ZEND_API bool ZEND_FASTCALL zend_parse_arg_str_or_long_slow(zval *arg, zend_string **dest_str, zend_long *dest_long, uint32_t arg_num)
ZEND_API bool ZEND_FASTCALL zend_parse_arg_str_weak(zval *arg, zend_string **dest, uint32_t arg_num)
ZEND_API zend_result zend_fcall_info_call(zend_fcall_info *fci, zend_fcall_info_cache *fcc, zval *retval_ptr, zval *args)
ZEND_API void add_assoc_null_ex(zval *arg, const char *key, size_t key_len)
ZEND_API zend_result zend_update_static_property_ex(zend_class_entry *scope, zend_string *name, zval *value)
ZEND_API void zend_replace_error_handling(zend_error_handling_t error_handling, zend_class_entry *exception_class, zend_error_handling *current)
ZEND_API void object_init(zval *arg)
ZEND_API bool ZEND_FASTCALL zend_flf_parse_arg_str_slow(zval *arg, zend_string **dest, uint32_t arg_num)
ZEND_API void zend_class_implements(zend_class_entry *class_entry, int num_interfaces,...)
ZEND_API void zend_declare_class_constant_stringl(zend_class_entry *ce, const char *name, size_t name_length, const char *value, size_t value_length)
ZEND_API zend_class_constant * zend_declare_class_constant_ex(zend_class_entry *ce, zend_string *name, zval *value, int flags, zend_string *doc_comment)
ZEND_API void add_index_long(zval *arg, zend_ulong index, zend_long n)
ZEND_API bool zend_is_iterable(const zval *iterable)
ZEND_API void object_properties_load(zend_object *object, HashTable *properties)
ZEND_API void add_property_null_ex(zval *arg, const char *key, size_t key_len)
ZEND_API void zend_declare_property_long(zend_class_entry *ce, const char *name, size_t name_length, zend_long value, int access_type)
ZEND_API void zend_destroy_modules(void)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_error(uint32_t num, char *error)
ZEND_API bool zend_is_callable(zval *callable, uint32_t check_flags, zend_string **callable_name)
ZEND_API void zend_restore_error_handling(zend_error_handling *saved)
ZEND_API bool ZEND_FASTCALL zend_flf_parse_arg_long_slow(const zval *arg, zend_long *dest, uint32_t arg_num)
ZEND_API zend_result add_next_index_str(zval *arg, zend_string *str)
ZEND_API void zend_post_deactivate_modules(void)
ZEND_API bool ZEND_FASTCALL zend_parse_arg_number_slow(zval *arg, zval **dest, uint32_t arg_num)
ZEND_API void zend_save_error_handling(zend_error_handling *current)
ZEND_API void zend_fcall_info_args_save(zend_fcall_info *fci, uint32_t *param_count, zval **params)
ZEND_API zend_result zend_update_static_property_string(zend_class_entry *scope, const char *name, size_t name_length, const char *value)
ZEND_API zend_result zend_parse_parameters_ex(int flags, uint32_t num_args, const char *type_spec,...)
#define CE_STATIC_MEMBERS(ce)
struct _zend_fcall_info_cache zend_fcall_info_cache
#define CE_DEFAULT_PROPERTIES_TABLE(ce)
#define Z_EXPECTED_TYPE_STR(id, str)
#define ZEND_PARSE_PARAMS_QUIET
#define IS_CALLABLE_SUPPRESS_DEPRECATIONS
#define INIT_CLASS_ENTRY_INIT_METHODS(class_container, functions)
#define ZPP_ERROR_WRONG_CLASS_OR_NULL
struct _zend_function_entry zend_function_entry
#define ZPP_ERROR_WRONG_CLASS_OR_STRING_OR_NULL
#define ZPP_ERROR_WRONG_CLASS_OR_LONG_OR_NULL
#define ZVAL_STRING(z, s)
#define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, return_reference, required_num_args, type, allow_null)
#define Z_EXPECTED_TYPES(_)
enum _zend_expected_type zend_expected_type
#define ZPP_ERROR_WRONG_CLASS_OR_STRING
struct _zend_fcall_info zend_fcall_info
#define ZEND_END_ARG_INFO()
#define CE_CONSTANTS_TABLE(ce)
#define ZPP_ERROR_WRONG_CLASS_OR_LONG
#define ZPP_ERROR_WRONG_CLASS
#define ZPP_ERROR_WRONG_CALLBACK
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 ZVAL_STRINGL(z, s, l)
#define ZPP_ERROR_WRONG_ARG
#define ZPP_ERROR_UNEXPECTED_EXTRA_NAMED
#define IS_CALLABLE_CHECK_SYNTAX_ONLY
ZEND_API zend_result zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache)
#define ZPP_ERROR_FAILURE
#define ZVAL_EMPTY_STRING(z)
#define ZPP_ERROR_WRONG_CALLBACK_OR_NULL
#define perealloc(ptr, size, persistent)
#define pemalloc(size, persistent)
#define erealloc(ptr, size)
struct _zend_arena zend_arena
ZEND_API void ZEND_FASTCALL zend_ast_destroy(zend_ast *ast)
struct _zend_ast_list zend_ast_list
exit(string|int $status=0)
strcmp(string $string1, string $string2)
zend_string_release_ex(func->internal_function.function_name, 0)
void zend_const_expr_to_zval(zval *result, zend_ast **ast_ptr, bool allow_dynamic)
void zend_assert_valid_class_name(const zend_string *name, const char *type)
ZEND_API void zend_initialize_class_data(zend_class_entry *ce, bool nullify_handlers)
void zend_file_context_begin(zend_file_context *prev_context)
ZEND_API void zend_set_function_arg_flags(zend_function *func)
ZEND_API zend_string * zend_type_to_string(zend_type type)
zend_string * zval_make_interned_string(zval *zv)
ZEND_API zend_string * zend_mangle_property_name(const char *src1, size_t src1_length, const char *src2, size_t src2_length, bool internal)
ZEND_API zend_string * zend_create_member_string(zend_string *class_name, zend_string *member_name)
ZEND_API zend_result zend_unmangle_property_name_ex(const zend_string *name, const char **class_name, const char **prop_name, size_t *prop_len)
void zend_file_context_end(zend_file_context *prev_context)
#define ZEND_SET_FUNC_NAME
#define ZEND_CLONE_FUNC_NAME
#define ZEND_CALL_FUNC_NAME
#define ZEND_ACC_NO_DYNAMIC_PROPERTIES
#define ZEND_DESTRUCTOR_FUNC_NAME
#define QUICK_ARG_SHOULD_BE_SENT_BY_REF(zf, arg_num)
#define OBJ_PROP_TO_NUM(offset)
#define ZEND_USER_CODE(type)
#define ZEND_FLF_ARG_USES_STRICT_TYPES()
#define ZEND_ACC_UNINSTANTIABLE
ZEND_API zend_ast * zend_compile_string_to_ast(zend_string *code, struct _zend_arena **ast_arena, zend_string *filename)
#define ZEND_UNSET_FUNC_NAME
#define ZEND_ACC_HAS_TYPE_HINTS
#define ZEND_ACC_IMPLICIT_ABSTRACT_CLASS
struct _zend_internal_function_info zend_internal_function_info
#define ZEND_INTERNAL_FUNCTION
#define ZEND_ACC_ABSTRACT
#define ZEND_GET_FUNC_NAME
#define ZEND_ACC_HAS_READONLY_PROPS
#define ZEND_CLASS_CONST_FLAGS(c)
#define ZEND_ACC_READONLY
#define ZEND_ACC_PROTECTED_SET
#define ZEND_ARG_SEND_MODE(arg_info)
#define ZEND_ACC_PPP_SET_MASK
#define ZEND_ACC_EXPLICIT_ABSTRACT_CLASS
struct _zend_file_context zend_file_context
#define ZEND_ACC_INTERFACE
#define ZEND_ACC_PRIVATE_SET
#define ZEND_ACC_CALL_VIA_TRAMPOLINE
#define ZEND_TOSTRING_FUNC_NAME
#define ZEND_ACC_HAS_AST_CONSTANTS
#define ZEND_ISSET_FUNC_NAME
#define OBJ_PROP(obj, offset)
struct _zend_class_constant zend_class_constant
struct _zend_property_info zend_property_info
#define ZEND_CALL_HAS_EXTRA_NAMED_PARAMS
#define ZEND_ACC_HAS_AST_PROPERTIES
#define ZEND_ACC_RESOLVED_PARENT
#define ZEND_ACC_USE_GUARDS
#define ZEND_ACC_CONSTANTS_UPDATED
struct _zend_internal_arg_info zend_internal_arg_info
#define ZEND_ACC_HAS_AST_STATICS
#define ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES
#define ZEND_CALL_NUM_ARGS(call)
#define ZEND_ACC_PPP_MASK
#define ZEND_ARG_IS_VARIADIC(arg_info)
#define ZEND_CALL_INFO(call)
#define ZEND_CALLSTATIC_FUNC_NAME
#define ZEND_ACC_HAS_RETURN_TYPE
struct _zend_arg_info zend_arg_info
#define ZEND_ACC_PUBLIC_SET
ZEND_API void zend_type_release(zend_type type, bool persistent)
#define ZEND_ACC_RESOLVED_INTERFACES
#define ZEND_ACC_VARIADIC
#define ARG_SHOULD_BE_SENT_BY_REF(zf, arg_num)
void zend_free_internal_arg_info(zend_internal_function *function)
#define ZEND_DEBUGINFO_FUNC_NAME
#define OBJ_PROP_TO_OFFSET(num)
#define ZEND_COMPILE_NO_PERSISTENT_CONSTANT_SUBSTITUTION
#define ZEND_INTERNAL_CLASS
#define ZEND_CONSTRUCTOR_FUNC_NAME
struct _zend_internal_function zend_internal_function
#define ZEND_ACC_DEPRECATED
#define ZEND_COMPILE_NO_CONSTANT_SUBSTITUTION
#define ZEND_ACC_RETURN_REFERENCE
char * zend_visibility_string(uint32_t fn_flags)
#define ZEND_ACC_PROTECTED
#define ZEND_ARG_USES_STRICT_TYPES()
#define ZEND_CALL_ARG(call, n)
#define strcasecmp(s1, s2)
void clean_module_constants(int module_number)
zend_result zend_enum_build_backed_enum_table(zend_class_entry *ce)
ZEND_API zend_class_entry * zend_ce_value_error
ZEND_API zend_class_entry * zend_ce_type_error
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_never_inline zend_verify_class_constant_type(zend_class_constant *c, const zend_string *name, zval *constant)
ZEND_API bool ZEND_FASTCALL zend_verify_ref_assignable_zval(zend_reference *ref, zval *zv, bool strict)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_use_resource_as_offset(const zval *dim)
ZEND_API zend_class_entry * zend_get_called_scope(zend_execute_data *ex)
ZEND_API zend_class_entry * zend_lookup_class(zend_string *name)
ZEND_API const char * get_active_function_name(void)
ZEND_API zend_object * zend_get_this_object(zend_execute_data *ex)
ZEND_API const char * get_active_function_arg_name(uint32_t arg_num)
ZEND_API const char * get_active_class_name(const char **space)
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_extension * zend_get_extension(const char *extension_name)
ZEND_API size_t zend_internal_run_time_cache_reserved_size(void)
zend_function ** zend_flf_functions
ZEND_API void ** zend_flf_handlers
union _zend_function zend_function
ZEND_API void ZEND_FASTCALL zend_hash_apply(HashTable *ht, apply_func_t apply_func)
ZEND_API void ZEND_FASTCALL zend_hash_rehash(HashTable *ht)
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 void ZEND_FASTCALL zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t apply_func, void *argument)
ZEND_API void ZEND_FASTCALL zend_hash_clean(HashTable *ht)
ZEND_API void ZEND_FASTCALL zend_hash_del_bucket(HashTable *ht, Bucket *p)
ZEND_API void ZEND_FASTCALL zend_hash_graceful_reverse_destroy(HashTable *ht)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_update(HashTable *ht, zend_ulong h, zval *pData)
ZEND_API void ZEND_FASTCALL zend_hash_extend(HashTable *ht, uint32_t nSize, bool packed)
ZEND_API zval *ZEND_FASTCALL zend_hash_str_update(HashTable *ht, const char *str, size_t len, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_update(HashTable *ht, zend_string *key, zval *pData)
ZEND_API zend_result ZEND_FASTCALL zend_hash_del(HashTable *ht, zend_string *key)
ZEND_API zend_result ZEND_FASTCALL zend_hash_str_del(HashTable *ht, const char *str, size_t len)
ZEND_API zval *ZEND_FASTCALL zend_hash_find(const HashTable *ht, zend_string *key)
ZEND_API zval *ZEND_FASTCALL zend_hash_add(HashTable *ht, zend_string *key, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_find(const HashTable *ht, zend_ulong h)
ZEND_API void ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort, bucket_compare_func_t compar, bool renumber)
#define zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent)
#define ZEND_HASH_MAP_FOREACH_PTR(ht, _ptr)
#define ZEND_HASH_MAP_REVERSE_FOREACH_STR_KEY_VAL(ht, _key, _val)
#define ZEND_HASH_APPLY_REMOVE
#define ZEND_HANDLE_NUMERIC_STR(key, length, idx)
#define ZEND_HASH_APPLY_KEEP
#define ZEND_HASH_FOREACH_KEY_VAL(ht, _h, _key, _val)
#define ZEND_HASH_MAP_FOREACH_STR_KEY_PTR(ht, _key, _ptr)
#define ZEND_HASH_REVERSE_FOREACH_BUCKET(ht, _bucket)
#define ZEND_HASH_MAP_REVERSE_FOREACH_PTR(ht, _ptr)
#define ZEND_HASH_FOREACH_END()
#define ZEND_HASH_MAP_FOREACH_END_DEL()
#define ZVAL_EMPTY_ARRAY(z)
#define ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(ht, _key, _val)
#define ZEND_HASH_FOREACH_VAL(ht, _val)
ZEND_API void zend_do_implement_interface(zend_class_entry *ce, zend_class_entry *iface)
void zend_build_properties_info_table(zend_class_entry *ce)
ZEND_API void zend_unregister_ini_entries_ex(int module_number, int module_type)
ZEND_API zend_class_entry * zend_ce_countable
ZEND_API zend_class_entry * zend_ce_traversable
ZEND_API zend_class_entry * zend_ce_stringable
void zend_clean_module_rsrc_dtors(int module_number)
const char * zend_rsrc_list_get_rsrc_type(zend_resource *res)
struct _zend_string zend_string
#define ZEND_MAP_PTR_INIT(ptr, val)
#define ZEND_MAP_PTR_NEW(ptr)
#define ZEND_MAP_PTR_GET_IMM(ptr)
#define ZEND_MAP_PTR_NEW_STATIC(ptr)
#define ZEND_MAP_PTR_SET_IMM(ptr, val)
#define ZEND_MAP_PTR(ptr)
#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 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 zend_function * zend_get_call_trampoline_func(const zend_class_entry *ce, zend_string *method_name, bool is_static)
ZEND_API void zend_class_init_statics(zend_class_entry *class_type)
ZEND_API bool zend_check_protected(const zend_class_entry *ce, const zend_class_entry *scope)
ZEND_API zend_property_info * zend_get_property_info(const zend_class_entry *ce, zend_string *member, int silent)
ZEND_API zend_function * zend_std_get_static_method(zend_class_entry *ce, zend_string *function_name, const zval *key)
ZEND_API zval * zend_std_get_static_property(zend_class_entry *ce, zend_string *property_name, int type)
#define ZEND_WRONG_PROPERTY_INFO
#define zend_get_function_root_class(fbc)
zval *(* zend_object_write_property_t)(zend_object *object, zend_string *member, zval *value, void **cache_slot)
#define zend_free_trampoline(func)
ZEND_API zend_object *ZEND_FASTCALL zend_objects_new(zend_class_entry *ce)
#define ZEND_OBSERVER_ENABLED
ZEND_API void ZEND_COLD zend_incompatible_double_to_long_error(double d)
ZEND_API void ZEND_COLD zend_incompatible_string_to_long_error(const zend_string *s)
ZEND_API char *ZEND_FASTCALL zend_str_tolower_copy(char *dest, const char *source, size_t length)
ZEND_API zend_string *ZEND_FASTCALL zend_string_tolower_ex(zend_string *str, bool persistent)
ZEND_API bool ZEND_FASTCALL zend_is_true(const zval *op)
ZEND_API uint8_t ZEND_FASTCALL is_numeric_str_function(const zend_string *str, zend_long *lval, double *dval)
ZEND_API zend_string *ZEND_FASTCALL zval_get_string_func(zval *op)
ZEND_API bool ZEND_FASTCALL zend_class_implements_interface(const zend_class_entry *class_ce, const zend_class_entry *interface_ce)
#define convert_to_string(op)
#define ZEND_DOUBLE_FITS_LONG(d)
#define ALLOCA_FLAG(name)
#define ZEND_IGNORE_VALUE(x)
#define EXPECTED(condition)
#define zend_always_inline
#define ZEND_MAX_RESERVED_RESOURCES
#define EMPTY_SWITCH_DEFAULT_CASE()
#define UNEXPECTED(condition)
struct _zend_array zend_array
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
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)
ZEND_API zend_string_init_interned_func_t zend_string_init_interned
ZEND_API zend_new_interned_string_func_t zend_new_interned_string
#define ZSTR_ALLOCA_FREE(str, use_heap)
#define ZSTR_IS_INTERNED(s)
#define zend_string_equals_literal(str, literal)
#define ZSTR_EMPTY_ALLOC()
#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 Z_OBJ_HANDLER_P(zv_p, hf)
int(* compare_func_t)(const void *, const void *)
#define ZEND_TYPE_PURE_MASK(t)
#define Z_ISREF_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_LITERAL_NAME_BIT
#define ZEND_TYPE_HAS_LITERAL_NAME(t)
#define Z_REFCOUNTED_P(zval_p)
#define ZVAL_STR_COPY(z, s)
struct _zend_resource zend_resource
#define ZVAL_ALIAS_PTR(z, p)
#define ZVAL_COPY_VALUE_PROP(z, v)
#define ZVAL_INDIRECT(z, v)
struct _zend_array HashTable
#define Z_OBJ_HT_P(zval_p)
#define ZEND_TYPE_LIST_SIZE(num_types)
#define ZEND_TYPE_HAS_NAME(t)
#define ZVAL_NEW_REF(z, r)
#define ZSTR_HAS_CE_CACHE(s)
#define ZEND_TYPE_FULL_MASK(t)
#define ZEND_TYPE_FOREACH(type, type_ptr)
#define ZEND_TYPE_HAS_LIST(t)
#define Z_STRLEN_P(zval_p)
#define ZEND_TYPE_INIT_NONE(extra_flags)
#define Z_OBJCE_P(zval_p)
#define ZEND_TYPE_SET_LIST(t, list)
#define ZEND_TYPE_IS_SET(t)
#define ZSTR_GET_CE_CACHE(s)
#define _ZEND_TYPE_UNION_BIT
#define ZEND_TYPE_FOREACH_END()
#define Z_RES_HANDLE_P(zval_p)
#define ZVAL_NEW_STR(z, s)
#define ZVAL_MAKE_REF(zv)
#define ZEND_TYPE_LITERAL_NAME(t)
#define _ZEND_TYPE_NAME_BIT
void(* swap_func_t)(void *, void *)
#define SEPARATE_ZVAL_NOREF(zv)
#define ZEND_TYPE_INIT_CLASS_MASK(class_name, type_mask)
#define ZVAL_DOUBLE(z, d)
#define ZVAL_OBJ_COPY(z, o)
ZEND_RESULT_CODE zend_result
#define ZVAL_COPY_PROP(z, v)
#define ZEND_TYPE_SET_PTR(t, _ptr)
#define ZEND_TYPE_INIT_CLASS(class_name, allow_null, extra_flags)
#define Z_SET_REFCOUNT(z, rc)
#define ZEND_TYPE_CONTAINS_CODE(t, code)
struct _zend_ast zend_ast
struct _zend_execute_data zend_execute_data
#define ZVAL_COPY_VALUE(z, v)
struct _zend_reference zend_reference
#define Z_TRY_DELREF_P(pz)
#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
function(EX_VAR(opline->result.var))