23#define ZEND_BB_START (1<<0)
24#define ZEND_BB_FOLLOW (1<<1)
25#define ZEND_BB_TARGET (1<<2)
26#define ZEND_BB_EXIT (1<<3)
27#define ZEND_BB_ENTRY (1<<4)
28#define ZEND_BB_TRY (1<<5)
29#define ZEND_BB_CATCH (1<<6)
30#define ZEND_BB_FINALLY (1<<7)
31#define ZEND_BB_FINALLY_END (1<<8)
32#define ZEND_BB_UNREACHABLE_FREE (1<<11)
33#define ZEND_BB_RECV_ENTRY (1<<12)
35#define ZEND_BB_LOOP_HEADER (1<<16)
36#define ZEND_BB_IRREDUCIBLE_LOOP (1<<17)
38#define ZEND_BB_REACHABLE (1U<<31)
40#define ZEND_BB_PROTECTED (ZEND_BB_ENTRY|ZEND_BB_RECV_ENTRY|ZEND_BB_TRY|ZEND_BB_CATCH|ZEND_BB_FINALLY|ZEND_BB_FINALLY_END|ZEND_BB_UNREACHABLE_FREE)
94#define ZEND_CFG_STACKLESS (1<<30)
95#define ZEND_SSA_DEBUG_LIVENESS (1<<29)
96#define ZEND_SSA_DEBUG_PHI_PLACEMENT (1<<28)
97#define ZEND_SSA_RC_INFERENCE (1<<27)
98#define ZEND_CFG_NO_ENTRY_PREDECESSORS (1<<25)
99#define ZEND_CFG_RECV_ENTRY (1<<24)
100#define ZEND_CALL_TREE (1<<23)
101#define ZEND_SSA_USE_CV_RESULTS (1<<22)
103#define CRT_CONSTANT_EX(op_array, opline, node) \
104 (((op_array)->fn_flags & ZEND_ACC_DONE_PASS_TWO) ? \
105 RT_CONSTANT(opline, (node)) \
107 CT_CONSTANT_EX(op_array, (node).constant) \
110#define CRT_CONSTANT(node) \
111 CRT_CONSTANT_EX(op_array, opline, node)
113#define RETURN_VALUE_USED(opline) \
114 ((opline)->result_type != IS_UNUSED)
int successors_storage[2]
zend_basic_block * blocks
struct _zend_arena zend_arena
ZEND_API void zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t build_flags, zend_cfg *cfg)
ZEND_API void zend_cfg_build_predecessors(zend_arena **arena, zend_cfg *cfg)
ZEND_API void zend_cfg_compute_dominators_tree(const zend_op_array *op_array, zend_cfg *cfg)
ZEND_API void zend_cfg_identify_loops(const zend_op_array *op_array, zend_cfg *cfg)
void zend_cfg_remark_reachable_blocks(const zend_op_array *op_array, zend_cfg *cfg)
struct _zend_basic_block zend_basic_block
struct _zend_cfg zend_cfg
struct _zend_op_array zend_op_array