48#ifdef ZEND_MAX_EXECUTION_TIMERS
49#include <sys/syscall.h>
65static void (*original_sigsegv_handler)(int);
66static void zend_handle_sigsegv(
void)
70 if (original_sigsegv_handler == zend_handle_sigsegv) {
71 signal(
SIGSEGV, original_sigsegv_handler);
77 fprintf(stderr,
"SIGSEGV caught on opcode %d on opline %d of %s() at %s:%d\n\n",
78 active_opline->opcode,
79 active_opline-
EG(active_op_array)->opcodes,
88 if (original_sigsegv_handler!=zend_handle_sigsegv) {
89 original_sigsegv_handler(dummy);
111static int clean_non_persistent_constant_full(
zval *
zv)
118static int clean_non_persistent_function_full(
zval *
zv)
125static int clean_non_persistent_class_full(
zval *
zv)
140 original_sigsegv_handler = signal(
SIGSEGV, zend_handle_sigsegv);
143 EG(symtable_cache_ptr) =
EG(symtable_cache);
145 EG(no_extensions) = 0;
147 EG(function_table) =
CG(function_table);
148 EG(class_table) =
CG(class_table);
167 EG(current_execute_data) =
NULL;
176 EG(full_tables_cleanup) = 0;
181 EG(prev_exception) =
NULL;
184 EG(trampoline).common.function_name =
NULL;
187 EG(ht_iterators_used) = 0;
188 EG(ht_iterators) =
EG(ht_iterators_slots);
189 memset(
EG(ht_iterators), 0,
sizeof(
EG(ht_iterators_slots)));
191 EG(persistent_constants_count) =
EG(zend_constants)->nNumUsed;
192 EG(persistent_functions_count) =
EG(function_table)->nNumUsed;
193 EG(persistent_classes_count) =
EG(class_table)->nNumUsed;
195 EG(get_gc_buffer).start =
EG(get_gc_buffer).end =
EG(get_gc_buffer).cur =
NULL;
197 EG(record_errors) =
false;
201 EG(filename_override) =
NULL;
202 EG(lineno_override) = -1;
212static int zval_call_destructor(
zval *
zv)
225static void zend_unclean_zval_ptr_dtor(
zval *
zv)
237 char *message =
NULL;
239 va_start(va, format);
255 if (
CG(unclean_shutdown)) {
256 EG(symbol_table).pDestructor = zend_unclean_zval_ptr_dtor;
261 symbols = zend_hash_num_elements(&
EG(symbol_table));
263 }
while (
symbols != zend_hash_num_elements(&
EG(symbol_table)));
286 if (!fast_shutdown) {
290 if (
EG(full_tables_cleanup)) {
295 if (_idx ==
EG(persistent_constants_count)) {
298 zval_ptr_dtor_nogc(&c->
value);
338 zval_ptr_dtor_nogc(&c->
value);
384 op_array = &
prop_info->hooks[i]->op_array;
417 if (!
CG(unclean_shutdown)) {
433 bool fast_shutdown = 0;
435 bool fast_shutdown =
is_zend_mm() && !
EG(full_tables_cleanup);
463 if (
EG(full_tables_cleanup)) {
469 if (_idx ==
EG(persistent_functions_count)) {
477 if (_idx ==
EG(persistent_classes_count)) {
485 while (
EG(symtable_cache_ptr) >
EG(symtable_cache)) {
486 EG(symtable_cache_ptr)--;
498 if (
EG(in_autoload)) {
503 if (
EG(ht_iterators) !=
EG(ht_iterators_slots)) {
509 if (
EG(ht_iterators_used) && !
CG(unclean_shutdown)) {
517 EG(ht_iterators_used) = 0;
535 func = zend_active_function();
537 switch (
func->type) {
544 *space = ce ?
"::" :
"";
565 func = zend_active_function();
567 switch (
func->type) {
612 if (
func->common.scope &&
func->common.function_name) {
649 return filename !=
NULL ?
ZSTR_VAL(filename) :
"[no active file]";
656 if (filename_override !=
NULL) {
657 return filename_override;
663 ex =
ex->prev_execute_data;
666 return ex->func->op_array.filename;
676 if (lineno_override != -1) {
677 return lineno_override;
683 ex =
ex->prev_execute_data;
688 return ex->func->op_array.opcodes[0].lineno;
691 ex->opline->lineno == 0 &&
EG(opline_before_exception)) {
692 return EG(opline_before_exception)->lineno;
694 return ex->opline->lineno;
709 return ex->func->common.scope;
711 ex =
ex->prev_execute_data;
718 return EG(current_execute_data) != 0;
734 zval_ptr_dtor_nogc(
p);
738 bool short_circuited;
745 if (ast_is_refcounted) {
749 if (ast_is_refcounted && !
GC_DELREF(ast_ref)) {
755 zval_ptr_dtor_nogc(
p);
779 fci.
size =
sizeof(fci);
803 void *object_or_called_scope;
825 fci_cache = &fci_cache_local;
846 object_or_called_scope = fci_cache->
object;
857 zend_vm_stack_free_call_frame(
call);
883 zend_vm_stack_free_args(
call);
887 zend_vm_stack_free_call_frame(
call);
913 bool have_named_params = 0;
919 have_named_params = 1;
925 if (have_named_params) {
927 "Cannot use positional argument after named argument");
931 zend_vm_stack_extend_call_frame(&
call,
arg_num - 1, 1);
972 zend_vm_stack_free_args(
call);
973 zend_vm_stack_free_call_frame(
call);
993 orig_fake_scope =
EG(fake_scope);
996 uint32_t orig_jit_trace_num =
EG(jit_trace_num);
1001 EG(jit_trace_num) = orig_jit_trace_num;
1005 call->prev_execute_data =
EG(current_execute_data);
1006 EG(current_execute_data) =
call;
1008 bool should_throw = zend_internal_call_should_throw(
func,
call);
1021 zend_internal_call_arginfo_violation(
call->func);
1024 zend_verify_internal_return_type(
call->func, fci->
retval));
1030 EG(current_execute_data) =
call->prev_execute_data;
1031 zend_vm_stack_free_args(
call);
1033 zend_array_release(
call->extra_named_params);
1043 if (zend_atomic_bool_exchange_ex(&
EG(vm_interrupt),
false)) {
1044 if (zend_atomic_bool_load_ex(&
EG(timed_out))) {
1055 EG(fake_scope) = orig_fake_scope;
1057 zend_vm_stack_free_call_frame(
call);
1062 }
else if (
EG(current_execute_data)->
func &&
1064 zend_rethrow_exception(
EG(current_execute_data));
1074 uint32_t param_count,
zval *params,
HashTable *named_params)
1080 ZEND_ASSERT(fn &&
"zend_function must be passed!");
1082 fci.
size =
sizeof(fci);
1114 zend_call_known_instance_method(fn,
object,
retval_ptr, 2, params);
1119 uint32_t param_count,
zval *params)
1140static const uint32_t valid_chars[8] = {
1167 uint32_t ce_cache = 0;
1188 lc_name = zend_string_tolower(
name);
1202 if (!
CG(unlinked_uses)) {
1241 if (
EG(in_autoload) ==
NULL) {
1256 autoload_name = zend_string_copy(
name);
1261 EG(filename_override) =
NULL;
1262 EG(lineno_override) = -1;
1266 EG(filename_override) = previous_filename;
1267 EG(lineno_override) = previous_lineno;
1296 }
else if (
Z_CE(
ex->This)) {
1298 }
else if (
ex->func) {
1303 ex =
ex->prev_execute_data;
1314 }
else if (
ex->func) {
1319 ex =
ex->prev_execute_data;
1328 uint32_t original_compiler_options;
1334 "return ",
sizeof(
"return ")-1, str, str_len,
";",
sizeof(
";")-1);
1336 code_str = zend_string_init(str, str_len, 0);
1341 original_compiler_options =
CG(compiler_options);
1344 CG(compiler_options) = original_compiler_options;
1349 EG(no_extensions)=1;
1374 EG(no_extensions)=0;
1382 zend_string_release(code_str);
1411static void zend_set_timeout_ex(
zend_long seconds,
bool reset_signals);
1415#if defined(PHP_WIN32)
1421 if (
EG(hard_timeout) > 0) {
1422 zend_atomic_bool_store_ex(&
EG(timed_out),
false);
1423 zend_set_timeout_ex(
EG(hard_timeout), 1);
1425 EG(hard_timeout) = 0;
1429 zend_atomic_bool_store_ex(&
EG(timed_out),
false);
1430 zend_set_timeout_ex(0, 1);
1438# ifdef ZEND_MAX_EXECUTION_TIMERS
1439static void zend_timeout_handler(
int dummy, siginfo_t *si,
void *uc)
1442 if (!tsrm_is_managed_thread()) {
1443 fprintf(stderr,
"zend_timeout_handler() called in a thread not managed by PHP. The expected signal handler will not be called. This is probably a bug.\n");
1449 if (si->si_value.sival_ptr != &
EG(max_execution_timer_timer)) {
1450#ifdef MAX_EXECUTION_TIMERS_DEBUG
1451 fprintf(stderr,
"Executing previous handler (if set) for unexpected signal SIGRTMIN received on thread %d\n", (pid_t) syscall(SYS_gettid));
1454 if (
EG(oldact).sa_sigaction) {
1455 EG(oldact).sa_sigaction(dummy, si, uc);
1459 if (
EG(oldact).sa_handler)
EG(oldact).sa_handler(dummy);
1464static void zend_timeout_handler(
int dummy)
1468 if (!tsrm_is_managed_thread()) {
1469 fprintf(stderr,
"zend_timeout_handler() called in a thread not managed by PHP. The expected signal handler will not be called. This is probably a bug.\n");
1474 if (zend_atomic_bool_load_ex(&
EG(timed_out))) {
1476 const char *error_filename =
NULL;
1477 uint32_t error_lineno = 0;
1478 char log_buffer[2048];
1486 if (error_filename[0] ==
'[') {
1487 error_filename =
NULL;
1493 if (!error_filename) {
1494 error_filename =
"Unknown";
1497 output_len =
snprintf(log_buffer,
sizeof(log_buffer),
"\nFatal error: Maximum execution time of " ZEND_LONG_FMT "+" ZEND_LONG_FMT " seconds exceeded (terminated) in %s on line %d\n",
EG(timeout_seconds),
EG(hard_timeout), error_filename, error_lineno);
1498 if (output_len > 0) {
1509 zend_atomic_bool_store_ex(&
EG(timed_out),
true);
1510 zend_atomic_bool_store_ex(&
EG(vm_interrupt),
true);
1513 if (
EG(hard_timeout) > 0) {
1515 zend_set_timeout_ex(
EG(hard_timeout), 1);
1523VOID
CALLBACK tq_timer_cb(PVOID
arg, BOOLEAN timed_out)
1534 zend_atomic_bool_store_ex(&eg->
timed_out,
true);
1544static void zend_set_timeout_ex(
zend_long seconds,
bool reset_signals)
1556 if (
NULL != tq_timer) {
1557 if (!DeleteTimerQueueTimer(
NULL, tq_timer, INVALID_HANDLE_VALUE)) {
1567 if (!CreateTimerQueueTimer(&tq_timer,
NULL, (WAITORTIMERCALLBACK)tq_timer_cb, (VOID*)eg, seconds*1000, 0, WT_EXECUTEONLYONCE)) {
1572#elif defined(ZEND_MAX_EXECUTION_TIMERS)
1575 if (reset_signals) {
1577 struct sigaction act;
1579 act.sa_sigaction = zend_timeout_handler;
1580 sigemptyset(&act.sa_mask);
1581 act.sa_flags = SA_ONSTACK | SA_SIGINFO;
1583 sigemptyset(&sigset);
1587#elif defined(HAVE_SETITIMER)
1593 if (seconds < 0 || seconds > 999999999) {
1601# if defined(__CYGWIN__) || defined(__PASE__) || (defined(__aarch64__) && defined(__APPLE__))
1613 if (reset_signals) {
1618# ifdef HAVE_SIGACTION
1619 struct sigaction act;
1621 act.sa_handler = zend_timeout_handler;
1622 sigemptyset(&act.sa_mask);
1623 act.sa_flags = SA_ONSTACK | SA_RESETHAND | SA_NODEFER;
1624 sigaction(signo, &act,
NULL);
1626 signal(signo, zend_timeout_handler);
1628 sigemptyset(&sigset);
1629 sigaddset(&sigset, signo);
1641 EG(timeout_seconds) = seconds;
1642 zend_set_timeout_ex(seconds, reset_signals);
1643 zend_atomic_bool_store_ex(&
EG(timed_out),
false);
1650 if (
NULL != tq_timer) {
1651 if (!DeleteTimerQueueTimer(
NULL, tq_timer, INVALID_HANDLE_VALUE)) {
1652 zend_atomic_bool_store_ex(&
EG(timed_out),
false);
1659#elif defined(ZEND_MAX_EXECUTION_TIMERS)
1661#elif defined(HAVE_SETITIMER)
1662 if (
EG(timeout_seconds)) {
1667# if defined(__CYGWIN__) || defined(__PASE__) || (defined(__aarch64__) && defined(__APPLE__))
1674 zend_atomic_bool_store_ex(&
EG(timed_out),
false);
1692 zend_throw_or_error(fetch_type,
NULL,
"Interface \"%s\" not found",
ZSTR_VAL(class_name));
1694 zend_throw_or_error(fetch_type,
NULL,
"Trait \"%s\" not found",
ZSTR_VAL(class_name));
1696 zend_throw_or_error(fetch_type,
NULL,
"Class \"%s\" not found",
ZSTR_VAL(class_name));
1706 switch (fetch_sub_type) {
1710 zend_throw_or_error(fetch_type,
NULL,
"Cannot access \"self\" when no class scope is active");
1716 zend_throw_or_error(fetch_type,
NULL,
"Cannot access \"parent\" when no class scope is active");
1720 zend_throw_or_error(fetch_type,
NULL,
"Cannot access \"parent\" when current class scope has no parent");
1722 return scope->parent;
1726 zend_throw_or_error(fetch_type,
NULL,
"Cannot access \"static\" when no class scope is active");
1733 goto check_fetch_type;
1741 report_class_fetch_error(class_name, fetch_type);
1755 zend_throw_or_error(fetch_type,
NULL,
"Cannot access \"self\" when no class scope is active");
1760 zend_throw_or_error(fetch_type,
NULL,
"Cannot access \"parent\" when no class scope is active");
1764 zend_throw_or_error(fetch_type,
NULL,
"Cannot access \"parent\" when current class scope has no parent");
1766 return scope->parent;
1775 report_class_fetch_error(class_name, fetch_type);
1785 report_class_fetch_error(class_name, fetch_type);
1804 ex =
EG(current_execute_data);
1806 ex =
ex->prev_execute_data;
1812 return ex->symbol_table;
1816 if (
EG(symtable_cache_ptr) >
EG(symtable_cache)) {
1817 symbol_table =
ex->symbol_table = *(--
EG(symtable_cache_ptr));
1818 if (!
ex->func->op_array.last_var) {
1819 return symbol_table;
1824 if (!
ex->func->op_array.last_var) {
1825 return symbol_table;
1836 _zend_hash_append_ind(symbol_table, *str, var);
1839 }
while (str !=
end);
1841 return symbol_table;
1875 }
while (str !=
end);
1900 }
while (str !=
end);
1924 zend_string_equal_content(*str,
name)) {
1930 }
while (str !=
end);
1966 zend_string_equals_cstr(*str,
name,
len)) {
1973 }
while (str !=
end);
fprintf($stream, string $format, mixed ... $values)
memset(ptr, 0, type->size)
unsigned const char * end
php_output_handler * active
unsigned char key[REFLECTION_KEY_LEN]
HashTable constants_table
HashTable * backed_enum_table
uint32_t num_hooked_props
HashTable properties_info
int default_properties_count
int default_static_members_count
zval * default_properties_table
zend_atomic_bool timed_out
zend_atomic_bool vm_interrupt
deactivate_func_t deactivate
zend_function * function_handler
zend_class_entry * called_scope
struct timeval it_interval
PHPAPI int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue)
zend_string * function_name
struct _zend_function::@236135173067030250234125302313220025134003177336 common
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_COLD void zend_error(int type, const char *format,...)
void(* zend_on_timeout)(int seconds)
ZEND_API size_t zend_vspprintf(char **pbuf, size_t max_len, const char *format, va_list ap)
ZEND_API void(* zend_interrupt_function)(zend_execute_data *execute_data)
ZEND_API zend_string * zend_get_callable_name_ex(zval *callable, zend_object *object)
ZEND_API bool zend_is_callable_ex(zval *callable, zend_object *object, uint32_t check_flags, zend_string **callable_name, zend_fcall_info_cache *fcc, char **error)
ZEND_API void zend_release_fcall_info_cache(zend_fcall_info_cache *fcc)
ZEND_API const zend_fcall_info empty_fcall_info
ZEND_API const zend_fcall_info_cache empty_fcall_info_cache
struct _zend_fcall_info_cache zend_fcall_info_cache
#define IS_CALLABLE_SUPPRESS_DEPRECATIONS
struct _zend_fcall_info zend_fcall_info
#define ZEND_MODULE_GLOBALS_BULK(module_name)
ZEND_API bool is_zend_mm(void)
#define efree_size(ptr, size)
#define FREE_HASHTABLE(ht)
#define ALLOC_HASHTABLE(ht)
ZEND_API zend_result ZEND_FASTCALL zend_ast_evaluate_ex(zval *result, zend_ast *ast, zend_class_entry *scope, bool *short_circuited_ptr, zend_ast_evaluate_ctx *ctx)
#define ZEND_ATOMIC_BOOL_INIT(obj, desired)
zend_string_release_ex(func->internal_function.function_name, 0)
#define ZEND_CLOSURE_OBJECT(op_array)
uint32_t zend_get_class_fetch_type(const zend_string *name)
ZEND_API bool zend_is_compiling(void)
ZEND_API zend_op_array *(* zend_compile_string)(zend_string *source_string, const char *filename, zend_compile_position position)
ZEND_API int zend_get_compiled_lineno(void)
ZEND_API zend_string * zend_get_compiled_filename(void)
ZEND_API zend_string * zend_create_member_string(zend_string *class_name, zend_string *member_name)
#define ZEND_PROPERTY_HOOK_COUNT
#define ZEND_FETCH_CLASS_SELF
#define ZEND_CALL_CLOSURE
#define ZEND_FETCH_CLASS_AUTO
#define ZEND_USER_CODE(type)
#define ZEND_CALL_TOP_FUNCTION
#define ZEND_ACC_FAKE_CLOSURE
#define ZEND_FETCH_CLASS_MASK
#define ZEND_ACC_IMMUTABLE
ZEND_API void destroy_op_array(zend_op_array *op_array)
#define ZEND_FETCH_CLASS_ALLOW_NEARLY_LINKED
#define ZEND_HAS_STATIC_IN_METHODS
#define ZEND_INTERNAL_FUNCTION
#define ZEND_COMPILE_DEFAULT_FOR_EVAL
#define ZEND_FETCH_CLASS_TRAIT
#define ZEND_ACC_NEARLY_LINKED
#define ZEND_FETCH_CLASS_INTERFACE
#define ZEND_FETCH_CLASS_NO_AUTOLOAD
#define ZEND_ACC_USER_ARG_INFO
#define ZEND_USER_FUNCTION
#define ZEND_CALL_HAS_SYMBOL_TABLE
#define ZEND_ACC_CALL_VIA_TRAMPOLINE
struct _zend_op_array zend_op_array
#define ZEND_CALL_HAS_THIS
ZEND_API void destroy_zend_class(zval *zv)
struct _zend_class_constant zend_class_constant
struct _zend_property_info zend_property_info
#define ZEND_CALL_HAS_EXTRA_NAMED_PARAMS
ZEND_API void zend_destroy_static_vars(zend_op_array *op_array)
#define ZEND_FETCH_CLASS_STATIC
#define ZEND_FETCH_CLASS_DEFAULT
struct _zend_internal_arg_info zend_internal_arg_info
#define ZEND_CALL_NUM_ARGS(call)
#define ZEND_FETCH_CLASS_EXCEPTION
#define ZEND_CALL_INFO(call)
#define ZEND_FETCH_CLASS_PARENT
#define ZEND_ACC_HAS_RETURN_TYPE
@ ZEND_COMPILE_POSITION_AFTER_OPEN_TAG
#define ZEND_CALL_DYNAMIC
#define ZEND_ADD_CALL_FLAG(call, flag)
#define ARG_SHOULD_BE_SENT_BY_REF(zf, arg_num)
#define ZEND_CALL_MAY_HAVE_UNDEF
ZEND_API void zend_cleanup_mutable_class_data(zend_class_entry *ce)
#define ZEND_FETCH_CLASS_ALLOW_UNLINKED
ZEND_API void zend_cleanup_internal_class_data(zend_class_entry *ce)
#define ZEND_INTERNAL_CLASS
#define ZEND_ACC_DEPRECATED
#define ZEND_CALL_RELEASE_THIS
#define ZEND_FETCH_CLASS_SILENT
#define ZEND_ACC_RETURN_REFERENCE
#define ARG_MAY_BE_SENT_BY_REF(zf, arg_num)
#define ZEND_CALL_VAR_NUM(call, n)
#define ZEND_CALL_ARG(call, n)
#define ZEND_CALL_FAKE_CLOSURE
ZEND_API zval * zend_get_constant_ex(zend_string *cname, zend_class_entry *scope, uint32_t flags)
#define ZEND_CONSTANT_FLAGS(c)
struct _zend_constant zend_constant
ZEND_API ZEND_COLD void zend_throw_exception_internal(zend_object *exception)
void zend_exception_restore(void)
void zend_exception_save(void)
ZEND_API ZEND_COLD zend_result zend_exception_error(zend_object *ex, int severity)
ZEND_NORETURN void zend_exception_uncaught_error(const char *format,...)
ZEND_API void ZEND_FASTCALL zend_free_extra_named_params(zend_array *extra_named_params)
ZEND_API void zend_init_func_execute_data(zend_execute_data *ex, zend_op_array *op_array, zval *return_value)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_deprecated_function(const zend_function *fbc)
ZEND_API void zend_vm_stack_destroy(void)
ZEND_API void zend_vm_stack_init(void)
ZEND_API zend_result ZEND_FASTCALL zend_handle_undef_args(zend_execute_data *call)
ZEND_COLD void ZEND_FASTCALL zend_param_must_be_ref(const zend_function *func, uint32_t arg_num)
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
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 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 zend_execute(zend_op_array *op_array, zval *return_value)
ZEND_API zend_class_entry *(* zend_autoload)(zend_string *name, zend_string *lc_name)
ZEND_API zend_class_entry * zend_get_called_scope(zend_execute_data *ex)
ZEND_API zend_class_entry * zend_lookup_class(zend_string *name)
ZEND_API zend_result ZEND_FASTCALL zval_update_constant_with_ctx(zval *p, zend_class_entry *scope, zend_ast_evaluate_ctx *ctx)
ZEND_API const char * get_function_arg_name(const zend_function *func, uint32_t arg_num)
ZEND_API const char * get_active_function_name(void)
ZEND_API zend_result ZEND_FASTCALL zval_update_constant(zval *pp)
ZEND_API void zend_call_known_instance_method_with_2_params(zend_function *fn, zend_object *object, zval *retval_ptr, zval *param1, zval *param2)
void zend_set_timeout(zend_long seconds, bool reset_signals)
ZEND_API uint32_t zend_get_executed_lineno(void)
ZEND_API zend_class_entry * zend_get_executed_scope(void)
zend_class_entry * zend_fetch_class_by_name(zend_string *class_name, zend_string *key, uint32_t fetch_type)
ZEND_API zend_string * get_function_or_method_name(const zend_function *func)
ZEND_API const char * zend_get_executed_filename(void)
void shutdown_destructors(void)
void shutdown_executor(void)
ZEND_API void(* zend_execute_ex)(zend_execute_data *execute_data)
zend_class_entry * zend_fetch_class_with_scope(zend_string *class_name, uint32_t fetch_type, zend_class_entry *scope)
ZEND_API void(* zend_execute_internal)(zend_execute_data *execute_data, zval *return_value)
ZEND_API zend_object * zend_get_this_object(zend_execute_data *ex)
ZEND_API zend_result zend_call_method_if_exists(zend_object *object, zend_string *method_name, zval *retval, uint32_t param_count, zval *params)
ZEND_API bool zend_is_valid_class_name(zend_string *name)
ZEND_API void zend_detach_symbol_table(zend_execute_data *execute_data)
ZEND_API zend_string * zend_get_executed_filename_ex(void)
ZEND_API void zend_shutdown_executor_values(bool fast_shutdown)
ZEND_API const char * get_active_function_arg_name(uint32_t arg_num)
ZEND_API const char * get_active_class_name(const char **space)
zend_result _call_user_function_impl(zval *object, zval *function_name, zval *retval_ptr, uint32_t param_count, zval params[], HashTable *named_params)
ZEND_API zend_result zend_eval_string(const char *str, zval *retval_ptr, const char *string_name)
zend_result zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache)
ZEND_API bool zend_is_executing(void)
ZEND_API zend_class_entry *(* zend_autoload)(zend_string *name, zend_string *lc_name)
ZEND_API void zend_attach_symbol_table(zend_execute_data *execute_data)
ZEND_API zend_result zend_set_local_var(zend_string *name, zval *value, bool force)
zend_class_entry * zend_fetch_class(zend_string *class_name, uint32_t fetch_type)
ZEND_API ZEND_NORETURN void ZEND_FASTCALL zend_timeout(void)
void zend_unset_timeout(void)
ZEND_API zend_result zend_delete_global_variable(zend_string *name)
ZEND_API zend_array * zend_rebuild_symbol_table(void)
ZEND_API void zend_call_known_function(zend_function *fn, zend_object *object, zend_class_entry *called_scope, zval *retval_ptr, uint32_t param_count, zval *params, HashTable *named_params)
ZEND_API zend_result zend_set_local_var_str(const char *name, size_t len, zval *value, bool force)
ZEND_API zend_string * get_active_function_or_method_name(void)
ZEND_API zend_result zend_eval_stringl_ex(const char *str, size_t str_len, zval *retval_ptr, const char *string_name, bool handle_exceptions)
ZEND_API zend_result ZEND_FASTCALL zval_update_constant_ex(zval *p, zend_class_entry *scope)
ZEND_API zend_class_entry * zend_lookup_class_ex(zend_string *name, zend_string *key, uint32_t flags)
ZEND_API zend_result zend_eval_stringl(const char *str, size_t str_len, zval *retval_ptr, const char *string_name)
ZEND_API zend_result zend_eval_string_ex(const char *str, zval *retval_ptr, const char *string_name, bool handle_exceptions)
ZEND_API zend_function * zend_active_function_ex(zend_execute_data *execute_data)
ZEND_API zend_llist zend_extensions
struct _zend_extension zend_extension
void zend_fiber_init(void)
void zend_fiber_shutdown(void)
ZEND_API void zend_shutdown_fpu(void)
ZEND_API void zend_init_fpu(void)
union _zend_function zend_function
#define ZEND_OP_IS_FRAMELESS_ICALL(opcode)
#define ZEND_FLF_FUNC(opline)
ZEND_API int(* gc_collect_cycles)(void)
#define SYMTABLE_CACHE_SIZE
#define EG_FLAGS_IN_RESOURCE_SHUTDOWN
struct _zend_executor_globals zend_executor_globals
ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht)
ZEND_API void ZEND_FASTCALL zend_hash_reverse_apply(HashTable *ht, apply_func_t apply_func)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_add_empty_element(HashTable *ht, zend_ulong h)
ZEND_API zval *ZEND_FASTCALL zend_hash_str_update_ind(HashTable *ht, const char *str, size_t len, zval *pData)
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 zval *ZEND_FASTCALL zend_hash_update_ind(HashTable *ht, zend_string *key, zval *pData)
ZEND_API void ZEND_FASTCALL zend_hash_graceful_reverse_destroy(HashTable *ht)
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 zval *ZEND_FASTCALL zend_hash_str_update(HashTable *ht, const char *str, size_t len, zval *pData)
ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht)
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 zval *ZEND_FASTCALL zend_hash_add_empty_element(HashTable *ht, zend_string *key)
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 void ZEND_FASTCALL zend_hash_discard(HashTable *ht, uint32_t nNumUsed)
#define zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent)
#define ZEND_HASH_MAP_FOREACH_PTR(ht, _ptr)
#define ZEND_HASH_MAP_REVERSE_FOREACH_STR_KEY_VAL(ht, _key, _val)
#define ZEND_HASH_MAP_REVERSE_FOREACH_VAL(ht, _val)
#define ZEND_HASH_APPLY_REMOVE
#define zend_new_array(size)
#define ZEND_HASH_APPLY_KEEP
#define ZEND_HASH_FOREACH_STR_KEY_VAL(ht, _key, _val)
int(* apply_func_t)(zval *pDest)
#define ZEND_HASH_FOREACH_END()
#define ZEND_HASH_MAP_FOREACH_END_DEL()
void zend_lazy_objects_init(zend_lazy_objects_store *store)
void zend_lazy_objects_destroy(zend_lazy_objects_store *store)
void zend_close_rsrc_list(HashTable *ht)
ZEND_API void zend_llist_apply(zend_llist *l, llist_apply_func_t func)
void(* llist_apply_func_t)(void *)
struct _zend_string zend_string
#define ZEND_MAP_PTR_GET(ptr)
#define ZEND_MAP_PTR_GET_IMM(ptr)
#define ZEND_MAP_PTR(ptr)
#define ZEND_MAP_PTR_SET(ptr, val)
#define zend_max_execution_timer_shutdown()
#define zend_max_execution_timer_settime(seconds)
#define zend_max_execution_timer_init()
ZEND_API void ZEND_FASTCALL zend_objects_store_destroy(zend_objects_store *objects)
ZEND_API void ZEND_FASTCALL zend_objects_store_free_object_storage(zend_objects_store *objects, bool fast_shutdown)
ZEND_API void ZEND_FASTCALL zend_objects_store_mark_destructed(zend_objects_store *objects)
ZEND_API void ZEND_FASTCALL zend_objects_store_call_destructors(zend_objects_store *objects)
ZEND_API void ZEND_FASTCALL zend_objects_store_init(zend_objects_store *objects, uint32_t init_size)
#define ZEND_OBSERVER_FCALL_BEGIN(execute_data)
#define ZEND_OBSERVER_FCALL_END(execute_data, return_value)
ZEND_API char *ZEND_FASTCALL zend_str_tolower_copy(char *dest, const char *source, size_t length)
#define zend_quiet_write(...)
#define EXPECTED(condition)
#define ZEND_BIT_TEST(bits, bit)
#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 zend_signal(signo, handler)
ZEND_API void zend_stack_destroy(zend_stack *stack)
ZEND_API void zend_stack_init(zend_stack *stack, int size)
ZEND_API void zend_stack_clean(zend_stack *stack, void(*func)(void *), bool free_elements)
void zend_stream_shutdown(void)
ZEND_API zend_ulong ZEND_FASTCALL zend_hash_func(const char *str, size_t len)
ZEND_API zend_string * zend_string_concat3(const char *str1, size_t str1_len, const char *str2, size_t str2_len, const char *str3, size_t str3_len)
#define ZSTR_INIT_LITERAL(s, persistent)
#define Z_ISREF_P(zval_p)
struct _zend_ast_ref zend_ast_ref
#define Z_TRY_ADDREF_P(pz)
#define Z_REFVAL_P(zval_p)
#define Z_ISUNDEF_P(zval_p)
#define ZVAL_INDIRECT(z, v)
struct _zend_array HashTable
#define ZVAL_COPY_OR_DUP(z, v)
#define ZVAL_NEW_REF(z, r)
#define ZSTR_HAS_CE_CACHE(s)
#define ZSTR_VALID_CE_CACHE(s)
struct _zend_refcounted zend_refcounted
#define Z_INDIRECT_P(zval_p)
ZEND_RESULT_CODE zend_result
struct _HashTableIterator HashTableIterator
struct _zend_ast zend_ast
struct _zend_execute_data zend_execute_data
#define Z_ASTVAL_P(zval_p)
#define ZVAL_COPY_VALUE(z, v)
#define GET_CE_CACHE(ce_cache)
#define SET_CE_CACHE(ce_cache, ce)
ZEND_API void ZEND_FASTCALL rc_dtor_func(zend_refcounted *p)
ZEND_API void zval_ptr_dtor(zval *zval_ptr)
zend_property_info * prop_info
function(EX_VAR(opline->result.var))
#define ZEND_HANDLE_EXCEPTION
void zend_weakrefs_shutdown(void)
void zend_weakrefs_init(void)