21#define ZEND_INTENSIVE_DEBUGGING 0
52#ifdef HAVE_GCC_GLOBAL_REGS
53# if defined(__GNUC__) && ZEND_GCC_VERSION >= 4008 && defined(i386)
54# define ZEND_VM_FP_GLOBAL_REG "%esi"
55# define ZEND_VM_IP_GLOBAL_REG "%edi"
56# elif defined(__GNUC__) && ZEND_GCC_VERSION >= 4008 && defined(__x86_64__)
57# define ZEND_VM_FP_GLOBAL_REG "%r14"
58# define ZEND_VM_IP_GLOBAL_REG "%r15"
59# elif defined(__GNUC__) && ZEND_GCC_VERSION >= 4008 && defined(__powerpc64__)
60# define ZEND_VM_FP_GLOBAL_REG "r14"
61# define ZEND_VM_IP_GLOBAL_REG "r15"
62# elif defined(__IBMC__) && ZEND_GCC_VERSION >= 4002 && defined(__powerpc64__)
63# define ZEND_VM_FP_GLOBAL_REG "r14"
64# define ZEND_VM_IP_GLOBAL_REG "r15"
65# elif defined(__GNUC__) && ZEND_GCC_VERSION >= 4008 && defined(__aarch64__)
66# define ZEND_VM_FP_GLOBAL_REG "x27"
67# define ZEND_VM_IP_GLOBAL_REG "x28"
68#elif defined(__GNUC__) && ZEND_GCC_VERSION >= 4008 && defined(__riscv) && __riscv_xlen == 64
69# define ZEND_VM_FP_GLOBAL_REG "x18"
70# define ZEND_VM_IP_GLOBAL_REG "x19"
74#if defined(ZEND_VM_FP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
75# pragma GCC diagnostic ignored "-Wvolatile-register-var"
77# pragma GCC diagnostic warning "-Wvolatile-register-var"
80#if defined(ZEND_VM_FP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
81# define EXECUTE_DATA_D void
82# define EXECUTE_DATA_C
83# define EXECUTE_DATA_DC
84# define EXECUTE_DATA_CC
85# define NO_EXECUTE_DATA_CC
87# define EXECUTE_DATA_D zend_execute_data* execute_data
88# define EXECUTE_DATA_C execute_data
89# define EXECUTE_DATA_DC , EXECUTE_DATA_D
90# define EXECUTE_DATA_CC , EXECUTE_DATA_C
91# define NO_EXECUTE_DATA_CC , NULL
94#if defined(ZEND_VM_FP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
100# define OPLINE_D const zend_op* opline
101# define OPLINE_C opline
102# define OPLINE_DC , OPLINE_D
103# define OPLINE_CC , OPLINE_C
106#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
107# pragma GCC diagnostic ignored "-Wvolatile-register-var"
108 register const zend_op*
volatile opline __asm__(ZEND_VM_IP_GLOBAL_REG);
109# pragma GCC diagnostic warning "-Wvolatile-register-var"
116#define _UNUSED_CODE 3
121#define get_zval_ptr(op_type, node, type) _get_zval_ptr(op_type, node, type EXECUTE_DATA_CC OPLINE_CC)
122#define get_zval_ptr_deref(op_type, node, type) _get_zval_ptr_deref(op_type, node, type EXECUTE_DATA_CC OPLINE_CC)
123#define get_zval_ptr_undef(op_type, node, type) _get_zval_ptr_undef(op_type, node, type EXECUTE_DATA_CC OPLINE_CC)
124#define get_op_data_zval_ptr_r(op_type, node) _get_op_data_zval_ptr_r(op_type, node EXECUTE_DATA_CC OPLINE_CC)
125#define get_op_data_zval_ptr_deref_r(op_type, node) _get_op_data_zval_ptr_deref_r(op_type, node EXECUTE_DATA_CC OPLINE_CC)
126#define get_zval_ptr_ptr(op_type, node, type) _get_zval_ptr_ptr(op_type, node, type EXECUTE_DATA_CC)
127#define get_zval_ptr_ptr_undef(op_type, node, type) _get_zval_ptr_ptr(op_type, node, type EXECUTE_DATA_CC)
128#define get_obj_zval_ptr(op_type, node, type) _get_obj_zval_ptr(op_type, node, type EXECUTE_DATA_CC OPLINE_CC)
129#define get_obj_zval_ptr_undef(op_type, node, type) _get_obj_zval_ptr_undef(op_type, node, type EXECUTE_DATA_CC OPLINE_CC)
130#define get_obj_zval_ptr_ptr(op_type, node, type) _get_obj_zval_ptr_ptr(op_type, node, type EXECUTE_DATA_CC)
132#define RETURN_VALUE_USED(opline) ((opline)->result_type != IS_UNUSED)
162#define FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_var) do { \
163 zval *__container_to_free = EX_VAR(free_var); \
164 if (UNEXPECTED(Z_REFCOUNTED_P(__container_to_free))) { \
165 zend_refcounted *__ref = Z_COUNTED_P(__container_to_free); \
166 if (UNEXPECTED(!GC_DELREF(__ref))) { \
167 zval *__zv = EX_VAR(opline->result.var); \
168 if (EXPECTED(Z_TYPE_P(__zv) == IS_INDIRECT)) { \
169 ZVAL_COPY(__zv, Z_INDIRECT_P(__zv)); \
171 rc_dtor_func(__ref); \
176#define FREE_OP(type, var) \
177 if ((type) & (IS_TMP_VAR|IS_VAR)) { \
178 zval_ptr_dtor_nogc(EX_VAR(var)); \
181#define CV_DEF_OF(i) (EX(func)->op_array.vars[i])
183#define ZEND_VM_STACK_PAGE_SLOTS (16 * 1024)
185#define ZEND_VM_STACK_PAGE_SIZE (ZEND_VM_STACK_PAGE_SLOTS * sizeof(zval))
187#define ZEND_VM_STACK_PAGE_ALIGNED_SIZE(size, page_size) \
188 (((size) + ZEND_VM_STACK_HEADER_SLOTS * sizeof(zval) \
189 + ((page_size) - 1)) & ~((page_size) - 1))
195 EG(vm_stack_top) =
EG(vm_stack)->top;
196 EG(vm_stack_end) =
EG(vm_stack)->end;
202 ZEND_ASSERT(page_size > 0 && (page_size & (page_size - 1)) == 0);
203 EG(vm_stack_page_size) = page_size;
204 EG(vm_stack) = zend_vm_stack_new_page(page_size,
NULL);
205 EG(vm_stack_top) =
EG(vm_stack)->top;
206 EG(vm_stack_end) =
EG(vm_stack)->end;
213 while (stack !=
NULL) {
225 stack =
EG(vm_stack);
226 stack->
top =
EG(vm_stack_top);
227 EG(vm_stack) = stack = zend_vm_stack_new_page(
232 EG(vm_stack_top) = (
void*)(((
char*)
ptr) +
size);
233 EG(vm_stack_end) = stack->
end;
244 #if defined(HAVE_GCC_GLOBAL_REGS)
281 return &
EG(uninitialized_zval);
294#define ZVAL_UNDEFINED_OP1() _zval_undefined_op1(EXECUTE_DATA_C)
295#define ZVAL_UNDEFINED_OP2() _zval_undefined_op2(EXECUTE_DATA_C)
305 ptr = &
EG(uninitialized_zval);
415 if (!ZEND_DEBUG || op_type ==
IS_VAR) {
424 }
else if (op_type ==
IS_CV) {
435 if (!ZEND_DEBUG || op_type ==
IS_VAR) {
444 }
else if (op_type ==
IS_CV) {
464 }
else if (op_type ==
IS_CV) {
484 }
else if (op_type ==
IS_CV) {
495 if (!ZEND_DEBUG || op_type ==
IS_VAR) {
504 }
else if (op_type ==
IS_CV) {
524 if (op_type ==
IS_CV) {
577 return &
EG(uninitialized_zval);
582 zend_assign_to_variable_reference(prop,
value_ptr, garbage_ptr);
591 return &
EG(uninitialized_zval);
615 "Cannot auto-initialize an array inside property %s::$%s of type %s",
619 zend_string_release(type_str);
625 "Cannot auto-initialize an array inside a reference held by property %s::$%s of type %s",
629 zend_string_release(type_str);
635 "Cannot access uninitialized non-nullable property %s::$%s by reference",
637 zend_get_unmangled_property_name(prop->
name));
651 "Attempt to increment/decrement property \"%s\" on %s",
659 "Attempt to modify property \"%s\" on %s",
664 "Attempt to assign property \"%s\" on %s",
668 zend_tmp_string_release(tmp_property_name);
675static ZEND_COLD void zend_verify_type_error_common(
677 const char **fname,
const char **fsep,
const char **fclass,
694 *given_kind =
"none";
702 const char *fname, *fsep, *fclass;
704 const char *given_msg;
706 zend_verify_type_error_common(
707 zf, arg_info,
value, &fname, &fsep, &fclass, &need_msg, &given_msg);
710 &&
"Arginfo verification is not performed for internal functions");
718 "must be of type %s, %s given",
ZSTR_VAL(need_msg), given_msg);
721 zend_string_release(need_msg);
724static bool zend_verify_weak_scalar_type_hint(uint32_t type_mask,
zval *
arg)
773static bool can_convert_to_string(
const zval *
zv) {
785static bool zend_verify_weak_scalar_type_hint_no_sideeffect(uint32_t type_mask,
const zval *
arg)
819 return is_internal_arg
823 if (is_internal_arg) {
824 return zend_verify_weak_scalar_type_hint_no_sideeffect(type_mask,
arg);
827 return zend_verify_weak_scalar_type_hint(type_mask,
arg);
834 zend_type_error(
"Cannot assign %s to class constant %s::%s of type %s",
837 zend_string_release(type_str);
853 zend_get_unmangled_property_name(info->
name),
855 zend_string_release(type_str);
866 zend_type_error(
"Value of type %s returned from %s::__get() must be compatible with unset property %s::$%s of type %s",
870 zend_get_unmangled_property_name(info->
name),
872 zend_string_release(type_str);
879 EG(exception_ignore_args)
882 smart_str_appendl(&
msg,
"of type ",
sizeof(
"of type ")-1);
890 smart_str_free(&
msg);
900 const char *class_name,
const char *prop_name) {
925 if (
EG(fake_scope)) {
931 const char *visibility;
933 visibility =
"private(set)";
937 visibility =
"protected(set) readonly";
939 visibility =
"protected(set)";
972 return resolve_single_class_type(
name,
scope);
975static bool zend_check_intersection_for_property_or_class_constant_class_type(
983 if (!ce || !instanceof_function(value_ce, ce)) {
990static bool zend_check_and_resolve_property_or_class_constant_class_type(
995 return zend_check_intersection_for_property_or_class_constant_class_type(
1000 if (zend_check_intersection_for_property_or_class_constant_class_type(
1008 if (ce && instanceof_function(value_ce, ce)) {
1014 return value_ce ==
scope;
1023 return ce && instanceof_function(value_ce, ce);
1048 if (i_zend_check_property_type(info,
property, strict)) {
1057 return i_zend_verify_property_type(info,
property, strict);
1067 return &
EG(uninitialized_zval);
1071 return &
EG(uninitialized_zval);
1080 return &
EG(uninitialized_zval);
1094 if (!called_scope) {
1097 return instanceof_function(
Z_OBJCE_P(
zv), called_scope);
1103# define HAVE_CACHE_SLOT (cache_slot != NULL)
1105# define HAVE_CACHE_SLOT 1
1108#define PROGRESS_CACHE_SLOT() if (HAVE_CACHE_SLOT) {cache_slot++;}
1136 *cache_slot = (
void *) ce;
1141static bool zend_check_intersection_type_from_cache_slot(
zend_type_list *intersection_type_list,
1144 void **cache_slot = *cache_slot_ptr;
1151 ce = zend_fetch_ce_from_cache_slot(cache_slot, list_type);
1154 if (!ce || !instanceof_function(arg_ce, ce)) {
1161 *cache_slot_ptr = cache_slot;
1168 bool is_return_type,
bool is_internal)
1186 ce = zend_fetch_ce_from_cache_slot(cache_slot, list_type);
1196 ce = zend_fetch_ce_from_cache_slot(cache_slot,
type);
1217 if (is_internal && is_return_type) {
1234 bool is_return_type,
bool is_internal)
1248 return zend_check_type_slow(
type,
arg, ref, cache_slot, is_return_type, is_internal);
1254 return zend_check_type_slow(
1255 type,
arg, ref, cache_slot, is_return_type,
false);
1294 if (
EXPECTED(i < fbc->common.num_args)) {
1295 cur_arg_info = &
fbc->common.arg_info[i];
1297 cur_arg_info = &
fbc->common.arg_info[
fbc->common.num_args];
1335 !zend_verify_internal_arg_types(
fbc,
call)) {
1346 fbc->common.scope ?
"::" :
"",
1350#ifndef ZEND_VERIFY_FUNC_INFO
1351# define ZEND_VERIFY_FUNC_INFO 0
1355#if ZEND_VERIFY_FUNC_INFO
1373 if (!(type_mask &
type)) {
1380 uint32_t num_checked = 0;
1397 if (!(type_mask & array_type)) {
1399 "%s() missing array element type %s",
1404 if (++num_checked > 16) {
1420 EX(
func)->common.scope ?
"::" :
"",
1424 ptr->opline->lineno,
1425 EX(
func)->common.required_num_args ==
EX(
func)->common.num_args ?
"exactly" :
"at least",
1426 EX(
func)->common.required_num_args);
1430 EX(
func)->common.scope ?
"::" :
"",
1433 EX(
func)->common.required_num_args ==
EX(
func)->common.num_args ?
"exactly" :
"at least",
1434 EX(
func)->common.required_num_args);
1441 const char *fname, *fsep, *fclass;
1443 const char *given_msg;
1445 zend_verify_type_error_common(
1446 zf, arg_info,
value, &fname, &fsep, &fclass, &need_msg, &given_msg);
1448 zend_type_error(
"%s%s%s(): Return value must be of type %s, %s returned",
1449 fclass, fsep, fname,
ZSTR_VAL(need_msg), given_msg);
1451 zend_string_release(need_msg);
1458 zend_type_error(
"%s(): never-returning %s must not implicitly return",
1468 const char *fname, *fsep, *fclass;
1470 const char *given_msg;
1472 zend_verify_type_error_common(
1473 zf, arg_info,
value, &fname, &fsep, &fclass, &need_msg, &given_msg);
1476 fclass, fsep, fname,
ZSTR_VAL(need_msg), given_msg);
1479static ZEND_COLD void zend_verify_void_return_error(
const zend_function *zf,
const char *returned_msg,
const char *returned_kind)
1494 fclass, fsep, fname, returned_msg, returned_kind);
1510 zend_verify_internal_return_error(zf,
ret);
1543 if (!zend_check_class_constant_type(c,
constant)) {
1610 EG(current_execute_data) =
call;
1622 zend_vm_stack_free_args(
call);
1650 size_t opcode = (size_t)opline->extended_value;
1679 zend_use_object_as_array(obj);
1684 FREE_OP((opline+1)->op1_type, (opline+1)->
op1.var);
1740 bool trailing_data =
false;
1743 true,
NULL, &trailing_data)) {
1749 zend_illegal_string_offset(
dim,
type);
1765 zend_illegal_string_offset(
dim,
type);
1782 switch (opline->
opcode) {
1784 msg =
"Cannot use assign-op operators with string offsets";
1787 msg =
"Cannot create references to/from string offsets";
1795 msg =
"Cannot create references to/from string offsets";
1798 msg =
"Cannot use string offset as an array";
1801 msg =
"Cannot use string offset as an object";
1804 msg =
"Cannot increment/decrement string offsets";
1829 if (deprecated->
argc == 0) {
1851 message = zend_string_copy(
Z_STR_P(z));
1858 since = zend_string_copy(
Z_STR_P(z));
1865 ZSTR_LEN(since) > 0 ?
" since " :
"",
1875 zend_string_release(since);
1876 zend_string_release(message);
1886 if (get_deprecation_suffix_from_attribute(
fbc->common.attributes,
fbc->common.scope, &message_suffix) ==
FAILURE) {
1892 if (
fbc->common.scope) {
1905 zend_string_release(message_suffix);
1912 if (get_deprecation_suffix_from_attribute(c->
attributes, c->
ce, &message_suffix) ==
FAILURE) {
1926 zend_string_release(message_suffix);
1961 zend_string_efree(
s);
2001 zend_string_efree(
s);
2026 if (string_len == 0) {
2040 zend_string_efree(
s);
2062 zend_string_forget_hash_val(
Z_STR_P(str));
2090 "Cannot increment a reference held by property %s::$%s of type %s past its maximal value",
2092 zend_get_unmangled_property_name(error_prop->name),
2094 zend_string_release(type_str);
2098 "Cannot decrement a reference held by property %s::$%s of type %s past its minimal value",
2100 zend_get_unmangled_property_name(error_prop->name),
2102 zend_string_release(type_str);
2110 zend_type_error(
"Cannot increment property %s::$%s of type %s past its maximal value",
2112 zend_get_unmangled_property_name(prop->
name),
2114 zend_string_release(type_str);
2117 zend_type_error(
"Cannot decrement property %s::$%s of type %s past its minimal value",
2119 zend_get_unmangled_property_name(prop->
name),
2121 zend_string_release(type_str);
2153 }
else if (
copy == &tmp) {
2183 }
else if (
copy == &tmp) {
2192 fast_long_increment_function(prop);
2194 fast_long_decrement_function(prop);
2231 fast_long_increment_function(prop);
2233 fast_long_decrement_function(prop);
2270 z =
object->handlers->read_property(
object,
name,
BP_VAR_R, cache_slot, &
rv);
2284 object->handlers->write_property(
object,
name, &z_copy, cache_slot);
2299 z =
object->handlers->read_property(
object,
name,
BP_VAR_R, cache_slot, &
rv);
2317 object->handlers->write_property(
object,
name, &z_copy, cache_slot);
2331 z =
object->handlers->read_property(
object,
name,
BP_VAR_R, cache_slot, &
rv);
2340 object->handlers->write_property(
object,
name, &
res, cache_slot);
2382 ht = &
EG(symbol_table);
2388 ht =
EX(symbol_table);
2410 zend_undefined_offset(lval);
2433 zend_string_addref(
offset);
2434 zend_undefined_index(
offset);
2445 zend_string_release(
offset);
2464 "Non-static method %s::%s() cannot be called statically",
2472 zend_error(
E_WARNING,
"%s%s%s(): Argument #%d%s%s%s must be passed by reference, value given",
2474 func->common.scope ?
"::" :
"",
2477 arg_name ?
" ($" :
"",
2478 arg_name ? arg_name :
"",
2490 zend_throw_error(
NULL,
"Cannot add element to the array as the next element is already occupied");
2505#ifdef ZEND_CHECK_STACK_LIMIT
2508 size_t max_stack_size = 0;
2509 if ((uintptr_t)
EG(stack_base) > (uintptr_t)
EG(stack_limit)) {
2510 max_stack_size = (size_t) ((uintptr_t)
EG(stack_base) - (uintptr_t)
EG(stack_limit));
2513 zend_throw_error(
NULL,
"Maximum call stack size of %zu bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion?",
2522 zend_use_new_element_for_string();
2528 zend_use_scalar_as_array();
2595 zend_illegal_array_offset_access(
dim);
2669 zend_illegal_array_offset_access(
dim);
2690 zend_undefined_offset(hval);
2716 zend_undefined_index(offset_key);
2743 offset_key =
val.str;
2750 NULL : &
EG(uninitialized_zval);
2816 goto fetch_from_array;
2824 zend_use_new_element_for_string();
2886 goto fetch_from_array;
2903 zend_use_scalar_as_array();
2954 bool trailing_data =
false;
2957 NULL,
true,
NULL, &trailing_data)) {
2979 zend_string_efree(str);
2996 zend_string_efree(str);
3004 goto try_string_offset;
3051 zend_unwrap_reference(
result);
3128 zend_illegal_array_offset_isset(
offset);
3162 lval = zval_get_long_ex(
offset,
true);
3201 lval = zval_get_long_ex(
offset,
true);
3223 return zend_hash_exists(
ht, str);
3227 return zend_hash_index_exists(
ht, hval);
3251 zend_illegal_array_offset_access(
key);
3266 zend_type_error(
"array_key_exists(): Argument #2 ($array) must be of type array, %s given",
3288 if (!check_type_array_assignable(prop->
type)) {
3289 zend_throw_auto_init_in_ref_error(prop);
3301 if (promotes_to_array(
ptr)) {
3305 if (!check_type_array_assignable(
prop_info->type)) {
3306 zend_throw_auto_init_in_prop_error(
prop_info);
3319 zend_throw_access_uninit_prop_by_ref_error(
prop_info);
3340 void *_cache_slot[3] = {0};
3342 cache_slot = _cache_slot;
3354 if (container_op_type ==
IS_CV
3375 uintptr_t prop_offset = (uintptr_t)
CACHED_PTR_EX(cache_slot + 1);
3427 }
else if (prop_op_type ==
IS_CONST) {
3429 cache_slot[0] = cache_slot[1] = cache_slot[2] =
NULL;
3494 variable_ptr = zend_wrong_assign_to_variable_reference(
3546 uint8_t op1_type = opline->op1_type, op2_type = opline->op2_type;
3556 FREE_OP(op1_type, opline->op1.var);
3567 FREE_OP(op1_type, opline->op1.var);
3599 FREE_OP(op1_type, opline->op1.var);
3611 CACHE_PTR(cache_slot +
sizeof(
void *) * 2, property_info);
3628 property_info =
CACHED_PTR(cache_slot +
sizeof(
void *) * 2);
3633 zend_throw_error(
NULL,
"Typed static property %s::$%s must not be accessed before initialization",
3635 zend_get_unmangled_property_name(property_info->
name));
3661 zend_type_error(
"Reference with value of type %s held by property %s::$%s of type %s is not compatible with property %s::$%s of type %s",
3664 zend_get_unmangled_property_name(prop1->
name),
3667 zend_get_unmangled_property_name(prop2->
name),
3670 zend_string_release(type1_str);
3671 zend_string_release(type2_str);
3676 zend_type_error(
"Cannot assign %s to reference held by property %s::$%s of type %s",
3679 zend_get_unmangled_property_name(prop->
name),
3682 zend_string_release(type_str);
3688 zend_type_error(
"Cannot assign %s to reference held by property %s::$%s of type %s and property %s::$%s of type %s, as this would result in an inconsistent type conversion",
3691 zend_get_unmangled_property_name(prop1->
name),
3694 zend_get_unmangled_property_name(prop2->
name),
3697 zend_string_release(type1_str);
3698 zend_string_release(type2_str);
3713 && zend_check_and_resolve_property_or_class_constant_class_type(info->
ce, info->
type,
Z_OBJCE_P(
zv))) {
3755 int result = i_zend_verify_type_assignable_zval(prop,
zv, strict);
3767 if (!zend_verify_weak_scalar_type_hint(
3774 goto conflicting_coercion_error;
3784 goto conflicting_coercion_error;
3794conflicting_coercion_error:
3838 zval_ptr_dtor_nogc(&
value);
3847 i_zval_ptr_dtor_noref(orig_value);
3889 if (i_zend_check_property_type(
prop_info,
val, strict)) {
3911 if (source_list->
ptr ==
NULL) {
3912 source_list->
ptr = prop;
3919 list->
ptr[0] = source_list->
ptr;
3927 list->
ptr[list->
num++] = prop;
3943 if (list->
num == 1) {
4007 scope ?
"scope " :
"global scope",
4012#if ZEND_INTENSIVE_DEBUGGING
4014#define CHECK_SYMBOL_TABLES() \
4015 zend_hash_apply(&EG(symbol_table), zend_check_symbol); \
4016 if (&EG(symbol_table)!=EX(symbol_table)) { \
4017 zend_hash_apply(EX(symbol_table), zend_check_symbol); \
4020static void zend_check_symbol(
zval *pz)
4026 fprintf(stderr,
"Warning! %x has invalid type!\n", *pz);
4041#define CHECK_SYMBOL_TABLES()
4055 if (
EG(symtable_cache_ptr) >=
EG(symtable_cache_limit)) {
4058 *(
EG(symtable_cache_ptr)++) = symbol_table;
4068 i_zval_ptr_dtor(cv);
4083 zend_atomic_bool_store_ex(&
EG(vm_interrupt),
false);
4084 if (zend_atomic_bool_load_ex(&
EG(timed_out))) {
4091#define ZEND_VM_INTERRUPT_CHECK() do { \
4092 if (UNEXPECTED(zend_atomic_bool_load_ex(&EG(vm_interrupt)))) { \
4093 ZEND_VM_INTERRUPT(); \
4097#define ZEND_VM_LOOP_INTERRUPT_CHECK() do { \
4098 if (UNEXPECTED(zend_atomic_bool_load_ex(&EG(vm_interrupt)))) { \
4099 ZEND_VM_LOOP_INTERRUPT(); \
4103#define ZEND_VM_FCALL_INTERRUPT_CHECK(call) do { \
4104 if (UNEXPECTED(zend_atomic_bool_load_ex(&EG(vm_interrupt)))) { \
4105 zend_fcall_interrupt(call); \
4141 uint32_t first_extra_arg = op_array->
num_args;
4146 uint32_t type_flags = 0;
4150#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
4151 opline += first_extra_arg;
4153 EX(opline) += first_extra_arg;
4160 delta = op_array->
last_var + op_array->
T - first_extra_arg;
4163 delta *=
sizeof(
zval);
4199 uint32_t first_extra_arg,
num_args;
4202#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
4211 first_extra_arg = op_array->
num_args;
4219#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
4237 void **run_time_cache;
4248 init_func_run_time_cache_i(op_array);
4260 init_func_run_time_cache_i(&
fbc->op_array);
4275 init_func_run_time_cache_i(&
fbc->op_array);
4285 init_func_run_time_cache_i(op_array);
4317#if defined(ZEND_VM_FP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
4320#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
4321 const zend_op *orig_opline = opline;
4323#if defined(ZEND_VM_FP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
4331 init_func_run_time_cache(op_array);
4335#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
4336 EX(opline) = opline;
4337 opline = orig_opline;
4339#if defined(ZEND_VM_FP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
4365 int used_stack = (
EG(vm_stack_top) - (
zval*)
call) + additional_args;
4380 }
while (passed_args);
4390 EG(vm_stack)->prev = r->
prev;
4433 switch (opline->
opcode) {
4484 if (
call->prev_execute_data) {
4489 switch (opline->
opcode) {
4518 zend_get_gc_buffer_add_zval(
buf,
p);
4528 zend_get_gc_buffer_add_zval(
buf,
val);
4569 switch (opline->
opcode) {
4621 if (
call->prev_execute_data) {
4626 switch (opline->
opcode) {
4653 zend_vm_stack_free_args(
EX(
call));
4669 zend_vm_stack_free_call_frame(
call);
4681 if (op_num >= range->start && op_num < range->
end
4694 for (i = 0; i <
EX(
func)->op_array.last_live_range; i++) {
4696 if (range->start > op_num) {
4699 }
else if (op_num < range->
end) {
4700 if (!catch_op_num || catch_op_num >= range->end) {
4706 zval_ptr_dtor_nogc(var);
4711 zend_object_store_ctor_failed(obj);
4717 zval_ptr_dtor_nogc(var);
4722 ||
last->result.var != var_num) {
4729 int j =
last->extended_value;
4779 uint32_t i, num_cvs =
EX(
func)->op_array.last_var;
4780 for (i = 0; i < num_cvs; i++) {
4781 zend_get_gc_buffer_add_zval(gc_buffer,
EX_VAR_NUM(i));
4789 zend_get_gc_buffer_add_zval(gc_buffer,
zv++);
4794 zval extra_named_params;
4795 ZVAL_ARR(&extra_named_params,
EX(extra_named_params));
4796 zend_get_gc_buffer_add_zval(gc_buffer, &extra_named_params);
4801 op_num =
EG(opline_before_exception) - op_array->
opcodes;
4815 if (range->start > op_num) {
4817 }
else if (op_num < range->
end) {
4822 zend_get_gc_buffer_add_zval(gc_buffer, var);
4836static void zend_swap_operands(
zend_op *op)
4848#ifdef ZEND_VERIFY_TYPE_INFERENCE
4850 tmp_info = op->op1_use_type;
4851 op->op1_use_type = op->op2_use_type;
4852 op->op2_use_type = tmp_info;
4853 tmp_info = op->op1_def_type;
4854 op->op1_def_type = op->op2_def_type;
4855 op->op2_def_type = tmp_info;
4875 size_t mname_length =
ZSTR_LEN(
function) - cname_length - (
sizeof(
"::") - 1);
4885 mname = zend_string_init(
ZSTR_VAL(
function) + (cname_length +
sizeof(
"::") - 1), mname_length, 0);
4894 zend_undefined_method(called_scope, mname);
4905 zend_non_static_method_call(
fbc);
4913 init_func_run_time_cache(&
fbc->op_array);
4931 init_func_run_time_cache(&
fbc->op_array);
4933 called_scope =
NULL;
4944 void *object_or_called_scope;
4952 object_or_called_scope = called_scope;
4961 object_or_called_scope =
object;
4968 object_or_called_scope =
object;
4977 init_func_run_time_cache(&
fbc->op_array);
4980 return zend_vm_stack_push_call_frame(
call_info,
4988 void *object_or_called_scope;
4991 if (zend_hash_num_elements(
function) == 2) {
5028 zend_undefined_method(called_scope,
Z_STR_P(method));
5033 zend_non_static_method_call(
fbc);
5040 object_or_called_scope = called_scope;
5053 object_or_called_scope =
object->ce;
5057 object_or_called_scope =
object;
5066 init_func_run_time_cache(&
fbc->op_array);
5069 return zend_vm_stack_push_call_frame(
call_info,
5074#define ZEND_FAKE_OP_ARRAY ((zend_op_array*)(intptr_t)-1)
5093 if (zend_hash_exists(&
EG(included_files), resolved_path)) {
5114 file_handle.
opened_path = zend_string_copy(resolved_path);
5152 zend_tmp_string_release(tmp_inc_filename);
5219 if (!check_defined_only) {
5226 if (!check_defined_only) {
5254 return *(uintptr_t *)(cache_slot + 1);
5261 for (uint32_t i = 0; i <
num_args; i++) {
5263 if (zend_string_equals(arg_name, arg_info->
name)) {
5265 *(uintptr_t *)(cache_slot + 1) = i;
5270 for (uint32_t i = 0; i <
num_args; i++) {
5273 if (zend_string_equals_cstr(arg_name, arg_info->
name,
len)) {
5275 *(uintptr_t *)(cache_slot + 1) = i;
5283 *(uintptr_t *)(cache_slot + 1) =
fbc->common.num_args;
5284 return fbc->common.num_args;
5287 return (uint32_t) -1;
5292 uint32_t *arg_num_ptr,
void **cache_slot) {
5295 uint32_t arg_offset = zend_get_arg_offset_by_name(
fbc, arg_name, cache_slot);
5296 if (
UNEXPECTED(arg_offset == (uint32_t) -1)) {
5315 *arg_num_ptr = arg_offset + 1;
5322 if (arg_offset >= current_num_args) {
5323 uint32_t new_num_args = arg_offset + 1;
5326 uint32_t num_extra_args = new_num_args - current_num_args;
5327 zend_vm_stack_extend_call_frame(call_ptr, current_num_args, num_extra_args);
5331 if (num_extra_args > 1) {
5336 }
while (
zv !=
arg);
5348 *arg_num_ptr = arg_offset + 1;
5354 call->prev_execute_data =
EG(current_execute_data);
5355 call->opline = opline;
5356 EG(current_execute_data) =
call;
5357 return old_prev_execute_data;
5363 call->prev_execute_data = old_prev_execute_data;
5374 for (uint32_t i = 0; i <
num_args; i++) {
5385 init_func_run_time_cache(op_array);
5402 end_fake_frame(
call, old);
5404 zval_ptr_dtor_nogc(&tmp);
5419 end_fake_frame(
call, old);
5432 for (uint32_t i = 0; i <
num_args; i++) {
5439 if (i < fbc->common.required_num_args) {
5442 end_fake_frame(
call, old);
5450 "must be passed explicitly, because the default value is not known");
5451 end_fake_frame(
call, old);
5458 end_fake_frame(
call, old);
5477 zend_array_release(extra_named_params);
5480#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
5488 if (
UNEXPECTED(used_stack > (
size_t)(((
char*)
EG(vm_stack_end)) - (
char*)
call))) {
5489 EX(opline) = opline;
5495 EG(vm_stack_top) = (
zval*)((
char*)
call + used_stack);
5503 uint32_t used_stack = zend_vm_calc_used_stack(
num_args,
func);
5509# define _zend_vm_stack_push_call_frame_ex zend_vm_stack_push_call_frame_ex
5510# define _zend_vm_stack_push_call_frame zend_vm_stack_push_call_frame
5513#ifdef ZEND_VM_TRACE_HANDLERS
5515#elif defined(ZEND_VM_TRACE_LINES)
5517#elif defined(ZEND_VM_TRACE_MAP)
5519#elif defined(ZEND_VERIFY_TYPE_INFERENCE)
5523#define ZEND_VM_NEXT_OPCODE_EX(check_exception, skip) \
5524 CHECK_SYMBOL_TABLES() \
5525 if (check_exception) { \
5526 OPLINE = EX(opline) + (skip); \
5528 ZEND_ASSERT(!EG(exception)); \
5529 OPLINE = opline + (skip); \
5533#define ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION() \
5534 ZEND_VM_NEXT_OPCODE_EX(1, 1)
5536#define ZEND_VM_NEXT_OPCODE() \
5537 ZEND_VM_NEXT_OPCODE_EX(0, 1)
5539#define ZEND_VM_SET_NEXT_OPCODE(new_op) \
5540 CHECK_SYMBOL_TABLES() \
5543#define ZEND_VM_SET_OPCODE_NO_INTERRUPT(new_op) \
5544 CHECK_SYMBOL_TABLES() \
5547#define ZEND_VM_SET_OPCODE(new_op) \
5548 ZEND_VM_SET_OPCODE_NO_INTERRUPT(new_op); \
5549 ZEND_VM_INTERRUPT_CHECK()
5551#define ZEND_VM_SET_RELATIVE_OPCODE(opline, offset) \
5552 ZEND_VM_SET_OPCODE(ZEND_OFFSET_TO_OPLINE(opline, offset))
5554#define ZEND_VM_JMP_EX(new_op, check_exception) do { \
5555 if (check_exception && UNEXPECTED(EG(exception))) { \
5556 HANDLE_EXCEPTION(); \
5558 ZEND_VM_SET_OPCODE(new_op); \
5559 ZEND_VM_CONTINUE(); \
5562#define ZEND_VM_JMP(new_op) \
5563 ZEND_VM_JMP_EX(new_op, 1)
5565#define ZEND_VM_INC_OPCODE() \
5569#define ZEND_VM_REPEATABLE_OPCODE \
5571#define ZEND_VM_REPEAT_OPCODE(_opcode) \
5572 } while (UNEXPECTED((++opline)->opcode == _opcode)); \
5575#define ZEND_VM_SMART_BRANCH(_result, _check) do { \
5576 if ((_check) && UNEXPECTED(EG(exception))) { \
5577 OPLINE = EX(opline); \
5578 } else if (EXPECTED(opline->result_type == (IS_SMART_BRANCH_JMPZ|IS_TMP_VAR))) { \
5580 ZEND_VM_SET_NEXT_OPCODE(opline + 2); \
5582 ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline + 1, (opline+1)->op2)); \
5584 } else if (EXPECTED(opline->result_type == (IS_SMART_BRANCH_JMPNZ|IS_TMP_VAR))) { \
5586 ZEND_VM_SET_NEXT_OPCODE(opline + 2); \
5588 ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline + 1, (opline+1)->op2)); \
5591 ZVAL_BOOL(EX_VAR(opline->result.var), _result); \
5592 ZEND_VM_SET_NEXT_OPCODE(opline + 1); \
5594 ZEND_VM_CONTINUE(); \
5596#define ZEND_VM_SMART_BRANCH_JMPZ(_result, _check) do { \
5597 if ((_check) && UNEXPECTED(EG(exception))) { \
5598 OPLINE = EX(opline); \
5599 } else if (_result) { \
5600 ZEND_VM_SET_NEXT_OPCODE(opline + 2); \
5602 ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline + 1, (opline+1)->op2)); \
5604 ZEND_VM_CONTINUE(); \
5606#define ZEND_VM_SMART_BRANCH_JMPNZ(_result, _check) do { \
5607 if ((_check) && UNEXPECTED(EG(exception))) { \
5608 OPLINE = EX(opline); \
5609 } else if (!(_result)) { \
5610 ZEND_VM_SET_NEXT_OPCODE(opline + 2); \
5612 ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline + 1, (opline+1)->op2)); \
5614 ZEND_VM_CONTINUE(); \
5616#define ZEND_VM_SMART_BRANCH_NONE(_result, _check) do { \
5617 ZVAL_BOOL(EX_VAR(opline->result.var), _result); \
5618 ZEND_VM_NEXT_OPCODE_EX(_check, 1); \
5619 ZEND_VM_CONTINUE(); \
5621#define ZEND_VM_SMART_BRANCH_TRUE() do { \
5622 if (EXPECTED(opline->result_type == (IS_SMART_BRANCH_JMPNZ|IS_TMP_VAR))) { \
5623 ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline + 1, (opline+1)->op2)); \
5624 } else if (EXPECTED(opline->result_type == (IS_SMART_BRANCH_JMPZ|IS_TMP_VAR))) { \
5625 ZEND_VM_SET_NEXT_OPCODE(opline + 2); \
5627 ZVAL_TRUE(EX_VAR(opline->result.var)); \
5628 ZEND_VM_SET_NEXT_OPCODE(opline + 1); \
5630 ZEND_VM_CONTINUE(); \
5632#define ZEND_VM_SMART_BRANCH_TRUE_JMPZ() do { \
5633 ZEND_VM_SET_NEXT_OPCODE(opline + 2); \
5634 ZEND_VM_CONTINUE(); \
5636#define ZEND_VM_SMART_BRANCH_TRUE_JMPNZ() do { \
5637 ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline + 1, (opline+1)->op2)); \
5638 ZEND_VM_CONTINUE(); \
5640#define ZEND_VM_SMART_BRANCH_TRUE_NONE() do { \
5641 ZVAL_TRUE(EX_VAR(opline->result.var)); \
5642 ZEND_VM_NEXT_OPCODE(); \
5644#define ZEND_VM_SMART_BRANCH_FALSE() do { \
5645 if (EXPECTED(opline->result_type == (IS_SMART_BRANCH_JMPNZ|IS_TMP_VAR))) { \
5646 ZEND_VM_SET_NEXT_OPCODE(opline + 2); \
5647 } else if (EXPECTED(opline->result_type == (IS_SMART_BRANCH_JMPZ|IS_TMP_VAR))) { \
5648 ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline + 1, (opline+1)->op2)); \
5650 ZVAL_FALSE(EX_VAR(opline->result.var)); \
5651 ZEND_VM_SET_NEXT_OPCODE(opline + 1); \
5653 ZEND_VM_CONTINUE(); \
5655#define ZEND_VM_SMART_BRANCH_FALSE_JMPZ() do { \
5656 ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline + 1, (opline+1)->op2)); \
5657 ZEND_VM_CONTINUE(); \
5659#define ZEND_VM_SMART_BRANCH_FALSE_JMPNZ() do { \
5660 ZEND_VM_SET_NEXT_OPCODE(opline + 2); \
5661 ZEND_VM_CONTINUE(); \
5663#define ZEND_VM_SMART_BRANCH_FALSE_NONE() do { \
5664 ZVAL_FALSE(EX_VAR(opline->result.var)); \
5665 ZEND_VM_NEXT_OPCODE(); \
5669# define ZEND_VM_GUARD(name) __asm__("#" #name)
5671# define ZEND_VM_GUARD(name)
5674#define UNDEF_RESULT() do { \
5675 if (opline->result_type & (IS_VAR | IS_TMP_VAR)) { \
5676 ZVAL_UNDEF(EX_VAR(opline->result.var)); \
5690 zend_user_opcodes[opcode] = opcode;
5694 zend_user_opcode_handlers[opcode] =
handler;
5702 return zend_user_opcode_handlers[opcode];
fprintf($stream, string $format, mixed ... $values)
prev(array|object &$array)
copy(string $from, string $to, $context=null)
count(Countable|array $value, int $mode=COUNT_NORMAL)
memset(ptr, 0, type->size)
zend_ffi_ctype_name_buf buf
#define pass(a, b, c, mul)
unsigned const char * end
unsigned char key[REFLECTION_KEY_LEN]
zend_object_iterator *(* get_iterator)(zend_class_entry *ce, zval *object, int by_ref)
zend_function *(* get_static_method)(zend_class_entry *ce, zend_string *method)
zend_class_entry * parent
fcall_end_handler_func_t fcall_end_handler
fcall_begin_handler_func_t fcall_begin_handler
statement_handler_func_t statement_handler
zend_string * opened_path
zend_internal_arg_info * arg_info
zend_object_read_dimension_t read_dimension
zend_object_write_dimension_t write_dimension
void(* rewind)(zend_object_iterator *iter)
zend_result(* valid)(zend_object_iterator *iter)
const zend_object_iterator_funcs * funcs
const zend_object_handlers * handlers
zend_live_range * live_range
struct _zend_property_info * ptr[1]
zend_string * function_name
struct _zend_function::@236135173067030250234125302313220025134003177336 common
zend_internal_function internal_function
struct _zend_property_info * ptr
ZEND_API ZEND_COLD void zend_error_unchecked(int type, const char *format,...)
ZEND_API char * zend_make_compiled_string_description(const char *name)
ZEND_API ZEND_COLD ZEND_NORETURN void zend_error_noreturn(int type, const char *format,...)
ZEND_API zend_string * zend_strpprintf_unchecked(size_t max_len, const char *format,...)
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
ZEND_API ZEND_COLD void zend_type_error(const char *format,...)
ZEND_API ZEND_COLD void zend_error(int type, const char *format,...)
ZEND_API zend_string *(* zend_resolve_path)(zend_string *filename)
ZEND_API ZEND_COLD void zend_illegal_container_offset(const zend_string *container, const zval *offset, int type)
ZEND_API void(* zend_interrupt_function)(zend_execute_data *execute_data)
ZEND_API void zend_message_dispatcher(zend_long message, const void *data)
#define ZMSG_FAILED_REQUIRE_FOPEN
#define ZMSG_FAILED_INCLUDE_FOPEN
ZEND_API bool ZEND_FASTCALL zend_parse_arg_long_weak(const zval *arg, zend_long *dest, uint32_t arg_num)
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 const char * zend_get_type_by_const(int type)
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_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_bool_weak(const zval *arg, bool *dest, uint32_t arg_num)
ZEND_API bool ZEND_FASTCALL zend_parse_arg_double_weak(const zval *arg, double *dest, uint32_t arg_num)
ZEND_API ZEND_COLD void zend_argument_type_error(uint32_t arg_num, const char *format,...)
ZEND_API bool ZEND_FASTCALL zend_parse_arg_str_weak(zval *arg, zend_string **dest, uint32_t arg_num)
ZEND_API bool zend_is_callable(zval *callable, uint32_t check_flags, zend_string **callable_name)
#define IS_CALLABLE_SUPPRESS_DEPRECATIONS
#define ZEND_END_ARG_INFO()
ZEND_API void zend_attach_symbol_table(zend_execute_data *execute_data)
#define ZEND_BEGIN_ARG_INFO_EX(name, _unused, return_reference, required_num_args)
ZEND_API zend_array * zend_rebuild_symbol_table(void)
#define ZEND_FUNCTION(name)
#define ZVAL_EMPTY_STRING(z)
#define efree_size(ptr, size)
#define erealloc(ptr, size)
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 zend_attribute * zend_get_attribute_str(HashTable *attributes, const char *str, size_t len)
ZEND_API zend_class_entry * zend_ce_deprecated
struct _zend_attribute zend_attribute
error_reporting(?int $error_level=null)
zend_string_release_ex(func->internal_function.function_name, 0)
#define ZEND_CLOSURE_OBJECT(op_array)
ZEND_API zend_op_array *(* zend_compile_file)(zend_file_handle *file_handle, int type)
ZEND_API zend_op_array *(* zend_compile_string)(zend_string *source_string, const char *filename, zend_compile_position position)
ZEND_API zend_string * zend_type_to_string(zend_type type)
zend_string * zend_type_to_string_resolved(zend_type type, zend_class_entry *scope)
zend_result(ZEND_FASTCALL * binary_op_type)(zval *, zval *, zval *)
#define ZEND_RET_USES_STRICT_TYPES()
ZEND_API zend_op_array * compile_filename(int type, zend_string *filename)
#define ZEND_FETCH_CLASS_SELF
#define ZEND_CALL_CLOSURE
#define ZEND_FETCH_DIM_REF
#define ZEND_FETCH_CLASS_AUTO
#define ZEND_USER_CODE(type)
#define ZEND_ACC_FAKE_CLOSURE
#define ZEND_FETCH_CLASS_MASK
#define ZEND_CALL_ALLOCATED
#define ZEND_FETCH_GLOBAL_LOCK
#define ZEND_ACC_HAS_TYPE_HINTS
#define ZEND_INTERNAL_FUNCTION
#define ZEND_CLASS_CONST_FLAGS(c)
#define ZEND_ACC_READONLY
#define ZEND_ACC_PROTECTED_SET
#define RUN_TIME_CACHE(op_array)
#define ZEND_FETCH_DIM_DIM
#define ZEND_ARG_SEND_MODE(arg_info)
#define ZEND_ACC_PPP_SET_MASK
#define ZEND_FETCH_CLASS_NO_AUTOLOAD
#define ZEND_ACC_USER_ARG_INFO
#define ZEND_CALL_NESTED_FUNCTION
#define ZEND_USER_FUNCTION
int(* user_opcode_handler_t)(zend_execute_data *execute_data)
#define ZEND_CALL_HAS_SYMBOL_TABLE
#define ZEND_ACC_PRIVATE_SET
#define ZEND_ACC_CALL_VIA_TRAMPOLINE
struct _zend_op_array zend_op_array
#define ZEND_CALL_HAS_THIS
#define EX_USES_STRICT_TYPES()
#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_FETCH_DIM_INCDEC
#define ZEND_FETCH_DIM_WRITE
#define ZEND_FETCH_CLASS_DEFAULT
struct _zend_internal_arg_info zend_internal_arg_info
#define ZEND_INCLUDE_ONCE
#define ZEND_CALL_NUM_ARGS(call)
#define RT_CONSTANT(opline, node)
#define ZEND_FETCH_CLASS_EXCEPTION
ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle)
#define ZEND_CALL_INFO(call)
#define ZEND_FETCH_CLASS_PARENT
struct _zend_arg_info zend_arg_info
@ ZEND_COMPILE_POSITION_AFTER_OPEN_TAG
#define ZEND_CALL_DYNAMIC
#define ZEND_ACC_HEAP_RT_CACHE
#define ZEND_FETCH_OBJ_FLAGS
#define ZEND_FETCH_GLOBAL
#define ZEND_REQUIRE_ONCE
#define ZEND_ACC_VARIADIC
#define ZEND_ADD_CALL_FLAG(call, flag)
#define ZEND_CALL_FREE_EXTRA_ARGS
#define ZEND_LIVE_SILENCE
#define ZEND_CALL_MAY_HAVE_UNDEF
#define ZEND_CLASS_CONST_IS_CASE
#define ZEND_IS_INCREMENT(opcode)
struct _zend_live_range zend_live_range
#define ZEND_INTERNAL_CLASS
struct _zend_internal_function zend_internal_function
#define ZEND_CALL_RELEASE_THIS
#define ZEND_FETCH_CLASS_SILENT
#define IS_CONSTANT_UNQUALIFIED_IN_NAMESPACE
#define ZEND_RETURNS_FUNCTION
char * zend_visibility_string(uint32_t fn_flags)
#define ZEND_ARG_USES_STRICT_TYPES()
#define ZEND_FETCH_DIM_OBJ
#define ZEND_CALL_VAR_NUM(call, n)
#define ZEND_CALL_ARG(call, n)
#define ZEND_CALL_FAKE_CLOSURE
#define ZEND_CONSTANT_FLAGS(c)
struct _zend_constant zend_constant
#define E_HAS_ONLY_FATAL_ERRORS(mask)
#define E_USER_DEPRECATED
ZEND_API zend_class_entry * zend_ce_unhandled_match_error
ZEND_API zend_class_entry * zend_ce_argument_count_error
ZEND_API ZEND_COLD zend_object * zend_throw_exception_ex(zend_class_entry *exception_ce, zend_long code, const char *format,...)
ZEND_API zend_class_entry * zend_ce_error
ZEND_API void ZEND_FASTCALL zend_free_extra_named_params(zend_array *extra_named_params)
ZEND_API HashTable * zend_unfinished_execution_gc_ex(zend_execute_data *execute_data, zend_execute_data *call, zend_get_gc_buffer *gc_buffer, bool suspended_by_yield)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_readonly_property_indirect_modification_error(const zend_property_info *info)
ZEND_API bool zend_verify_ref_array_assignable(zend_reference *ref)
ZEND_API void zend_vm_stack_init_ex(size_t page_size)
ZEND_API void zend_unfinished_calls_gc(zend_execute_data *execute_data, zend_execute_data *call, uint32_t op_num, zend_get_gc_buffer *buf)
ZEND_API bool zend_check_user_type_slow(zend_type *type, zval *arg, zend_reference *ref, void **cache_slot, bool is_return_type)
ZEND_API void ZEND_FASTCALL zend_init_func_run_time_cache(zend_op_array *op_array)
ZEND_API void zend_frameless_observed_call(zend_execute_data *execute_data)
ZEND_API void zend_init_func_execute_data(zend_execute_data *ex, zend_op_array *op_array, zval *return_value)
ZEND_API ZEND_COLD zval *ZEND_FASTCALL zend_undefined_offset_write(HashTable *ht, zend_long lval)
#define ZEND_FAKE_OP_ARRAY
ZEND_API const zend_internal_function zend_pass_function
ZEND_API zval * zend_assign_to_typed_ref(zval *variable_ptr, zval *orig_value, uint8_t value_type, bool strict)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_readonly_property_modification_error_ex(const char *class_name, const char *prop_name)
#define _zend_vm_stack_push_call_frame
#define PROGRESS_CACHE_SLOT()
ZEND_API void zend_clean_and_cache_symbol_table(zend_array *symbol_table)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_fcall_interrupt(zend_execute_data *call)
ZEND_API ZEND_ATTRIBUTE_DEPRECATED HashTable * zend_unfinished_execution_gc(zend_execute_data *execute_data, zend_execute_data *call, zend_get_gc_buffer *gc_buffer)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_invalid_class_constant_type_error(uint8_t type)
#define get_zval_ptr_undef(op_type, node, type)
ZEND_COLD void zend_match_unhandled_error(const zval *value)
ZEND_API zend_function *ZEND_FASTCALL zend_fetch_function(zend_string *name)
#define ZEND_VM_STACK_PAGE_ALIGNED_SIZE(size, page_size)
#define get_op_data_zval_ptr_r(op_type, node)
ZEND_API ZEND_COLD void zend_verify_arg_error(const zend_function *zf, const zend_arg_info *arg_info, uint32_t arg_num, zval *value)
ZEND_API bool zend_never_inline zend_verify_property_type(const zend_property_info *info, zval *property, bool strict)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_deprecated_class_constant(const zend_class_constant *c, const zend_string *constant_name)
#define get_zval_ptr_ptr(op_type, node, type)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_deprecated_function(const zend_function *fbc)
ZEND_API void zend_cleanup_unfinished_execution(zend_execute_data *execute_data, uint32_t op_num, uint32_t catch_op_num)
#define get_zval_ptr(op_type, node, type)
ZEND_API ZEND_COLD void zend_verify_never_error(const zend_function *zf)
ZEND_API bool zend_never_inline zend_verify_class_constant_type(zend_class_constant *c, const zend_string *name, zval *constant)
ZEND_API void zend_vm_stack_destroy(void)
ZEND_API void zend_vm_stack_init(void)
ZEND_API zend_result zend_set_user_opcode_handler(zend_uchar opcode, user_opcode_handler_t handler)
ZEND_API void execute_internal(zend_execute_data *execute_data, zval *return_value)
ZEND_API void ZEND_FASTCALL zend_free_compiled_variables(zend_execute_data *execute_data)
ZEND_API zend_result ZEND_FASTCALL zend_handle_undef_args(zend_execute_data *call)
ZEND_API bool ZEND_FASTCALL zend_verify_prop_assignable_by_ref(const zend_property_info *prop_info, zval *orig_val, bool strict)
ZEND_API ZEND_COLD void zend_throw_conflicting_coercion_error(const zend_property_info *prop1, const zend_property_info *prop2, const zval *zv)
ZEND_API zend_function *ZEND_FASTCALL zend_fetch_function_str(const char *name, size_t len)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_object_released_while_assigning_to_property_error(const zend_property_info *info)
ZEND_API bool zend_gcc_global_regs(void)
ZEND_API zval * zend_assign_to_typed_ref_ex(zval *variable_ptr, zval *orig_value, uint8_t value_type, bool strict, zend_refcounted **garbage_ptr)
#define ZEND_VM_STACK_PAGE_SIZE
ZEND_API void zend_init_execute_data(zend_execute_data *execute_data, zend_op_array *op_array, zval *return_value)
ZEND_API ZEND_COLD void zend_throw_ref_type_error_type(const zend_property_info *prop1, const zend_property_info *prop2, const zval *zv)
#define RETURN_VALUE_USED(opline)
ZEND_API void zend_fetch_dimension_const(zval *result, zval *container, zval *dim, int type)
#define ZVAL_UNDEFINED_OP1()
#define NO_EXECUTE_DATA_CC
ZEND_API bool ZEND_FASTCALL zend_verify_ref_assignable_zval(zend_reference *ref, zval *zv, bool strict)
ZEND_API void ZEND_FASTCALL zend_ref_add_type_source(zend_property_info_source_list *source_list, zend_property_info *prop)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_use_resource_as_offset(const zval *dim)
ZEND_COLD zend_never_inline void zend_verify_class_constant_type_error(const zend_class_constant *c, const zend_string *name, const zval *constant)
ZEND_API bool zend_verify_scalar_type_hint(uint32_t type_mask, zval *arg, bool strict, bool is_internal_arg)
ZEND_COLD void ZEND_FASTCALL zend_param_must_be_ref(const zend_function *func, uint32_t arg_num)
ZEND_COLD zend_never_inline void zend_verify_property_type_error(const zend_property_info *info, const zval *property)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_asymmetric_visibility_property_modification_error(const zend_property_info *prop_info, const char *operation)
ZEND_API ZEND_COLD zval *ZEND_FASTCALL zend_undefined_index_write(HashTable *ht, zend_string *offset)
#define FREE_OP(type, var)
ZEND_API ZEND_COLD void zend_wrong_string_offset_error(void)
ZEND_API bool ZEND_FASTCALL zend_verify_prop_assignable_by_ref_ex(const zend_property_info *prop_info, zval *orig_val, bool strict, zend_verify_prop_assignable_by_ref_context context)
ZEND_API zval * zend_get_compiled_variable_value(const zend_execute_data *execute_data, uint32_t var)
#define _zend_vm_stack_push_call_frame_ex
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_missing_arg_error(zend_execute_data *execute_data)
#define ZVAL_UNDEFINED_OP2()
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
ZEND_API void ZEND_FASTCALL zend_ref_del_type_source(zend_property_info_source_list *source_list, const zend_property_info *prop)
int(ZEND_FASTCALL * incdec_t)(zval *)
zend_execute_data * zend_vm_stack_copy_call_frame(zend_execute_data *call, uint32_t passed_args, uint32_t additional_args)
ZEND_API zval * zend_get_zval_ptr(const zend_op *opline, int op_type, const znode_op *node, const zend_execute_data *execute_data)
ZEND_COLD zend_never_inline void zend_magic_get_property_type_inconsistency_error(const zend_property_info *info, const zval *property)
ZEND_API zend_never_inline ZEND_COLD void ZEND_FASTCALL zend_cannot_add_element(void)
ZEND_API void * zend_vm_stack_extend(size_t size)
ZEND_API user_opcode_handler_t zend_get_user_opcode_handler(zend_uchar opcode)
ZEND_API void zend_init_code_execute_data(zend_execute_data *execute_data, zend_op_array *op_array, zval *return_value)
ZEND_API ZEND_COLD void zend_throw_ref_type_error_zval(const zend_property_info *prop, const zval *zv)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_cannot_pass_by_reference(uint32_t arg_num)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_readonly_property_modification_error(const zend_property_info *info)
zval *ZEND_FASTCALL zend_handle_named_arg(zend_execute_data **call_ptr, zend_string *arg_name, uint32_t *arg_num_ptr, void **cache_slot)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_false_to_array_deprecated(void)
ZEND_API ZEND_COLD void zend_verify_return_error(const zend_function *zf, zval *value)
#define CACHED_PTR_EX(slot)
ZEND_API zend_class_entry * zend_get_called_scope(zend_execute_data *ex)
#define ZEND_REF_FOREACH_TYPE_SOURCES(ref, prop)
#define ZEND_REF_HAS_TYPE_SOURCES(ref)
#define ZEND_REF_DEL_TYPE_SOURCE(ref, source)
ZEND_API const char * get_function_arg_name(const zend_function *func, uint32_t arg_num)
#define ZEND_VM_STACK_ELEMENTS(stack)
ZEND_API zend_string * get_function_or_method_name(const zend_function *func)
#define ZEND_ASSERT_VM_STACK_GLOBAL
#define ZEND_VM_STACK_HEADER_SLOTS
ZEND_API zend_class_entry * zend_fetch_class(zend_string *class_name, uint32_t fetch_type)
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_never_inline ZEND_COLD void ZEND_FASTCALL zend_call_stack_size_error(void)
#define ZEND_REF_FOREACH_TYPE_SOURCES_END()
ZEND_API ZEND_NORETURN void ZEND_FASTCALL zend_timeout(void)
#define CACHE_PTR(num, ptr)
#define ZEND_REF_FIRST_SOURCE(ref)
#define ZEND_REF_ADD_TYPE_SOURCE(ref, source)
ZEND_API bool ZEND_FASTCALL zend_asymmetric_property_has_set_access(const zend_property_info *prop_info)
zend_verify_prop_assignable_by_ref_context
@ ZEND_VERIFY_PROP_ASSIGNABLE_BY_REF_CONTEXT_MAGIC_GET
@ ZEND_VERIFY_PROP_ASSIGNABLE_BY_REF_CONTEXT_ASSIGNMENT
ZEND_API zend_class_entry * zend_lookup_class_ex(zend_string *name, zend_string *lcname, uint32_t flags)
#define CACHE_POLYMORPHIC_PTR(num, ce, ptr)
struct _zend_extension zend_extension
union _zend_function zend_function
#define ZEND_FLF_NUM_ARGS(opcode)
#define ZEND_FLF_FUNC(opline)
uint32_t zend_get_internal_func_info(const zend_function *callee_func, const zend_call_info *call_info, const zend_ssa *ssa)
struct _zend_generator zend_generator
struct _zend_vm_stack * zend_vm_stack
ZEND_API void ZEND_FASTCALL zend_hash_apply(HashTable *ht, apply_func_t apply_func)
ZEND_API zval *ZEND_FASTCALL zend_hash_str_find(const HashTable *ht, const char *str, size_t len)
ZEND_API void ZEND_FASTCALL zend_symtable_clean(HashTable *ht)
ZEND_API zval *ZEND_FASTCALL zend_hash_next_index_insert(HashTable *ht, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_add_new(HashTable *ht, zend_ulong h, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_lookup(HashTable *ht, zend_string *key)
ZEND_API zval *ZEND_FASTCALL zend_hash_add_new(HashTable *ht, zend_string *key, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_find_known_hash(const HashTable *ht, const zend_string *key)
ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht)
ZEND_API HashTable *ZEND_FASTCALL zend_array_dup(HashTable *source)
ZEND_API zval *ZEND_FASTCALL zend_hash_add_empty_element(HashTable *ht, zend_string *key)
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)
ZEND_API void ZEND_FASTCALL zend_hash_iterator_del(uint32_t idx)
#define ZEND_HASH_INDEX_LOOKUP(_ht, _h, _ret)
#define zend_new_array(size)
#define ZEND_HASH_INDEX_FIND(_ht, _h, _ret, _not_found)
#define ZEND_HANDLE_NUMERIC(key, idx)
#define ZEND_HASH_FOREACH_STR_KEY_VAL(ht, _key, _val)
#define ZEND_HASH_FOREACH_END()
#define ZEND_HASH_FOREACH_VAL(ht, _val)
struct _zend_file_handle zend_file_handle
struct _zend_object_iterator zend_object_iterator
struct _zend_string zend_string
#define ZEND_MAP_PTR_INIT(ptr, val)
#define ZEND_MAP_PTR(ptr)
#define ZEND_MAP_PTR_SET(ptr, val)
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_result zend_std_cast_object_tostring(zend_object *readobj, zval *writeobj, int type)
ZEND_API zend_function * zend_std_get_static_method(zend_class_entry *ce, zend_string *function_name, const zval *key)
#define IS_HOOKED_PROPERTY_OFFSET(offset)
#define IS_VALID_PROPERTY_OFFSET(offset)
#define zend_free_trampoline(func)
#define IS_DYNAMIC_PROPERTY_OFFSET(offset)
ZEND_API void ZEND_FASTCALL zend_objects_store_del(zend_object *object)
ZEND_API void ZEND_FASTCALL zend_observer_fcall_begin_prechecked(zend_execute_data *execute_data, zend_observer_fcall_begin_handler *handler)
#define ZEND_OBSERVER_DATA(function)
ZEND_API zend_result ZEND_FASTCALL decrement_function(zval *op1)
ZEND_API bool ZEND_FASTCALL zend_is_identical(const zval *op1, const zval *op2)
ZEND_API zend_result ZEND_FASTCALL shift_right_function(zval *result, zval *op1, zval *op2)
ZEND_API void ZEND_COLD zend_incompatible_double_to_long_error(double d)
ZEND_API zend_result ZEND_FASTCALL mod_function(zval *result, zval *op1, zval *op2)
ZEND_API zend_result ZEND_FASTCALL mul_function(zval *result, zval *op1, zval *op2)
ZEND_API zend_result ZEND_FASTCALL div_function(zval *result, zval *op1, zval *op2)
ZEND_API zend_result ZEND_FASTCALL shift_left_function(zval *result, zval *op1, zval *op2)
ZEND_API char *ZEND_FASTCALL zend_str_tolower_copy(char *dest, const char *source, size_t length)
ZEND_API zend_string *ZEND_FASTCALL zval_try_get_string_func(zval *op)
ZEND_API zend_result ZEND_FASTCALL concat_function(zval *result, zval *op1, zval *op2)
ZEND_API zend_long ZEND_FASTCALL zval_get_long_func(const zval *op, bool is_strict)
ZEND_API zend_result ZEND_FASTCALL bitwise_xor_function(zval *result, zval *op1, zval *op2)
ZEND_API zend_result ZEND_FASTCALL pow_function(zval *result, zval *op1, zval *op2)
ZEND_API zend_result ZEND_FASTCALL increment_function(zval *op1)
ZEND_API zend_result ZEND_FASTCALL bitwise_and_function(zval *result, zval *op1, zval *op2)
ZEND_API zend_result ZEND_FASTCALL bitwise_or_function(zval *result, zval *op1, zval *op2)
ZEND_API uint8_t ZEND_FASTCALL is_numeric_str_function(const zend_string *str, zend_long *lval, double *dval)
ZEND_API zend_result ZEND_FASTCALL add_function(zval *result, zval *op1, zval *op2)
ZEND_API zend_result ZEND_FASTCALL sub_function(zval *result, zval *op1, zval *op2)
#define ZEND_ATTRIBUTE_DEPRECATED
#define zend_never_inline
#define ZEND_ATTRIBUTE_UNUSED
#define EXPECTED(condition)
#define zend_always_inline
#define ZEND_CONST_COND(_condition, _default)
#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_result ZEND_FASTCALL smart_str_append_zval(smart_str *dest, const zval *value, size_t truncate)
ZEND_API void zend_stream_init_filename_ex(zend_file_handle *handle, zend_string *filename)
ZEND_API zend_result zend_stream_open(zend_file_handle *handle)
#define ZSTR_EMPTY_ALLOC()
#define zend_string_equals_literal_ci(str, c)
#define MAY_BE_ARRAY_SHIFT
#define MAY_BE_ARRAY_KEY_STRING
#define MAY_BE_ARRAY_KEY_LONG
#define ZEND_TYPE_PURE_MASK(t)
#define Z_ISREF_P(zval_p)
#define Z_TRY_ADDREF_P(pz)
#define ZEND_TYPE_NAME(t)
#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 GC_DTOR_NO_REF(p)
#define ZEND_PROPERTY_INFO_SOURCE_TO_LIST(list)
#define ZEND_TYPE_IS_INTERSECTION(t)
#define Z_REFCOUNTED_P(zval_p)
#define Z_FE_ITER_P(zval_p)
#define ZVAL_INDIRECT(z, v)
struct _zend_array HashTable
union _zend_value zend_value
#define ZVAL_COPY_OR_DUP(z, v)
#define IS_PROP_REINITABLE
#define Z_OBJ_HT_P(zval_p)
#define ZEND_TYPE_HAS_NAME(t)
#define ZVAL_COPY_DEREF(z, v)
#define Z_TYPE_INFO_P(zval_p)
#define Z_COUNTED_P(zval_p)
#define ZVAL_NEW_REF(z, r)
#define ZSTR_HAS_CE_CACHE(s)
#define ZEND_TYPE_FULL_MASK(t)
#define ZEND_TYPE_HAS_LIST(t)
#define Z_REFCOUNTED(zval)
#define Z_STRLEN_P(zval_p)
#define ZEND_TYPE_LIST_FOREACH_END()
#define Z_OBJCE_P(zval_p)
#define ZEND_TYPE_IS_SET(t)
#define ZSTR_GET_CE_CACHE(s)
#define Z_RES_HANDLE_P(zval_p)
#define ZVAL_NEW_STR(z, s)
#define ZEND_PROPERTY_INFO_SOURCE_IS_LIST(list)
struct _zend_refcounted zend_refcounted
#define Z_TYPE_INFO_REFCOUNTED(t)
#define Z_INDIRECT_P(zval_p)
#define Z_OBJPROP_P(zval_p)
#define ZVAL_DOUBLE(z, d)
ZEND_RESULT_CODE zend_result
#define IS_ARRAY_IMMUTABLE
#define Z_ISERROR_P(zval_p)
#define ZEND_TYPE_ALLOW_NULL(t)
#define SEPARATE_ARRAY(zv)
#define Z_CACHE_SLOT_P(zval_p)
#define ZEND_TYPE_LIST_FOREACH(list, type_ptr)
#define ZEND_PROPERTY_INFO_SOURCE_FROM_LIST(list)
#define ZEND_TYPE_CONTAINS_CODE(t, code)
#define ZEND_TYPE_LIST(t)
struct _zend_execute_data zend_execute_data
#define ZVAL_COPY_VALUE(z, v)
#define Z_EXTRA_P(zval_p)
struct _zend_reference zend_reference
#define ZEND_TYPE_IS_COMPLEX(t)
#define Z_OPT_TYPE_P(zval_p)
ZEND_API void zval_ptr_dtor(zval *zval_ptr)
zend_property_info * prop_info
zend_generator * generator
fbc internal_function handler(call, ret)
function(EX_VAR(opline->result.var))
zend_refcounted * garbage
#define ZEND_ASSIGN_DIM_OP
#define ZEND_INIT_USER_CALL
#define ZEND_FETCH_LIST_W
#define ZEND_CALLABLE_CONVERT
#define ZEND_FETCH_OBJ_FUNC_ARG
#define ZEND_FETCH_DIM_FUNC_ARG
#define ZEND_HANDLE_EXCEPTION
#define ZEND_POST_DEC_OBJ
#define ZEND_INIT_NS_FCALL_BY_NAME
#define ZEND_INIT_FCALL_BY_NAME
#define ZEND_SEND_VAR_NO_REF_EX
#define ZEND_SEND_FUNC_ARG
#define ZEND_CHECK_UNDEF_ARGS
#define ZEND_INIT_DYNAMIC_CALL
#define ZEND_INIT_PARENT_PROPERTY_HOOK_CALL
#define ZEND_ASSIGN_OBJ_REF
#define ZEND_FETCH_OBJ_RW
#define ZEND_FETCH_DIM_UNSET
#define ZEND_SEND_VAR_NO_REF
#define ZEND_POST_INC_OBJ
#define ZEND_DO_FCALL_BY_NAME
#define ZEND_INIT_METHOD_CALL
#define ZEND_INIT_STATIC_METHOD_CALL
#define ZEND_FETCH_DIM_RW