39 zval_ptr_dtor_nogc(op_1);
42 zval_ptr_dtor_nogc(op_2);
98 zval_ptr_dtor_nogc(op_1);
101 zval_ptr_dtor_nogc(op_2);
157 zval_ptr_dtor_nogc(op_1);
160 zval_ptr_dtor_nogc(op_2);
243 zval_ptr_dtor_nogc(op_1);
246 zval_ptr_dtor_nogc(op_2);
291 zval_ptr_dtor_nogc(op_1);
294 zval_ptr_dtor_nogc(op_2);
333 zval_ptr_dtor_nogc(op_1);
336 zval_ptr_dtor_nogc(op_2);
414 str = zend_string_extend(op1_str,
len +
ZSTR_LEN(op2_str), 0);
509 zval_ptr_dtor_nogc(op_1);
512 zval_ptr_dtor_nogc(op_2);
560 zval_ptr_dtor_str(
op1);
563 zval_ptr_dtor_str(
op2);
589 zval_ptr_dtor_nogc(op_1);
592 zval_ptr_dtor_nogc(op_2);
640 zval_ptr_dtor_str(
op1);
643 zval_ptr_dtor_str(
op2);
669 zval_ptr_dtor_nogc(op_1);
672 zval_ptr_dtor_nogc(op_2);
734 zval_ptr_dtor_nogc(op_1);
737 zval_ptr_dtor_nogc(op_2);
816 zval_ptr_dtor_nogc(op_1);
819 zval_ptr_dtor_nogc(op_2);
855 zval_ptr_dtor_nogc(op_1);
858 zval_ptr_dtor_nogc(op_2);
894 zval_ptr_dtor_nogc(op_1);
897 zval_ptr_dtor_nogc(op_2);
1000 zval *function_name;
1015 void *_cache_slot[3] = {0};
1022 object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(
BP_VAR_RW);
1023 property = GET_OP2_ZVAL_PTR(
BP_VAR_R);
1033 if (OP1_TYPE ==
IS_CV
1053 cache_slot = (OP2_TYPE ==
IS_CONST) ?
CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
1197 FREE_OP((opline+1)->op1_type, (opline+1)->
op1.var);
1285 void *_cache_slot[3] = {0};
1292 object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(
BP_VAR_RW);
1293 property = GET_OP2_ZVAL_PTR(
BP_VAR_R);
1301 if (OP1_TYPE ==
IS_CV
1321 cache_slot = (OP2_TYPE ==
IS_CONST) ?
CACHE_ADDR(opline->extended_value) : _cache_slot;
1355 void *_cache_slot[3] = {0};
1362 object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(
BP_VAR_RW);
1363 property = GET_OP2_ZVAL_PTR(
BP_VAR_R);
1371 if (OP1_TYPE ==
IS_CV
1391 cache_slot = (OP2_TYPE ==
IS_CONST) ?
CACHE_ADDR(opline->extended_value) : _cache_slot;
1431 zend_pre_incdec_property_zval(prop,
1457 zend_post_incdec_property_zval(prop,
1674 z = GET_OP1_ZVAL_PTR_UNDEF(
BP_VAR_R);
1706 varname = GET_OP1_ZVAL_PTR_UNDEF(
BP_VAR_R);
1727 target_symbol_table = zend_get_target_symbol_table(opline->extended_value
EXECUTE_DATA_CC);
1743 if (OP1_TYPE ==
IS_CV) {
1745 zend_string_addref(
name);
1754 if (OP1_TYPE ==
IS_CV) {
1755 zend_string_release(
name);
1841 prop = &
EG(uninitialized_zval);
1935 if (OP1_TYPE ==
IS_VAR) {
1950 if (OP1_TYPE ==
IS_VAR) {
2021 if (OP1_TYPE ==
IS_VAR) {
2031 void **cache_slot =
NULL;
2064 uintptr_t prop_offset = (uintptr_t)
CACHED_PTR_EX(cache_slot + 1);
2089 if (OP1_TYPE &
IS_CV) {
2098 call->return_value =
EX_VAR(opline->result.var);
2105#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
2123 if (
EXPECTED(idx < zobj->properties->nNumUsed *
sizeof(
Bucket))) {
2142 uintptr_t idx = (
char*)
retval - (
char*)
zobj->properties->arData;
2186 zend_unwrap_reference(
retval);
2204 property = GET_OP2_ZVAL_PTR(
BP_VAR_R);
2206 zend_fetch_property_address(
2211 if (OP1_TYPE ==
IS_VAR) {
2224 property = GET_OP2_ZVAL_PTR(
BP_VAR_R);
2228 if (OP1_TYPE ==
IS_VAR) {
2238 void **cache_slot =
NULL;
2267 cache_slot =
CACHE_ADDR(opline->extended_value);
2270 uintptr_t prop_offset = (uintptr_t)
CACHED_PTR_EX(cache_slot + 1);
2297 if (
EXPECTED(idx < zobj->properties->nNumUsed *
sizeof(
Bucket))) {
2316 uintptr_t idx = (
char*)
retval - (
char*)
zobj->properties->arData;
2345 zend_unwrap_reference(
retval);
2379 property = GET_OP2_ZVAL_PTR(
BP_VAR_R);
2383 if (OP1_TYPE ==
IS_VAR) {
2442 value = &
EG(uninitialized_zval);
2450 void **cache_slot =
CACHE_ADDR(opline->extended_value);
2451 uintptr_t prop_offset = (uintptr_t)
CACHED_PTR_EX(cache_slot + 1);
2478 value = &
EG(uninitialized_zval);
2505 if (OP_DATA_TYPE ==
IS_VAR) {
2519 }
else if (OP_DATA_TYPE ==
IS_CV) {
2642 if (OP_DATA_TYPE ==
IS_CV || OP_DATA_TYPE ==
IS_VAR) {
2649 }
else if (OP_DATA_TYPE ==
IS_CV) {
2653 }
else if (OP_DATA_TYPE ==
IS_VAR) {
2659 zval_ptr_dtor_nogc(free_op_data);
2661 }
else if (OP_DATA_TYPE ==
IS_CONST) {
2718 zend_use_new_element_for_string();
2750 zend_use_scalar_as_array();
2807 if (OP1_TYPE ==
IS_VAR &&
2812 }
else if (OP2_TYPE ==
IS_VAR &&
2816 variable_ptr = zend_wrong_assign_to_variable_reference(
2891 prop = &
EG(uninitialized_zval);
2921#ifdef ZEND_PREFER_RELOAD
2943#ifdef ZEND_PREFER_RELOAD
2966 zend_vm_stack_free_call_frame_ex(
call_info, old_execute_data);
2976 if (
EX(
func)->op_array.last_var > 0) {
2985 zend_vm_stack_free_call_frame_ex(
call_info, old_execute_data);
2988 if (
EX(
func)->op_array.last_var > 0) {
3005#ifdef ZEND_PREFER_RELOAD
3024 if (
EX(
func)->op_array.last_var > 0) {
3030 while (old_execute_data) {
3079 op1_type = OP1_TYPE;
3080 if (i_zend_is_true(
val)) {
3086 zval_ptr_dtor_nogc(
val);
3113 op1_type = OP1_TYPE;
3114 if (i_zend_is_true(
val)) {
3120 zval_ptr_dtor_nogc(
val);
3149 ret = i_zend_is_true(
val);
3184 ret = i_zend_is_true(
val);
3201 zval_ptr_dtor_nogc(
EX_VAR(opline->op1.var));
3210 var =
EX_VAR(opline->op1.var);
3216 zval_ptr_dtor_nogc(var);
3268 str = zend_string_extend(op1_str,
len +
ZSTR_LEN(op2_str), 0);
3370 var = GET_OP2_ZVAL_PTR_UNDEF(
BP_VAR_R);
3372 if (OP2_TYPE ==
IS_CV) {
3373 rope[0] = zend_string_copy(
Z_STR_P(var));
3400 rope[opline->extended_value] =
Z_STR_P(var);
3405 var = GET_OP2_ZVAL_PTR_UNDEF(
BP_VAR_R);
3407 if (OP2_TYPE ==
IS_CV) {
3408 rope[opline->extended_value] = zend_string_copy(
Z_STR_P(var));
3410 rope[opline->extended_value] =
Z_STR_P(var);
3435 rope[opline->extended_value] =
Z_STR_P(var);
3440 var = GET_OP2_ZVAL_PTR_UNDEF(
BP_VAR_R);
3442 if (OP2_TYPE ==
IS_CV) {
3443 rope[opline->extended_value] = zend_string_copy(
Z_STR_P(var));
3445 rope[opline->extended_value] =
Z_STR_P(var);
3455 for (i = 0; i <= opline->extended_value; i++) {
3466 for (i = 0; i <= opline->extended_value; i++) {
3475 for (i = 0; i <= opline->extended_value; i++) {
3498 class_name = GET_OP2_ZVAL_PTR_UNDEF(
BP_VAR_R);
3504 class_name = GET_OP2_ZVAL_PTR_UNDEF(
BP_VAR_R);
3531 zval *function_name;
3541 object = GET_OP1_OBJ_ZVAL_PTR_UNDEF(
BP_VAR_R);
3544 function_name = GET_OP2_ZVAL_PTR_UNDEF(
BP_VAR_R);
3602 function_name = GET_OP2_ZVAL_PTR_UNDEF(
BP_VAR_R);
3604 zend_invalid_method_call(
object, function_name);
3612 called_scope = obj->
ce;
3621 function_name = GET_OP2_ZVAL_PTR_UNDEF(
BP_VAR_R);
3628 zend_undefined_method(orig_obj->
ce,
Z_STR_P(function_name));
3648 init_func_run_time_cache(&
fbc->op_array);
3668 if (OP1_TYPE ==
IS_CV) {
3676 fbc, opline->extended_value, obj);
3686 zval *function_name;
3726 function_name = GET_OP2_ZVAL_PTR_UNDEF(
BP_VAR_R);
3755 zend_undefined_method(ce,
Z_STR_P(function_name));
3766 init_func_run_time_cache(&
fbc->op_array);
3782 init_func_run_time_cache(&
fbc->op_array);
3791 zend_non_static_method_call(
fbc);
3809 fbc, opline->extended_value, ce);
3832 init_func_run_time_cache(&
fbc->op_array);
3837 fbc, opline->extended_value,
NULL);
3847 zval *function_name;
3851 function_name = GET_OP2_ZVAL_PTR_UNDEF(
BP_VAR_R);
3855 call = zend_init_dynamic_call_string(
Z_STR_P(function_name), opline->extended_value);
3857 call = zend_init_dynamic_call_object(
Z_OBJ_P(function_name), opline->extended_value);
3859 call = zend_init_dynamic_call_array(
Z_ARRVAL_P(function_name), opline->extended_value);
3900 zval *function_name;
3904 void *object_or_called_scope;
3909 function_name = GET_OP2_ZVAL_PTR(
BP_VAR_R);
3932 object_or_called_scope = fcc.
object;
3937 object_or_called_scope = fcc.
object;
3946 zend_object_release(fcc.
object);
3952 init_func_run_time_cache(&
func->op_array);
3962 func, opline->extended_value, object_or_called_scope);
3989 init_func_run_time_cache(&
fbc->op_array);
3995 fbc, opline->extended_value,
NULL);
4017 init_func_run_time_cache(&
fbc->op_array);
4024 fbc, opline->extended_value,
NULL);
4043 fbc, opline->extended_value,
NULL);
4064 bool should_throw = zend_internal_call_should_throw(
fbc,
call);
4076 zend_internal_call_arginfo_violation(
call->func);
4079 zend_verify_internal_return_type(
call->func,
ret));
4082 zend_verify_internal_func_info(
call->func,
ret);
4102 i_zval_ptr_dtor(
ret);
4183 EG(current_execute_data) =
call;
4186 bool should_throw = zend_internal_call_should_throw(
fbc,
call);
4198 zend_internal_call_arginfo_violation(
call->func);
4201 zend_verify_internal_return_type(
call->func,
ret));
4204 zend_verify_internal_func_info(
call->func,
ret);
4231 i_zval_ptr_dtor(
ret);
4299 EG(current_execute_data) =
call;
4302 bool should_throw = zend_internal_call_should_throw(
fbc,
call);
4319 zend_internal_call_arginfo_violation(
call->func);
4322 zend_verify_internal_return_type(
call->func,
ret));
4325 zend_verify_internal_func_info(
call->func,
ret);
4339 zend_vm_stack_free_args(
call);
4345 i_zval_ptr_dtor(
ret);
4366 zend_verify_missing_return_type(
EX(
func));
4370#if !ZEND_VM_SPEC || (OP1_TYPE != IS_UNUSED)
4379 }
else if (OP1_TYPE ==
IS_VAR) {
4384 }
else if (OP1_TYPE ==
IS_CV) {
4404 void *cache_slot =
CACHE_ADDR(opline->op2.num);
4468 }
else if (OP1_TYPE ==
IS_CV) {
4551 if (OP1_TYPE ==
IS_VAR) {
4616 generator->execute_data = gen_execute_data;
4623 gen_execute_data->
opline = opline;
4648 zend_vm_stack_free_call_frame_ex(
call_info, old_execute_data);
4677 }
else if (OP1_TYPE ==
IS_CV) {
4763 if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) {
4764 DTRACE_EXCEPTION_CAUGHT((
char *)ce->name);
4768 if (ce != catch_ce) {
4769 if (!catch_ce || !instanceof_function(ce, catch_ce)) {
4896 if (OP1_TYPE ==
IS_CV) {
5091 if (OP1_TYPE ==
IS_CV) {
5119 arg_num = zend_get_arg_offset_by_name(
5210 bool have_named_params = 0;
5212 zend_vm_stack_extend_call_frame(&
EX(
call),
arg_num - 1, zend_hash_num_elements(
ht));
5216 uint32_t tmp_arg_num =
arg_num;
5222 void *cache_slot[2] = {
NULL,
NULL};
5223 tmp_arg_num = zend_get_arg_offset_by_name(
5240 void *cache_slot[2] = {
NULL,
NULL};
5241 have_named_params = 1;
5248 if (have_named_params) {
5250 "Cannot use positional argument after named argument during unpacking");
5281 bool have_named_params = 0;
5292 NULL, 0,
"Object of type %s did not create an Iterator",
ZSTR_VAL(ce->
name)
5326 "Keys must be of type int|string during argument unpacking");
5336 void *cache_slot[2] = {
NULL,
NULL};
5337 have_named_params = 1;
5340 zend_string_release(
name);
5349 E_WARNING,
"Cannot pass by-reference argument %d of %s%s%s()"
5350 " by unpacking a Traversable, passing by-value instead",
arg_num,
5360 zend_string_release(
name);
5362 if (have_named_params) {
5364 "Cannot use positional argument after named argument during unpacking");
5375 E_WARNING,
"Cannot pass by-reference argument %d of %s%s%s()"
5376 " by unpacking a Traversable, passing by-value instead",
arg_num,
5438 uint32_t skip = opline->extended_value;
5439 uint32_t
count = zend_hash_num_elements(
ht);
5448 "array_slice(): Argument #3 ($length) must be of type ?int, %s given",
5458 if (skip < count && len > 0) {
5462 zend_vm_stack_extend_call_frame(&
EX(
call), 0,
len);
5502 bool have_named_params;
5503 zend_vm_stack_extend_call_frame(&
EX(
call), 0, zend_hash_num_elements(
ht));
5506 have_named_params = 0;
5509 void *cache_slot[2] = {
NULL,
NULL};
5510 have_named_params = 1;
5516 }
else if (have_named_params) {
5518 "Cannot use positional argument after named argument");
5596#ifdef ZEND_VM_IP_GLOBAL_REG
5620 uint32_t
arg_num = opline->op1.num;
5627 param =
EX_VAR(opline->result.var);
5639 uint32_t
arg_num = opline->op1.num;
5657 param =
EX_VAR(opline->result.var);
5672 zval_ptr_dtor_nogc(param);
5701 uint32_t
arg_num = opline->op1.num;
5707 params =
EX_VAR(opline->result.var);
5729 }
while (++
arg_num <= arg_count);
5735 }
while (++
arg_num <= arg_count);
5755 }
else if (zend_hash_num_elements(
Z_ARRVAL_P(params)) == 0) {
5810 zval_ptr_dtor_nogc(op_2);
5902 if (constructor ==
NULL) {
5914 call = zend_vm_stack_push_call_frame(
5916 opline->extended_value,
NULL);
5919 init_func_run_time_cache(&constructor->op_array);
5922 call = zend_vm_stack_push_call_frame(
5925 opline->extended_value,
5945 obj = GET_OP1_OBJ_ZVAL_PTR_UNDEF(
BP_VAR_R);
5972 clone_call =
zobj->handlers->clone_obj;
5985 zend_wrong_clone_call(clone,
scope);
6061 constant_zv = GET_OP2_ZVAL_PTR_DEREF(
BP_VAR_R);
6068 constant_name =
Z_STR_P(constant_zv);
6123 if (OP2_TYPE ==
IS_CONST && !is_constant_deprecated) {
6144 zval *expr_ptr, new_expr;
6149 expr_ptr = GET_OP1_ZVAL_PTR_PTR(
BP_VAR_W);
6157 expr_ptr = GET_OP1_ZVAL_PTR(
BP_VAR_R);
6162 }
else if (OP1_TYPE ==
IS_CV) {
6172 expr_ptr = &new_expr;
6224 zend_illegal_array_offset_access(
offset);
6225 zval_ptr_dtor_nogc(expr_ptr);
6231 zval_ptr_dtor_nogc(expr_ptr);
6278 zval_ptr_dtor_nogc(
val);
6296 NULL, 0,
"Object of type %s did not create an Iterator",
ZSTR_VAL(ce->
name)
6328 "Keys must be of type int|string during array unpacking");
6342 zval_ptr_dtor_str(&
key);
6347 zval_ptr_dtor_nogc(
val);
6378 array =
EX_VAR(opline->result.var);
6403 switch (opline->extended_value) {
6419 if (
Z_TYPE_P(expr) == opline->extended_value) {
6431 if (opline->extended_value ==
IS_ARRAY) {
6452 (
Z_OBJCE_P(expr)->default_properties_count ||
6532 call = zend_vm_stack_push_call_frame(
6538 call->symbol_table =
EX(symbol_table);
6596 varname = GET_OP1_ZVAL_PTR_UNDEF(
BP_VAR_R);
6614 target_symbol_table = zend_get_target_symbol_table(opline->extended_value
EXECUTE_DATA_CC);
6654 varname = GET_OP1_ZVAL_PTR_UNDEF(
BP_VAR_R);
6735 zend_illegal_array_offset_unset(
offset);
6785 if (OP1_TYPE ==
IS_CV
6821 array_ptr = GET_OP1_ZVAL_PTR_DEREF(
BP_VAR_R);
6834 if (!
zobj->ce->get_iterator) {
6852 properties =
zobj->handlers->get_properties(
zobj);
6861 if (zend_hash_num_elements(properties) == 0) {
6876 }
else if (is_empty) {
6894 zval *array_ptr, *array_ref;
6899 array_ref = array_ptr = GET_OP1_ZVAL_PTR_PTR(
BP_VAR_R);
6904 array_ref = array_ptr = GET_OP1_ZVAL_PTR(
BP_VAR_R);
6909 if (array_ptr == array_ref) {
6916 array_ref =
EX_VAR(opline->result.var);
6942 if (array_ptr == array_ref) {
6949 array_ptr =
EX_VAR(opline->result.var);
6952 if (
Z_OBJ_P(array_ptr)->properties
6961 if (zend_hash_num_elements(properties) == 0) {
6975 }
else if (is_empty) {
6995 uint32_t value_type;
7001 array =
EX_VAR(opline->op1.var);
7042 const char *class_name, *prop_name;
7043 size_t prop_name_len;
7045 p->key, &class_name, &prop_name, &prop_name_len);
7100 ZVAL_COPY_VALUE_EX(
res,
value, gc, value_type);
7113 uint32_t value_type;
7117 array =
EX_VAR(opline->op1.var);
7180 ZVAL_COPY_VALUE_EX(
res,
value, gc, value_type);
7193 uint32_t value_type;
7198 array =
EX_VAR(opline->op1.var);
7274 zend_get_property_info_for_slot(
Z_OBJ_P(array),
value);
7278 "Cannot acquire reference to readonly property %s::$%s",
7307 const char *class_name, *prop_name;
7308 size_t prop_name_len;
7310 p->key, &class_name, &prop_name, &prop_name_len);
7316 if (++iter->
index > 0) {
7371 ZVAL_COPY_VALUE_EX(ref,
value, gc, value_type);
7429 target_symbol_table = zend_get_target_symbol_table(opline->extended_value
EXECUTE_DATA_CC);
7618 subject = GET_OP2_ZVAL_PTR_UNDEF(
BP_VAR_R);
7650 if (!
EG(error_reporting_ini_entry)) {
7658 if (!
EG(error_reporting_ini_entry)->modified) {
7659 if (!
EG(modified_ini_directives)) {
7663 if (
EXPECTED(zend_hash_add_ptr(
EG(modified_ini_directives),
ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING),
EG(error_reporting_ini_entry)) !=
NULL)) {
7664 EG(error_reporting_ini_entry)->orig_value =
EG(error_reporting_ini_entry)->value;
7665 EG(error_reporting_ini_entry)->orig_modifiable =
EG(error_reporting_ini_entry)->modifiable;
7666 EG(error_reporting_ini_entry)->modified = 1;
7696 if (OP1_TYPE ==
IS_VAR) {
7716 }
else if (OP1_TYPE ==
IS_CV) {
7718 }
else if (OP1_TYPE ==
IS_VAR && ref) {
7753 }
else if (OP1_TYPE ==
IS_CV) {
7755 }
else if ((OP1_TYPE &
IS_VAR) && ref) {
7765 if ((OP1_TYPE &
IS_VAR) && ref) {
7797 if (OP1_TYPE ==
IS_CV
7831 if (OP1_TYPE ==
IS_CV) {
7833 }
else if (OP1_TYPE ==
IS_VAR) {
7859 if (!
EG(no_extensions)) {
7871 if (!
EG(no_extensions)) {
7883 if (!
EG(no_extensions)) {
7960 if ((uint32_t)++
EG(ticks_count) >= opline->extended_value) {
7961 EG(ticks_count) = 0;
7980 expr = GET_OP1_ZVAL_PTR_UNDEF(
BP_VAR_R);
8032ZEND_VM_HELPER(zend_dispatch_try_catch_finally_helper, ANY, ANY, uint32_t try_catch_offset, uint32_t op_num)
8038 for (; try_catch_offset != (uint32_t) -1; try_catch_offset--) {
8040 &
EX(
func)->op_array.try_catch_array[try_catch_offset];
8042 if (op_num < try_catch->catch_op &&
ex) {
8047 }
else if (op_num < try_catch->finally_op) {
8061 }
else if (op_num < try_catch->finally_end) {
8111 const zend_op *throw_op =
EG(opline_before_exception);
8118 uint32_t throw_op_num = throw_op -
EX(
func)->op_array.opcodes;
8119 int i, current_try_catch_offset = -1;
8130 for (i = throw_op_num; i < range->end; i++) {
8142 throw_op_num = range->end;
8146 for (i = 0; i <
EX(
func)->op_array.last_try_catch; i++) {
8148 if (try_catch->
try_op > throw_op_num) {
8152 if (throw_op_num < try_catch->catch_op || throw_op_num < try_catch->finally_end) {
8153 current_try_catch_offset = i;
8160 switch (throw_op->
opcode) {
8179 ZEND_VM_DISPATCH_TO_HELPER(zend_dispatch_try_catch_finally_helper, try_catch_offset, current_try_catch_offset, op_num, throw_op_num);
8189 opline =
EX(opline);
8228 zval_ptr_dtor_nogc(&c.
value);
8263 called_scope =
Z_CE(
EX(This));
8268 EX(
func)->op_array.scope, called_scope,
object);
8340 if (OP1_TYPE ==
IS_VAR) {
8375 if (OP1_TYPE ==
IS_CV) {
8454 zend_throw_error(
NULL,
"Generator passed to yield from was aborted without proper return and is unable to continue");
8550 zval *fast_call =
EX_VAR(opline->result.var);
8562 uint32_t current_try_catch_offset, current_op_num;
8573 current_try_catch_offset = opline->op2.num;
8574 current_op_num = opline -
EX(
func)->op_array.opcodes;
8575 ZEND_VM_DISPATCH_TO_HELPER(zend_dispatch_try_catch_finally_helper, try_catch_offset, current_try_catch_offset, op_num, current_op_num);
8592 idx = (uintptr_t)
CACHED_PTR(opline->extended_value) - 1;
8599 EXPECTED(zend_string_equal_content(
p->key, varname)))) {
8609 idx = (
char*)
value - (
char*)
EG(symbol_table).arData;
8611 CACHE_PTR(opline->extended_value, (
void*)(idx + 1));
8613 idx = (
char*)
value - (
char*)
EG(symbol_table).arData;
8615 CACHE_PTR(opline->extended_value, (
void*)(idx + 1));
8648 gc_check_possible_root(
garbage);
8667 zval_ptr_dtor_str(
value);
8694 "strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
8727 if ((opline->extended_value >> (uint32_t)
Z_TYPE_P(
value)) & 1) {
8735 if ((opline->extended_value >> (uint32_t)
Z_TYPE_P(
value)) & 1) {
8783 if (
EG(assertions) <= 0) {
8796 uint32_t fetch_type;
8818 fetch_type = opline->op1.num;
8829 switch (fetch_type) {
8837 "Cannot use \"parent\" when current class scope has no parent");
8847 called_scope =
Z_CE(
EX(This));
8910 init_func_run_time_cache(&
fbc->op_array);
8934 EG(current_execute_data) =
call;
8937 bool should_throw = zend_internal_call_should_throw(
fbc,
call);
8956 zend_internal_call_arginfo_violation(
call->func);
8959 zend_verify_internal_return_type(
call->func,
ret));
8962 zend_verify_internal_func_info(
call->func,
ret);
8967 EG(current_execute_data) =
call->prev_execute_data;
9003 zval *closure, *var;
9005 closure = GET_OP1_ZVAL_PTR(
BP_VAR_R);
9015 var = GET_OP2_ZVAL_PTR_UNDEF(
BP_VAR_R);
9100 value = (
zval*)((
char*)
ht->arData + opline->extended_value);
9166 if (OP1_TYPE ==
IS_CV) {
9200 op = GET_OP1_ZVAL_PTR_UNDEF(
BP_VAR_R);
9212 if (jump_zv !=
NULL) {
9228 op = GET_OP1_ZVAL_PTR_UNDEF(
BP_VAR_R);
9244 jump_zv = zend_hash_find_ex(jumptable,
Z_STR_P(op), OP1_TYPE ==
IS_CONST);
9245 if (jump_zv !=
NULL) {
9261 op = GET_OP1_ZVAL_PTR_UNDEF(
BP_VAR_R);
9268 jump_zv = zend_hash_find_ex(jumptable,
Z_STR_P(op), OP1_TYPE ==
IS_CONST);
9285 if (jump_zv !=
NULL) {
9302 op = GET_OP1_ZVAL_PTR_UNDEF(
BP_VAR_R);
9318 zval_ptr_dtor_str(
op1);
9323 if (opline->extended_value) {
9396 if (
zobj->handlers->count_elements) {
9411 zend_call_known_instance_method_with_0_params(count_fn,
zobj, &
retval);
9498 }
else if (
Z_CE(
EX(This))) {
9540 uint32_t arg_count, result_size, skip;
9545 if (arg_count < skip) {
9548 result_size = arg_count - skip;
9552 result_size = arg_count;
9557 uint32_t first_extra_arg =
EX(
func)->op_array.num_args;
9566 if (arg_count > first_extra_arg) {
9567 while (i < first_extra_arg) {
9582 if (skip < first_extra_arg) {
9585 skip -= first_extra_arg;
9589 while (i < arg_count) {
9605 ht->nNumOfElements = result_size;
9671#if !ZEND_VM_SPEC || ZEND_OBSERVER_ENABLED
9696#if !ZEND_VM_SPEC || ZEND_OBSERVER_ENABLED
9724#if !ZEND_VM_SPEC || ZEND_OBSERVER_ENABLED
9760#if !ZEND_VM_SPEC || ZEND_OBSERVER_ENABLED
9818 call = zend_vm_stack_push_call_frame(
9823 init_func_run_time_cache(&hook->
op_array);
9829 call = zend_vm_stack_push_call_frame(
10258 zend_undefined_offset(
offset);
10271 if (OP1_TYPE ==
IS_CV) {
10284 uint32_t
arg_num = opline->op2.num;
10293 if (OP1_TYPE ==
IS_CV) {
10317 uint32_t
arg_num = opline->op2.num;
10333 uint32_t value_type;
10337 array =
EX_VAR(opline->op1.var);
10399 zend_atomic_bool_store_ex(&
EG(vm_interrupt),
false);
10401 if (zend_atomic_bool_load_ex(&
EG(timed_out))) {
10407 const zend_op *throw_op =
EG(opline_before_exception);
count(Countable|array $value, int $mode=COUNT_NORMAL)
foreach($dp as $el) foreach( $dp as $el) if( $pass2< 2) echo ""
unsigned const char * end
unsigned const char * pos
unsigned char key[REFLECTION_KEY_LEN]
#define EVAL(op, r, addr)
spl_ce_SplDoublyLinkedList get_iterator
HashTable properties_info
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_function * constructor
uint32_t enum_backing_type
zend_class_entry * parent
zend_execute_data * prev_execute_data
zend_array * symbol_table
zend_function * function_handler
zend_class_entry * called_scope
zend_execute_data * execute_data
zend_object_get_method_t get_method
void(* get_current_key)(zend_object_iterator *iter, zval *key)
void(* rewind)(zend_object_iterator *iter)
void(* move_forward)(zend_object_iterator *iter)
zend_result(* valid)(zend_object_iterator *iter)
zval *(* get_current_data)(zend_object_iterator *iter)
const zend_object_iterator_funcs * funcs
const zend_object_handlers * handlers
zend_property_info_source_list sources
struct _zend_function::@236135173067030250234125302313220025134003177336 common
struct _zend_property_info * ptr
ZEND_API ZEND_COLD void zend_error_unchecked(int type, const char *format,...)
ZEND_API ZEND_COLD ZEND_NORETURN void zend_error_noreturn(int type, 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_type_error(const char *format,...)
ZEND_API void(* zend_ticks_function)(int ticks)
ZEND_API void(* zend_interrupt_function)(zend_execute_data *execute_data)
ZEND_API zend_write_func_t zend_write
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 const char * zend_zval_value_name(const zval *arg)
ZEND_API const char * zend_zval_type_name(const zval *arg)
ZEND_API zend_result object_init_ex(zval *arg, zend_class_entry *class_type)
ZEND_API ZEND_COLD void zend_wrong_property_read(zval *object, zval *property)
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 zend_string * zend_zval_get_legacy_type(const zval *arg)
ZEND_API zend_result zend_update_class_constant(zend_class_constant *c, const zend_string *name, zend_class_entry *scope)
ZEND_API bool ZEND_FASTCALL zend_parse_arg_str_weak(zval *arg, zend_string **dest, uint32_t arg_num)
struct _zend_fcall_info_cache zend_fcall_info_cache
#define ZVAL_STRING(z, s)
#define array_init_size(arg, size)
ZEND_API void zend_detach_symbol_table(zend_execute_data *execute_data)
#define CE_CONSTANTS_TABLE(ce)
ZEND_API void zend_attach_symbol_table(zend_execute_data *execute_data)
ZEND_API zend_array * zend_rebuild_symbol_table(void)
#define ZVAL_STRINGL(z, s, l)
#define efree_size(ptr, size)
#define ALLOC_HASHTABLE(ht)
error_reporting(?int $error_level=null)
#define RETURN_VALUE_USED(opline)
ZEND_API void zend_create_closure(zval *res, zend_function *func, zend_class_entry *scope, zend_class_entry *called_scope, zval *this_ptr)
ZEND_API zend_class_entry * zend_ce_closure
zend_string_release_ex(func->internal_function.function_name, 0)
void zend_closure_bind_var_ex(zval *closure_zv, uint32_t offset, zval *val)
void zend_closure_from_frame(zval *return_value, zend_execute_data *call)
#define ZEND_CLOSURE_OBJECT(op_array)
ZEND_API bool zend_is_smart_branch(const zend_op *opline)
ZEND_API zend_result do_bind_class(zval *lcname, zend_string *lc_parent_name)
ZEND_API zend_class_entry * zend_bind_class_in_slot(zval *class_table_slot, zval *lcname, zend_string *lc_parent_name)
ZEND_API zend_result do_bind_function(zend_function *func, zval *lcname)
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)
#define ZEND_JMP_NULL_BP_VAR_IS
#define ZEND_FETCH_CLASS_SELF
#define ZEND_CALL_CLOSURE
#define QUICK_ARG_SHOULD_BE_SENT_BY_REF(zf, arg_num)
#define ZEND_USER_CODE(type)
#define ZEND_SHORT_CIRCUITING_CHAIN_EXPR
#define ARG_MUST_BE_SENT_BY_REF(zf, arg_num)
#define ZEND_CALL_TOP_FUNCTION
#define ZEND_ACC_FAKE_CLOSURE
#define ZEND_FETCH_CLASS_MASK
#define ZEND_CALL_ALLOCATED
#define QUICK_ARG_MAY_BE_SENT_BY_REF(zf, arg_num)
#define ZEND_CALL_NESTED_CODE
#define ZEND_FETCH_GLOBAL_LOCK
#define ZEND_ARRAY_NOT_PACKED
#define ZEND_ACC_HAS_TYPE_HINTS
#define ZEND_INTERNAL_FUNCTION
#define ZEND_CLASS_CONST_FLAGS(c)
#define ZEND_CALL_FRAME_SLOT
#define ZEND_SHORT_CIRCUITING_CHAIN_EMPTY
#define ZEND_FREE_ON_RETURN
#define QUICK_ARG_MUST_BE_SENT_BY_REF(zf, arg_num)
#define ZEND_ACC_READONLY
#define RUN_TIME_CACHE(op_array)
#define ZEND_RETURNS_VALUE
#define ZEND_FETCH_CLASS_NO_AUTOLOAD
#define ZEND_CALL_NESTED_FUNCTION
#define ZEND_CALL_NEEDS_REATTACH
#define ZEND_USER_FUNCTION
#define ZEND_CALL_VAR(call, n)
#define ZEND_CALL_HAS_SYMBOL_TABLE
#define ZEND_ACC_CALL_VIA_TRAMPOLINE
#define ZEND_CALL_GENERATOR
#define ZEND_CALL_OBSERVED
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_BIND_IMPLICIT
#define ZEND_FETCH_CLASS_STATIC
#define ZEND_FETCH_CLASS_DEFAULT
#define ZEND_ACC_CONSTANTS_UPDATED
#define ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES
#define ZEND_CALL_NUM_ARGS(call)
#define RT_CONSTANT(opline, node)
#define ZEND_FETCH_CLASS_EXCEPTION
#define ZEND_CALL_INFO(call)
#define ZEND_FETCH_CLASS_PARENT
#define ZEND_CALL_FUNCTION
#define ZEND_ARRAY_ELEMENT_REF
#define ZEND_ACC_HAS_RETURN_TYPE
struct _zend_arg_info zend_arg_info
#define OP_JMP_ADDR(opline, node)
#define ZEND_CALL_DYNAMIC
#define ZEND_FETCH_OBJ_FLAGS
#define ZEND_CALL_SEND_ARG_BY_REF
#define ZEND_FETCH_GLOBAL
#define ZEND_ADD_CALL_FLAG_EX(call_info, flag)
#define ZEND_ACC_VARIADIC
#define ZEND_ADD_CALL_FLAG(call, flag)
#define ZEND_CALL_FREE_EXTRA_ARGS
#define ZEND_ARRAY_SIZE_SHIFT
#define ARG_SHOULD_BE_SENT_BY_REF(zf, arg_num)
#define ZEND_CALL_MAY_HAVE_UNDEF
struct _zend_try_catch_element zend_try_catch_element
#define ZEND_DEL_CALL_FLAG(call, flag)
struct _zend_live_range zend_live_range
#define ZEND_ACC_DEPRECATED
#define ZEND_CALL_RELEASE_THIS
#define ZEND_FETCH_CLASS_SILENT
#define ZEND_ACC_RETURN_REFERENCE
#define ZEND_RETURNS_FUNCTION
char * zend_visibility_string(uint32_t fn_flags)
#define ARG_MAY_BE_SENT_BY_REF(zf, arg_num)
#define ZEND_SHORT_CIRCUITING_CHAIN_MASK
#define ZEND_ACC_NEVER_CACHE
#define ZEND_BIND_EXPLICIT
#define ZEND_CALL_ARG(call, n)
#define ZEND_CALL_FAKE_CLOSURE
#define ZEND_SHORT_CIRCUITING_CHAIN_ISSET
ZEND_API zend_result zend_register_constant(zend_constant *c)
ZEND_API bool zend_verify_const_access(zend_class_constant *c, zend_class_entry *scope)
#define ZEND_CONSTANT_SET_FLAGS(c, _flags, _module_number)
struct _zend_constant zend_constant
#define PHP_USER_CONSTANT
#define E_HAS_ONLY_FATAL_ERRORS(mask)
void zend_exception_restore(void)
ZEND_API bool zend_is_unwind_exit(const zend_object *ex)
ZEND_API ZEND_COLD void zend_throw_exception_object(zval *exception)
void zend_exception_save(void)
ZEND_API bool zend_is_graceful_exit(const zend_object *ex)
ZEND_API zend_class_entry * zend_ce_division_by_zero_error
ZEND_API ZEND_COLD zend_object * zend_throw_exception_ex(zend_class_entry *exception_ce, zend_long code, const char *format,...)
void zend_exception_set_previous(zend_object *exception, zend_object *add_previous)
ZEND_API void ZEND_FASTCALL zend_free_extra_named_params(zend_array *extra_named_params)
ZEND_API bool zend_verify_ref_array_assignable(zend_reference *ref)
ZEND_API void zend_frameless_observed_call(zend_execute_data *execute_data)
#define ZEND_VM_SET_OPCODE_NO_INTERRUPT(new_op)
#define ZEND_FAKE_OP_ARRAY
#define ZEND_VM_SMART_BRANCH_FALSE()
ZEND_API const zend_internal_function zend_pass_function
#define _zend_vm_stack_push_call_frame
#define ZEND_VM_FCALL_INTERRUPT_CHECK(call)
ZEND_API void zend_clean_and_cache_symbol_table(zend_array *symbol_table)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_invalid_class_constant_type_error(uint8_t type)
ZEND_COLD void zend_match_unhandled_error(const zval *value)
#define ZEND_VM_SMART_BRANCH(_result, _check)
#define get_op_data_zval_ptr_r(op_type, node)
#define ZEND_VM_JMP(new_op)
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)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_deprecated_function(const zend_function *fbc)
ZEND_API ZEND_COLD void zend_verify_never_error(const zend_function *zf)
#define ZEND_VM_JMP_EX(new_op, check_exception)
ZEND_API zend_result ZEND_FASTCALL zend_handle_undef_args(zend_execute_data *call)
#define ZVAL_UNDEFINED_OP1()
#define ZEND_VM_REPEAT_OPCODE(_opcode)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_use_resource_as_offset(const zval *dim)
ZEND_COLD void ZEND_FASTCALL zend_param_must_be_ref(const zend_function *func, uint32_t arg_num)
#define ZEND_VM_NEXT_OPCODE_EX(check_exception, skip)
#define ZEND_VM_REPEATABLE_OPCODE
#define FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_var)
#define FREE_OP(type, var)
#define ZEND_VM_SET_RELATIVE_OPCODE(opline, offset)
#define ZEND_VM_SMART_BRANCH_TRUE()
#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 zend_never_inline ZEND_COLD void ZEND_FASTCALL zend_cannot_add_element(void)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_cannot_pass_by_reference(uint32_t arg_num)
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)
#define ZEND_REF_HAS_TYPE_SOURCES(ref)
#define ZEND_USER_OPCODE_ENTER
ZEND_API void(* zend_execute_ex)(zend_execute_data *execute_data)
ZEND_API void(* zend_execute_internal)(zend_execute_data *execute_data, zval *return_value)
ZEND_API void execute_ex(zend_execute_data *execute_data)
ZEND_API zend_class_entry * zend_fetch_class(zend_string *class_name, uint32_t fetch_type)
#define ZEND_USER_OPCODE_RETURN
ZEND_API zend_class_entry * zend_fetch_class_by_name(zend_string *class_name, zend_string *lcname, uint32_t fetch_type)
#define ZEND_USER_OPCODE_LEAVE
ZEND_API zend_result ZEND_FASTCALL zval_update_constant_with_ctx(zval *pp, zend_class_entry *scope, zend_ast_evaluate_ctx *ctx)
ZEND_API zend_result ZEND_FASTCALL zval_update_constant_ex(zval *pp, zend_class_entry *scope)
#define DECODE_SPECIAL_CACHE_NUM(ptr)
#define IS_SPECIAL_CACHE_VAL(ptr)
#define CACHE_PTR_EX(slot, ptr)
#define ENCODE_SPECIAL_CACHE_NUM(num)
#define ZEND_USER_OPCODE_DISPATCH
ZEND_API ZEND_NORETURN void ZEND_FASTCALL zend_timeout(void)
#define CACHE_PTR(num, ptr)
#define ZEND_REF_ADD_TYPE_SOURCE(ref, source)
#define ZEND_USER_OPCODE_CONTINUE
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)
ZEND_API zend_llist zend_extensions
ZEND_API void zend_fiber_switch_unblock(void)
ZEND_API void zend_fiber_switch_block(void)
union _zend_function zend_function
void(* zend_frameless_function_1)(zval *return_value, zval *op1)
#define ZEND_FLF_HANDLER(opline)
void(* zend_frameless_function_3)(zval *return_value, zval *op1, zval *op2, zval *op3)
void(* zend_frameless_function_0)(zval *return_value)
#define ZEND_FLF_FUNC(opline)
void(* zend_frameless_function_2)(zval *return_value, zval *op1, zval *op2)
ZEND_API void ZEND_FASTCALL gc_possible_root(zend_refcounted *ref)
void zend_generator_yield_from(zend_generator *generator, zend_generator *from)
ZEND_API zend_class_entry * zend_ce_generator
struct _zend_generator zend_generator
struct _zend_ini_entry zend_ini_entry
ZEND_API HashTable *ZEND_FASTCALL zend_proptable_to_symtable(HashTable *ht, bool always_duplicate)
ZEND_API HashTable *ZEND_FASTCALL zend_symtable_to_proptable(HashTable *ht)
ZEND_API void ZEND_FASTCALL zend_hash_real_init_packed(HashTable *ht)
ZEND_API uint32_t ZEND_FASTCALL zend_hash_iterator_add(HashTable *ht, HashPosition pos)
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_add_new(HashTable *ht, zend_string *key, zval *pData)
ZEND_API zend_result ZEND_FASTCALL zend_hash_index_del(HashTable *ht, zend_ulong h)
ZEND_API zval *ZEND_FASTCALL zend_hash_find_known_hash(const HashTable *ht, const zend_string *key)
ZEND_API HashPosition ZEND_FASTCALL zend_hash_iterator_pos(uint32_t idx, 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 zend_result ZEND_FASTCALL zend_hash_del_ind(HashTable *ht, zend_string *key)
ZEND_API void ZEND_FASTCALL zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor)
ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht)
ZEND_API HashPosition ZEND_FASTCALL zend_hash_iterator_pos_ex(uint32_t idx, zval *array)
ZEND_API HashTable *ZEND_FASTCALL zend_array_dup(HashTable *source)
ZEND_API zval *ZEND_FASTCALL zend_hash_update(HashTable *ht, zend_string *key, zval *pData)
ZEND_API void ZEND_FASTCALL zend_hash_real_init_mixed(HashTable *ht)
ZEND_API zend_result ZEND_FASTCALL zend_hash_del(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_FILL_ADD(_val)
#define zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent)
#define ZEND_HASH_FILL_PACKED(ht)
#define ZEND_HASH_FILL_SET(_val)
#define ZEND_HASH_FILL_END()
#define ZEND_HASH_FILL_SET_NULL()
#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_MAP_FOREACH_STR_KEY(ht, _key)
#define ZEND_HASH_FILL_FINISH()
#define ZEND_HASH_PACKED_FOREACH_VAL(ht, _val)
#define ZEND_HASH_FOREACH_END()
#define ZEND_HASH_FILL_NEXT()
#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 zend_class_entry * zend_do_link_class(zend_class_entry *ce, zend_string *lc_parent_name, zend_string *key)
ZEND_API zend_class_entry * zend_ce_countable
ZEND_API zend_object_iterator * zend_iterator_unwrap(zval *array_ptr)
ZEND_API void zend_iterator_dtor(zend_object_iterator *iter)
struct _zend_object_iterator zend_object_iterator
struct _zend_object_iterator_funcs zend_object_iterator_funcs
ZEND_API zend_object * zend_lazy_object_init(zend_object *obj)
const char * zend_rsrc_list_get_rsrc_type(zend_resource *res)
ZEND_API void zend_llist_apply_with_argument(zend_llist *l, llist_apply_with_arg_func_t func, void *arg)
void(* llist_apply_with_arg_func_t)(void *data, void *arg)
struct _zend_string zend_string
#define ZEND_MAP_PTR_GET(ptr)
#define ZEND_MAP_PTR_SET(ptr, val)
#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval)
ZEND_API zend_result zend_check_property_access(const zend_object *zobj, zend_string *prop_info_name, bool is_dynamic)
ZEND_API HashTable * zend_get_properties_for(zval *obj, zend_prop_purpose purpose)
ZEND_API bool zend_check_protected(const zend_class_entry *ce, const zend_class_entry *scope)
ZEND_API ZEND_COLD bool zend_std_unset_static_property(zend_class_entry *ce, zend_string *property_name)
ZEND_API const zend_object_handlers std_object_handlers
ZEND_API HashTable * zend_std_build_object_properties_array(zend_object *zobj)
ZEND_API zend_property_info * zend_get_property_info(const zend_class_entry *ce, zend_string *member, int silent)
ZEND_API zval * zend_std_read_property(zend_object *zobj, zend_string *name, int type, void **cache_slot, zval *rv)
ZEND_API zend_function * zend_get_property_hook_trampoline(const zend_property_info *prop_info, zend_property_hook_kind kind, zend_string *prop_name)
ZEND_API HashTable * rebuild_object_properties_internal(zend_object *zobj)
ZEND_API zend_function * zend_std_get_static_method(zend_class_entry *ce, zend_string *function_name, const zval *key)
#define ZEND_WRONG_PROPERTY_INFO
#define zend_release_properties(ht)
#define ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(offset)
#define ZEND_DECODE_DYN_PROP_OFFSET(offset)
#define zend_get_function_root_class(fbc)
#define ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(offset)
zend_object *(* zend_object_clone_obj_t)(zend_object *object)
#define ZEND_ENCODE_DYN_PROP_OFFSET(offset)
#define IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(offset)
@ ZEND_PROP_PURPOSE_ARRAY_CAST
#define IS_HOOKED_PROPERTY_OFFSET(offset)
#define ZEND_DYNAMIC_PROPERTY_OFFSET
#define ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(offset)
#define IS_VALID_PROPERTY_OFFSET(offset)
#define ZEND_STD_BUILD_OBJECT_PROPERTIES_ARRAY_COMPATIBLE(object)
#define zend_free_trampoline(func)
#define IS_DYNAMIC_PROPERTY_OFFSET(offset)
ZEND_API zend_object *ZEND_FASTCALL zend_objects_new(zend_class_entry *ce)
ZEND_API void ZEND_FASTCALL zend_objects_store_del(zend_object *object)
int zend_observer_fcall_op_array_extension
#define ZEND_OBSERVER_DATA(function)
#define ZEND_OBSERVER_ENABLED
#define ZEND_OBSERVER_FCALL_BEGIN(execute_data)
#define ZEND_OBSERVER_FCALL_END(execute_data, return_value)
ZEND_API zend_result ZEND_FASTCALL decrement_function(zval *op1)
ZEND_API zend_result ZEND_FASTCALL compare_function(zval *result, zval *op1, zval *op2)
ZEND_API zend_result ZEND_FASTCALL shift_right_function(zval *result, zval *op1, zval *op2)
ZEND_API zend_result ZEND_FASTCALL bitwise_not_function(zval *result, zval *op1)
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 int ZEND_FASTCALL zend_compare(zval *op1, zval *op2)
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 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)
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 EXPECTED(condition)
#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
#define ZSTR_COPY_CONCAT_PROPERTIES_BOTH(out, in1, in2)
#define ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(s1, s2)
#define ZSTR_IS_INTERNED(s)
#define ZSTR_COPYABLE_CONCAT_PROPERTIES
#define ZSTR_EMPTY_ALLOC()
#define zend_string_equals_literal_ci(str, c)
#define ZSTR_GET_COPYABLE_CONCAT_PROPERTIES(s)
#define Z_SET_REFCOUNT_P(pz, rc)
#define Z_ISREF_P(zval_p)
#define Z_TRY_ADDREF_P(pz)
#define ZVAL_NEW_EMPTY_REF(z)
#define GC_SET_REFCOUNT(p, rc)
#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 Z_OPT_REFCOUNTED_P(zval_p)
#define Z_FE_POS_P(zval_p)
#define Z_REFCOUNTED_P(zval_p)
#define ZVAL_STR_COPY(z, s)
#define Z_FE_ITER_P(zval_p)
#define ZVAL_INDIRECT(z, v)
struct _zend_array HashTable
#define ZVAL_COPY_OR_DUP(z, v)
#define Z_OBJ_HT_P(zval_p)
#define ZVAL_COPY_DEREF(z, v)
#define Z_TYPE_INFO_P(zval_p)
#define ZVAL_OPT_DEREF(z)
#define Z_OPT_ISREF_P(zval_p)
#define Z_COUNTED_P(zval_p)
#define ZVAL_NEW_REF(z, r)
#define ZEND_TYPE_FULL_MASK(t)
#define Z_STRLEN_P(zval_p)
#define Z_OPLINE_NUM_P(zval_p)
#define Z_OBJCE_P(zval_p)
#define ZEND_TYPE_IS_SET(t)
#define Z_RES_HANDLE_P(zval_p)
#define ZVAL_NEW_STR(z, s)
#define Z_OPT_REFCOUNTED(zval)
struct _zend_refcounted zend_refcounted
#define Z_TYPE_INFO(zval)
#define Z_TYPE_INFO_REFCOUNTED(t)
#define Z_INDIRECT_P(zval_p)
#define Z_OBJPROP_P(zval_p)
#define ZVAL_DOUBLE(z, d)
#define ZVAL_MAKE_REF_EX(z, refcount)
ZEND_RESULT_CODE zend_result
#define IS_ARRAY_IMMUTABLE
#define Z_ISERROR_P(zval_p)
#define SEPARATE_ARRAY(zv)
#define Z_CACHE_SLOT_P(zval_p)
#define GC_IS_RECURSIVE(p)
#define ZVAL_INTERNED_STR(z, s)
#define ZEND_TYPE_CONTAINS_CODE(t, code)
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 Z_OPT_CONSTANT(zval)
#define GC_ADD_FLAGS(p, flags)
#define Z_OPT_TYPE_P(zval_p)
ZEND_API void ZEND_FASTCALL rc_dtor_func(zend_refcounted *p)
ZEND_API void zval_ptr_dtor(zval *zval_ptr)
ZEND_API void zval_add_ref(zval *p)
i_init_code_execute_data(call, new_op_array, return_value)
ZEND_VM_HOT_HELPER(zend_leave_helper, ANY, ANY)
zend_generator_close(generator, 1)
ZEND_OBSERVER_SAVE_OPLINE()
zend_destroy_static_vars(new_op_array)
fast_long_increment_function(var_ptr)
ZEND_VM_TYPE_SPEC_HANDLER(ZEND_COUNT,(op1_info &(MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF))==MAY_BE_ARRAY, ZEND_COUNT_ARRAY, CV|TMPVAR, UNUSED)
ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_INIT_FCALL, Z_EXTRA_P(RT_CONSTANT(op, op->op2)) !=0, ZEND_INIT_FCALL_OFFSET, NUM, CONST, NUM|CACHE_SLOT)
ZEND_OBSERVER_FREE_RETVAL()
zend_vm_stack_free_args(call)
zend_property_info * prop_info
ZEND_VM_COLD_HELPER(zend_mod_by_zero_helper, ANY, ANY)
zend_error(E_NOTICE, "Only variables should be passed by reference")
ZEND_VM_HOT_HANDLER(36, ZEND_POST_INC, VAR|CV, ANY)
ZEND_VM_C_GOTO(fcall_by_name_end)
destroy_op_array(new_op_array)
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION()
zend_generator * generator
ZEND_VM_DISPATCH_TO_HELPER(zend_mul_helper, op_1, op1, op_2, op2)
ZEND_VM_COLD_HANDLER(201, ZEND_VERIFY_NEVER_TYPE, UNUSED, UNUSED)
ZEND_VM_DEFINE_OP(137, ZEND_OP_DATA)
ZEND_VM_HANDLER(196, ZEND_CASE_STRICT, TMP|VAR, CONST|TMP|VAR|CV)
ZEND_VM_C_LABEL(free_and_exit_assign_obj)
ZEND_VM_COLD_CONSTCONST_HANDLER(4, ZEND_DIV, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
ZEND_VM_HELPER(zend_add_helper, ANY, ANY, zval *op_1, zval *op_2)
ZEND_VM_HOT_NOCONST_HANDLER(13, ZEND_BW_NOT, CONST|TMPVARCV, ANY)
ZEND_VM_HOT_OBJ_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT)
zend_vm_stack_free_call_frame(call)
function(EX_VAR(opline->result.var))
ZEND_OBSERVER_SET_RETVAL()
concat_function(EX_VAR(opline->result.var), op1, op2)
ZEND_VM_COLD_CONST_HANDLER(14, ZEND_BOOL_NOT, CONST|TMPVAR|CV, ANY)
zend_refcounted * garbage
fast_long_decrement_function(var_ptr)
ZEND_VM_HOT_NOCONSTCONST_HANDLER(1, ZEND_ADD, CONST|TMPVARCV, CONST|TMPVARCV)
boolean_xor_function(EX_VAR(opline->result.var), op1, op2)
#define HANDLE_EXCEPTION_LEAVE()
#define HANDLE_EXCEPTION()
#define ZEND_VM_DISPATCH(opcode, opline)
#define LOAD_NEXT_OPLINE()
#define ZEND_FETCH_STATIC_PROP_IS
#define ZEND_IS_IDENTICAL
#define ZEND_DECLARE_ANON_CLASS
#define ZEND_FETCH_CONSTANT
#define ZEND_ASSIGN_DIM_OP
#define ZEND_ASSIGN_STATIC_PROP_REF
#define ZEND_UNSET_STATIC_PROP
#define ZEND_EXT_FCALL_END
#define ZEND_ISSET_ISEMPTY_CV
#define ZEND_VERIFY_RETURN_TYPE
#define ZEND_FETCH_LIST_R
#define ZEND_FUNC_NUM_ARGS
#define ZEND_INCLUDE_OR_EVAL
#define ZEND_GENERATOR_CREATE
#define ZEND_INIT_USER_CALL
#define ZEND_FRAMELESS_ICALL_0
#define ZEND_FETCH_LIST_W
#define ZEND_CALLABLE_CONVERT
#define ZEND_ASSERT_CHECK
#define ZEND_RETURN_BY_REF
#define ZEND_SWITCH_STRING
#define ZEND_CALL_TRAMPOLINE
#define ZEND_DECLARE_CONST
#define ZEND_DECLARE_CLASS_DELAYED
#define ZEND_GET_CALLED_CLASS
#define ZEND_DECLARE_FUNCTION
#define ZEND_FETCH_OBJ_FUNC_ARG
#define ZEND_FETCH_STATIC_PROP_R
#define ZEND_PRE_DEC_STATIC_PROP
#define ZEND_ASSIGN_STATIC_PROP_OP
#define ZEND_FETCH_DIM_FUNC_ARG
#define ZEND_FETCH_GLOBALS
#define ZEND_EXT_FCALL_BEGIN
#define ZEND_FRAMELESS_ICALL_1
#define ZEND_POST_INC_STATIC_PROP
#define ZEND_HANDLE_EXCEPTION
#define ZEND_IS_NOT_EQUAL
#define ZEND_FETCH_STATIC_PROP_UNSET
#define ZEND_IS_NOT_IDENTICAL
#define ZEND_FETCH_OBJ_IS
#define ZEND_FETCH_OBJ_UNSET
#define ZEND_POST_DEC_OBJ
#define ZEND_CHECK_FUNC_ARG
#define ZEND_ISSET_ISEMPTY_PROP_OBJ
#define ZEND_FETCH_STATIC_PROP_FUNC_ARG
#define ZEND_FRAMELESS_ICALL_3
#define ZEND_INIT_NS_FCALL_BY_NAME
#define ZEND_ADD_ARRAY_ELEMENT
#define ZEND_ISSET_ISEMPTY_STATIC_PROP
#define ZEND_ASSIGN_STATIC_PROP
#define ZEND_IS_SMALLER_OR_EQUAL
#define ZEND_POST_DEC_STATIC_PROP
#define ZEND_INIT_FCALL_BY_NAME
#define ZEND_DISCARD_EXCEPTION
#define ZEND_PRE_INC_STATIC_PROP
#define ZEND_FRAMELESS_ICALL_2
#define ZEND_SEND_VAR_NO_REF_EX
#define ZEND_BIND_LEXICAL
#define ZEND_DECLARE_LAMBDA_FUNCTION
#define ZEND_SEND_FUNC_ARG
#define ZEND_CHECK_UNDEF_ARGS
#define ZEND_ISSET_ISEMPTY_DIM_OBJ
#define ZEND_ISSET_ISEMPTY_VAR
#define ZEND_BIND_INIT_STATIC_OR_JMP
#define ZEND_GENERATOR_RETURN
#define ZEND_DECLARE_CLASS
#define ZEND_ADD_ARRAY_UNPACK
#define ZEND_BEGIN_SILENCE
#define ZEND_FUNC_GET_ARGS
#define ZEND_ARRAY_KEY_EXISTS
#define ZEND_JMP_FRAMELESS
#define ZEND_INIT_DYNAMIC_CALL
#define ZEND_INIT_PARENT_PROPERTY_HOOK_CALL
#define ZEND_FETCH_STATIC_PROP_W
#define ZEND_ASSIGN_OBJ_OP
#define ZEND_ASSIGN_OBJ_REF
#define ZEND_FETCH_STATIC_PROP_RW
#define ZEND_FETCH_CLASS_CONSTANT
#define ZEND_RECV_VARIADIC
#define ZEND_FETCH_DIM_IS
#define ZEND_FETCH_OBJ_RW
#define ZEND_VERIFY_NEVER_TYPE
#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_ISSET_ISEMPTY_THIS
#define ZEND_FETCH_FUNC_ARG
#define ZEND_FETCH_CLASS_NAME
#define ZEND_FETCH_DIM_RW