20#define VM_TRACE_START()
22#define VM_TRACE(op) zend_verify_inference_use(execute_data, OPLINE); \
24 zend_execute_data *__current_ex = NULL; \
25 const zend_op *__current_op = NULL; \
26 if (OPLINE->opcode != ZEND_GENERATOR_RETURN) { \
27 __current_ex = execute_data; __current_op = OPLINE; \
29#define VM_TRACE_OP_END(op) \
30 if (__current_ex && __current_op) { \
31 zend_verify_inference_def(__current_ex, __current_op); \
35#define ZEND_VERIFY_TYPE_INFERENCE_ERROR(msg, ...) \
37 fprintf(stderr, "Inference verification failed at %04d %s (" msg ")\n", (int)(opline - EX(func)->op_array.opcodes), operand, __VA_ARGS__); \
84 uint32_t num_checked = 0;
113 if (!(type_mask & array_type)) {
119 if (++num_checked > 16) {
132 if (opline->op1_use_type
138 if (opline->op2_use_type
142 if (opline->result_use_type
157 if (opline->op1_def_type
166 if (opline->op2_def_type
173 if (opline->result_def_type
ZEND_API bool zend_is_smart_branch(const zend_op *opline)
#define ZEND_USER_CODE(type)
#define ZEND_CALL_VAR(call, n)
#define HT_IS_INITIALIZED(ht)
#define ZEND_HASH_FOREACH_STR_KEY_VAL(ht, _key, _val)
#define ZEND_HASH_FOREACH_END()
struct _zend_string zend_string
#define MAY_BE_ARRAY_SHIFT
#define MAY_BE_ARRAY_KEY_STRING
#define MAY_BE_ARRAY_EMPTY
#define MAY_BE_ARRAY_KEY_LONG
#define Z_REFVAL_P(zval_p)
#define Z_ARRVAL_P(zval_p)
struct _zend_array HashTable
#define Z_INDIRECT_P(zval_p)
struct _zend_execute_data zend_execute_data
#define ZEND_VERIFY_TYPE_INFERENCE_ERROR(msg,...)
#define ZEND_FETCH_LIST_W
#define ZEND_ASSERT_CHECK
#define ZEND_RETURN_BY_REF
#define ZEND_FETCH_DIM_FUNC_ARG
#define ZEND_DO_FCALL_BY_NAME
#define ZEND_FETCH_DIM_RW