58 fprintf(stderr,
" bool(false)");
74 zend_string_release(escaped_string);
85static void zend_dump_class_fetch_type(uint32_t fetch_type)
101 fprintf(stderr,
" (interface)");
108 fprintf(stderr,
" (no-autoload)");
114 fprintf(stderr,
" (exception)");
122 if (op.
num != (uint32_t)-1) {
130 zend_dump_class_fetch_type(op.
num);
132 fprintf(stderr,
" CONSTRUCTOR");
135 fprintf(stderr,
" (unqualified-in-namespace)");
142 if (var_type ==
IS_CV && var_num < op_array->last_var) {
143 fprintf(stderr,
"CV%d($%s)", var_num, op_array->
vars[var_num]->
val);
144 }
else if (var_type ==
IS_VAR) {
145 fprintf(stderr,
"V%d", var_num);
147 fprintf(stderr,
"T%d", var_num);
149 fprintf(stderr,
"X%d", var_num);
175static void zend_dump_type_info(uint32_t info,
zend_class_entry *ce,
int is_instanceof, uint32_t dump_flags)
184 if (first) first = 0;
else fprintf(stderr,
", ");
188 if (first) first = 0;
else fprintf(stderr,
", ");
192 if (first) first = 0;
else fprintf(stderr,
", ");
197 if (first) first = 0;
else fprintf(stderr,
", ");
201 if (first) first = 0;
else fprintf(stderr,
", ");
206 if (first) first = 0;
else fprintf(stderr,
", ");
216 if (first) first = 0;
else fprintf(stderr,
", ");
220 if (first) first = 0;
else fprintf(stderr,
", ");
224 if (first) first = 0;
else fprintf(stderr,
", ");
227 if (first) first = 0;
else fprintf(stderr,
", ");
230 if (first) first = 0;
else fprintf(stderr,
", ");
234 if (first) first = 0;
else fprintf(stderr,
", ");
238 if (first) first = 0;
else fprintf(stderr,
", ");
242 if (first) first = 0;
else fprintf(stderr,
", ");
246 if (first) first = 0;
else fprintf(stderr,
", ");
260 if (afirst) afirst = 0;
else fprintf(stderr,
", ");
264 if (afirst) afirst = 0;
else fprintf(stderr,
", ");
268 if (afirst) afirst = 0;
else fprintf(stderr,
", ");
280 if (afirst) afirst = 0;
else fprintf(stderr,
", ");
284 if (afirst) afirst = 0;
else fprintf(stderr,
", ");
293 if (afirst) afirst = 0;
else fprintf(stderr,
", ");
297 if (afirst) afirst = 0;
else fprintf(stderr,
", ");
301 if (afirst) afirst = 0;
else fprintf(stderr,
", ");
305 if (afirst) afirst = 0;
else fprintf(stderr,
", ");
309 if (afirst) afirst = 0;
else fprintf(stderr,
", ");
313 if (afirst) afirst = 0;
else fprintf(stderr,
", ");
317 if (afirst) afirst = 0;
else fprintf(stderr,
", ");
321 if (afirst) afirst = 0;
else fprintf(stderr,
", ");
325 if (afirst) afirst = 0;
else fprintf(stderr,
", ");
329 if (afirst) afirst = 0;
else fprintf(stderr,
", ");
334 if (afirst) afirst = 0;
else fprintf(stderr,
", ");
341 if (first) first = 0;
else fprintf(stderr,
", ");
352 if (first) first = 0;
else fprintf(stderr,
", ");
359static void zend_dump_ssa_var_info(
const zend_ssa *ssa,
int ssa_var_num, uint32_t dump_flags)
371 if (ssa_var_num >= 0) {
372 fprintf(stderr,
"#%d.", ssa_var_num);
378 if (ssa_var_num >= 0 && ssa->
vars) {
386 zend_dump_ssa_var_info(ssa, ssa_var_num, dump_flags);
397 zend_dump_type_info(constraint->
type_mask, constraint->
ce, 1, dump_flags);
502 fprintf(stderr,
" (resource)");
508 fprintf(stderr,
" (callable)");
547 fprintf(stderr,
" (resource)");
566 fprintf(stderr,
" (include_once)");
572 fprintf(stderr,
" (require_once)");
582 fprintf(stderr,
" (function)");
591 fprintf(stderr,
" (global+lock)");
617 fprintf(stderr,
" (dim write)");
626 int ssa_var_num = ssa_op->
op1_use;
627 if (ssa_var_num >= 0) {
630 }
else if (ssa_op->
op1_def < 0) {
639 int ssa_var_num = ssa_op->
op1_def;
640 if (ssa_var_num >= 0) {
654 zend_dump_unused_op(opline, opline->
op1, op1_flags);
687 int ssa_var_num = ssa_op->
op2_use;
688 if (ssa_var_num >= 0) {
691 }
else if (ssa_op->
op2_def < 0) {
700 int ssa_var_num = ssa_op->
op2_def;
701 if (ssa_var_num >= 0) {
717 zend_dump_unused_op(opline, opline->
op2, op2_flags);
736 }
else if (ssa_op && ssa_op->
result_use >= 0) {
740 if (ssa_var_num >= 0) {
750 if (ssa_var_num >= 0) {
774 if (ssa && ssa->
ops) {
775 ssa_op = &ssa->
ops[opline - op_array->
opcodes];
779 zend_dump_op(op_array, b, opline, dump_flags, ssa, ssa_op);
783static void zend_dump_block_info(
const zend_cfg *cfg,
int n, uint32_t dump_flags)
819 fprintf(stderr,
" finally_end");
822 fprintf(stderr,
" unreachable");
825 fprintf(stderr,
" unreachable_free");
828 fprintf(stderr,
" loop_header");
831 fprintf(stderr,
" irreducible");
844 fprintf(stderr,
" ; from=(BB%d", *
p);
871 fprintf(stderr,
" ; children=(BB%d",
j);
883 zend_dump_block_info(cfg,
n, dump_flags);
902 fprintf(stderr,
" = Pi<BB%d>(",
p->pi);
905 if (
p->has_range_constraint) {
906 zend_dump_range_constraint(op_array, ssa, &
p->constraint.range, dump_flags);
908 zend_dump_type_constraint(op_array, ssa, &
p->constraint.type, dump_flags);
926 fprintf(stderr,
"%s",
"$_main");
935 uint32_t func_flags = 0;
949 func_flags = func_info->flags;
954 fprintf(stderr,
":\n ; (lines=%d, args=%d",
965 fprintf(stderr,
", recursive");
970 fprintf(stderr,
" indirectly");
974 fprintf(stderr,
", irreducible");
980 fprintf(stderr,
", extended_stmt");
983 fprintf(stderr,
", extended_fcall");
987 if (info->flags & ZEND_JIT_FUNC_NO_IN_MEM_CVS) {
988 fprintf(stderr,
", no_in_mem_cvs");
990 if (info->flags & ZEND_JIT_FUNC_NO_USED_ARGS) {
991 fprintf(stderr,
", no_used_args");
993 if (info->flags & ZEND_JIT_FUNC_NO_SYMTAB) {
994 fprintf(stderr,
", no_symtab");
996 if (info->flags & ZEND_JIT_FUNC_NO_FRAME) {
999 if (info->flags & ZEND_JIT_FUNC_INLINE) {
1010 fprintf(stderr,
" ; return ");
1011 zend_dump_type_info(func_info->return_info.type, func_info->return_info.ce, func_info->return_info.is_instanceof, dump_flags);
1012 zend_dump_range(&func_info->return_info.range);
1017 for (uint32_t i = 0; i < op_array->
last_var; i++) {
1034 zend_dump_block_header(cfg, op_array, ssa,
n, dump_flags);
1037 while (opline <
end) {
1044 fprintf(stderr,
"LIVE RANGES:\n");
1047 " %u: %04u - %04u ",
1053 fprintf(stderr,
"(tmp/var)\n");
1059 fprintf(stderr,
"(silence)\n");
1071 fprintf(stderr,
"EXCEPTION TABLE:\n");
1099 while (opline <
end) {
1104 fprintf(stderr,
"LIVE RANGES:\n");
1107 " %u: %04u - %04u ",
1113 fprintf(stderr,
"(tmp/var)\n");
1119 fprintf(stderr,
"(silence)\n");
1131 fprintf(stderr,
"EXCEPTION TABLE:\n");
1167 fprintf(stderr,
"\nDOMINATORS-TREE for \"");
1173 zend_dump_block_info(cfg,
j, 0);
1183 fprintf(stderr,
"\nSSA Variable for \"");
1209 for (i = 0; i < op_array->
last_var + op_array->
T; i++) {
1210 if (zend_bitset_in(set, i)) {
1225 fprintf(stderr,
"\nVariable Liveness for \"");
1244 fprintf(stderr,
"\nSSA Phi() Placement for \"");
1247 for (
j = 0;
j < blocks_count;
j++) {
1248 if (ssa_blocks && ssa_blocks[
j].phis) {
fprintf($stream, string $format, mixed ... $values)
unsigned const char * end
unsigned char key[REFLECTION_KEY_LEN]
PHPAPI zend_string * php_addcslashes(zend_string *str, const char *what, size_t what_len)
zend_basic_block * blocks
zend_try_catch_element * try_catch_array
zend_live_range * live_range
zend_string * function_name
zend_ssa_negative_lat negative
unsigned int escape_state
zend_ssa_var_info * var_info
struct _zend_basic_block zend_basic_block
#define ZEND_BB_FINALLY_END
#define ZEND_BB_IRREDUCIBLE_LOOP
#define ZEND_BB_REACHABLE
#define ZEND_BB_UNREACHABLE_FREE
struct _zend_cfg zend_cfg
#define CRT_CONSTANT(node)
#define ZEND_BB_LOOP_HEADER
#define ZEND_BB_RECV_ENTRY
#define ZEND_FETCH_CLASS_SELF
#define ZEND_FETCH_CLASS_AUTO
#define ZEND_FETCH_CLASS_MASK
#define ZEND_FETCH_GLOBAL_LOCK
#define ZEND_ARRAY_NOT_PACKED
#define IS_SMART_BRANCH_JMPNZ
#define ZEND_OFFSET_TO_OPLINE_NUM(op_array, base, offset)
#define IS_SMART_BRANCH_JMPZ
#define ZEND_FETCH_CLASS_TRAIT
#define ZEND_RETURNS_VALUE
#define ZEND_FETCH_CLASS_INTERFACE
#define ZEND_FETCH_CLASS_NO_AUTOLOAD
struct _zend_op_array zend_op_array
#define ZEND_FETCH_CLASS_STATIC
#define ZEND_FETCH_DIM_WRITE
#define ZEND_INCLUDE_ONCE
#define ZEND_FETCH_CLASS_EXCEPTION
#define ZEND_FETCH_CLASS_PARENT
#define ZEND_ARRAY_ELEMENT_REF
#define OP_JMP_ADDR(opline, node)
#define ZEND_FETCH_OBJ_FLAGS
#define ZEND_FETCH_GLOBAL
#define ZEND_REQUIRE_ONCE
#define ZEND_ARRAY_SIZE_SHIFT
#define ZEND_LIVE_SILENCE
#define ZEND_FETCH_CLASS_SILENT
#define IS_CONSTANT_UNQUALIFIED_IN_NAMESPACE
#define ZEND_RETURNS_FUNCTION
struct _zend_dfg zend_dfg
#define DFG_BITSET(set, set_size, block_num)
void zend_dump_op_array_name(const zend_op_array *op_array)
void zend_dump_ssa_variables(const zend_op_array *op_array, const zend_ssa *ssa, uint32_t dump_flags)
ZEND_API void zend_dump_op(const zend_op_array *op_array, const zend_basic_block *b, const zend_op *opline, uint32_t dump_flags, const zend_ssa *ssa, const zend_ssa_op *ssa_op)
void zend_dump_dfg(const zend_op_array *op_array, const zend_cfg *cfg, const zend_dfg *dfg)
void zend_dump_const(const zval *zv)
ZEND_API void zend_dump_var(const zend_op_array *op_array, uint8_t var_type, uint32_t var_num)
ZEND_API void zend_dump_ssa_var(const zend_op_array *op_array, const zend_ssa *ssa, int ssa_var_num, uint8_t var_type, uint32_t var_num, uint32_t dump_flags)
ZEND_API void zend_dump_op_line(const zend_op_array *op_array, const zend_basic_block *b, const zend_op *opline, uint32_t dump_flags, const void *data)
void zend_dump_ht(HashTable *ht)
ZEND_API void zend_dump_op_array(const zend_op_array *op_array, uint32_t dump_flags, const char *msg, const void *data)
void zend_dump_phi_placement(const zend_op_array *op_array, const zend_ssa *ssa)
void zend_dump_dominators(const zend_op_array *op_array, const zend_cfg *cfg)
#define ZEND_DUMP_HIDE_UNREACHABLE
#define ZEND_DUMP_RC_INFERENCE
#define ZEND_DUMP_LINE_NUMBERS
#define ZEND_DUMP_LIVE_RANGES
union _zend_function zend_function
#define ZEND_OP_IS_FRAMELESS_ICALL(opcode)
#define ZEND_FLF_FUNC(opline)
#define ZEND_FUNC_NO_LOOPS
#define ZEND_FUNC_RECURSIVE_INDIRECTLY
#define ZEND_FUNC_HAS_EXTENDED_STMT
#define ZEND_FUNC_RECURSIVE_DIRECTLY
#define ZEND_FUNC_INDIRECT_VAR_ACCESS
#define ZEND_FUNC_INFO(op_array)
#define ZEND_FUNC_RECURSIVE
struct _zend_func_info zend_func_info
#define ZEND_FUNC_HAS_EXTENDED_FCALL
#define ZEND_FUNC_IRREDUCIBLE
#define ZEND_HASH_FOREACH_KEY_VAL(ht, _h, _key, _val)
#define ZEND_HASH_FOREACH_END()
#define MAY_BE_PACKED_GUARD
struct _zend_string zend_string
struct _zend_class_entry zend_class_entry
struct _zend_ssa_range zend_ssa_range
struct _zend_ssa_block zend_ssa_block
struct _zend_ssa_type_constraint zend_ssa_type_constraint
struct _zend_ssa zend_ssa
struct _zend_ssa_phi zend_ssa_phi
struct _zend_ssa_op zend_ssa_op
struct _zend_ssa_range_constraint zend_ssa_range_constraint
#define MAY_BE_ARRAY_OF_ANY
#define MAY_BE_ARRAY_OF_ARRAY
#define MAY_BE_ARRAY_OF_OBJECT
#define MAY_BE_ARRAY_OF_DOUBLE
#define MAY_BE_ARRAY_OF_FALSE
#define MAY_BE_ARRAY_KEY_STRING
#define MAY_BE_ARRAY_OF_NULL
#define MAY_BE_ARRAY_OF_TRUE
#define MAY_BE_ARRAY_OF_REF
#define MAY_BE_ARRAY_EMPTY
#define MAY_BE_PACKED_ONLY(t)
#define MAY_BE_ARRAY_OF_RESOURCE
#define MAY_BE_ARRAY_OF_LONG
#define MAY_BE_HASH_ONLY(t)
#define MAY_BE_ARRAY_KEY_LONG
#define MAY_BE_ARRAY_KEY_ANY
#define MAY_BE_ARRAY_OF_STRING
#define MAY_BE_EMPTY_ONLY(t)
#define Z_ARRVAL_P(zval_p)
struct _zend_array HashTable
ZEND_API const char *ZEND_FASTCALL zend_get_opcode_name(uint8_t opcode)
ZEND_API uint32_t ZEND_FASTCALL zend_get_opcode_flags(uint8_t opcode)
#define ZEND_VM_EXT_DIM_WRITE
#define ZEND_VM_OP_CLASS_FETCH
#define ZEND_VM_OP1_FLAGS(flags)
#define ZEND_VM_EXT_TYPE_MASK
#define ZEND_SWITCH_STRING
#define ZEND_VM_OP_CONSTRUCTOR
#define ZEND_VM_OP2_FLAGS(flags)
#define ZEND_VM_EXT_JMP_ADDR
#define ZEND_VM_EXT_VAR_FETCH
#define ZEND_VM_OP_TRY_CATCH
#define ZEND_VM_EXT_ARRAY_INIT
#define ZEND_VM_OP_JMP_ADDR
#define ZEND_VM_OP_CONST_FETCH
#define ZEND_VM_EXT_FETCH_REF
#define ZEND_VM_EXT_ISSET