@@ -88,6 +88,26 @@ static void zend_dump_class_fetch_type(uint32_t fetch_type)
88
88
}
89
89
}
90
90
91
+ static void zend_dump_unused_op (const zend_op * opline , znode_op op , uint32_t flags ) {
92
+ if (ZEND_VM_OP_NUM == (flags & ZEND_VM_OP_MASK )) {
93
+ fprintf (stderr , " %u" , op .num );
94
+ } else if (ZEND_VM_OP_TRY_CATCH == (flags & ZEND_VM_OP_MASK )) {
95
+ fprintf (stderr , " try-catch(%u)" , op .num );
96
+ } else if (ZEND_VM_OP_LIVE_RANGE == (flags & ZEND_VM_OP_MASK )) {
97
+ if (opline -> extended_value & ZEND_FREE_ON_RETURN ) {
98
+ fprintf (stderr , " live-range(%u)" , op .num );
99
+ }
100
+ } else if (ZEND_VM_OP_THIS == (flags & ZEND_VM_OP_MASK )) {
101
+ fprintf (stderr , " THIS" );
102
+ } else if (ZEND_VM_OP_NEXT == (flags & ZEND_VM_OP_MASK )) {
103
+ fprintf (stderr , " NEXT" );
104
+ } else if (ZEND_VM_OP_CLASS_FETCH == (flags & ZEND_VM_OP_MASK )) {
105
+ zend_dump_class_fetch_type (op .num );
106
+ } else if (ZEND_VM_OP_CONSTRUCTOR == (flags & ZEND_VM_OP_MASK )) {
107
+ fprintf (stderr , " CONSTRUCTOR" );
108
+ }
109
+ }
110
+
91
111
void zend_dump_var (const zend_op_array * op_array , zend_uchar var_type , int var_num )
92
112
{
93
113
if (var_type == IS_CV && var_num < op_array -> last_var ) {
@@ -546,21 +566,8 @@ static void zend_dump_op(const zend_op_array *op_array, const zend_basic_block *
546
566
}
547
567
}
548
568
}
549
- if (ZEND_VM_OP1_JMP_ADDR == (flags & ZEND_VM_OP1_MASK )) {
550
- if (b ) {
551
- fprintf (stderr , " BB%d" , b -> successors [n ++ ]);
552
- } else {
553
- fprintf (stderr , " L%u" , (uint32_t )(OP_JMP_ADDR (opline , opline -> op1 ) - op_array -> opcodes ));
554
- }
555
- } else if (ZEND_VM_OP1_NUM == (flags & ZEND_VM_OP1_MASK )) {
556
- fprintf (stderr , " %u" , opline -> op1 .num );
557
- } else if (ZEND_VM_OP1_TRY_CATCH == (flags & ZEND_VM_OP1_MASK )) {
558
- fprintf (stderr , " try-catch(%u)" , opline -> op1 .num );
559
- } else if (ZEND_VM_OP1_LIVE_RANGE == (flags & ZEND_VM_OP1_MASK )) {
560
- if (opline -> extended_value & ZEND_FREE_ON_RETURN ) {
561
- fprintf (stderr , " live-range(%u)" , opline -> op1 .num );
562
- }
563
- } else if (opline -> op1_type == IS_CONST ) {
569
+
570
+ if (opline -> op1_type == IS_CONST ) {
564
571
zend_dump_const (CRT_CONSTANT_EX (op_array , opline -> op1 , (dump_flags & ZEND_DUMP_RT_CONSTANTS )));
565
572
} else if (opline -> op1_type == IS_CV ||
566
573
opline -> op1_type == IS_VAR ||
@@ -585,30 +592,20 @@ static void zend_dump_op(const zend_op_array *op_array, const zend_basic_block *
585
592
zend_dump_ssa_var (op_array , ssa , ssa_var_num , opline -> op1_type , EX_VAR_TO_NUM (opline -> op1 .var ));
586
593
}
587
594
}
588
- } else if (ZEND_VM_OP1_THIS == (flags & ZEND_VM_OP1_MASK )) {
589
- fprintf (stderr , " THIS" );
590
- } else if (ZEND_VM_OP1_NEXT == (flags & ZEND_VM_OP1_MASK )) {
591
- fprintf (stderr , " NEXT" );
592
- } else if (ZEND_VM_OP1_CLASS_FETCH == (flags & ZEND_VM_OP1_MASK )) {
593
- zend_dump_class_fetch_type (opline -> op1 .num );
594
- } else if (ZEND_VM_OP1_CONSTRUCTOR == (flags & ZEND_VM_OP1_MASK )) {
595
- fprintf (stderr , " CONSTRUCTOR" );
596
- }
597
- if (ZEND_VM_OP2_JMP_ADDR == (flags & ZEND_VM_OP2_MASK )) {
598
- if (b ) {
599
- fprintf (stderr , " BB%d" , b -> successors [n ++ ]);
595
+ } else {
596
+ uint32_t op1_flags = ZEND_VM_OP1_FLAGS (flags );
597
+ if (ZEND_VM_OP_JMP_ADDR == (op1_flags & ZEND_VM_OP_MASK )) {
598
+ if (b ) {
599
+ fprintf (stderr , " BB%d" , b -> successors [n ++ ]);
600
+ } else {
601
+ fprintf (stderr , " L%u" , (uint32_t )(OP_JMP_ADDR (opline , opline -> op1 ) - op_array -> opcodes ));
602
+ }
600
603
} else {
601
- fprintf (stderr , " L%u" , (uint32_t )(OP_JMP_ADDR (opline , opline -> op2 ) - op_array -> opcodes ));
602
- }
603
- } else if (ZEND_VM_OP2_NUM == (flags & ZEND_VM_OP2_MASK )) {
604
- fprintf (stderr , " %u" , opline -> op2 .num );
605
- } else if (ZEND_VM_OP2_TRY_CATCH == (flags & ZEND_VM_OP2_MASK )) {
606
- fprintf (stderr , " try-catch(%u)" , opline -> op2 .num );
607
- } else if (ZEND_VM_OP2_LIVE_RANGE == (flags & ZEND_VM_OP2_MASK )) {
608
- if (opline -> extended_value & ZEND_FREE_ON_RETURN ) {
609
- fprintf (stderr , " live-range(%u)" , opline -> op2 .num );
604
+ zend_dump_unused_op (opline , opline -> op1 , op1_flags );
610
605
}
611
- } else if (opline -> op2_type == IS_CONST ) {
606
+ }
607
+
608
+ if (opline -> op2_type == IS_CONST ) {
612
609
zend_dump_const (CRT_CONSTANT_EX (op_array , opline -> op2 , (dump_flags & ZEND_DUMP_RT_CONSTANTS )));
613
610
} else if (opline -> op2_type == IS_CV ||
614
611
opline -> op2_type == IS_VAR ||
@@ -633,15 +630,19 @@ static void zend_dump_op(const zend_op_array *op_array, const zend_basic_block *
633
630
zend_dump_ssa_var (op_array , ssa , ssa_var_num , opline -> op2_type , EX_VAR_TO_NUM (opline -> op2 .var ));
634
631
}
635
632
}
636
- } else if (ZEND_VM_OP2_THIS == (flags & ZEND_VM_OP2_MASK )) {
637
- fprintf (stderr , " THIS" );
638
- } else if (ZEND_VM_OP2_NEXT == (flags & ZEND_VM_OP2_MASK )) {
639
- fprintf (stderr , " NEXT" );
640
- } else if (ZEND_VM_OP2_CLASS_FETCH == (flags & ZEND_VM_OP2_MASK )) {
641
- zend_dump_class_fetch_type (opline -> op2 .num );
642
- } else if (ZEND_VM_OP2_CONSTRUCTOR == (flags & ZEND_VM_OP2_MASK )) {
643
- fprintf (stderr , " CONSTRUCTOR" );
633
+ } else {
634
+ uint32_t op2_flags = ZEND_VM_OP2_FLAGS (flags );
635
+ if (ZEND_VM_OP_JMP_ADDR == (op2_flags & ZEND_VM_OP_MASK )) {
636
+ if (b ) {
637
+ fprintf (stderr , " BB%d" , b -> successors [n ++ ]);
638
+ } else {
639
+ fprintf (stderr , " L%u" , (uint32_t )(OP_JMP_ADDR (opline , opline -> op2 ) - op_array -> opcodes ));
640
+ }
641
+ } else {
642
+ zend_dump_unused_op (opline , opline -> op2 , op2_flags );
643
+ }
644
644
}
645
+
645
646
if (ZEND_VM_EXT_JMP_ADDR == (flags & ZEND_VM_EXT_MASK )) {
646
647
if (opline -> opcode != ZEND_CATCH || !opline -> result .num ) {
647
648
if (b ) {
0 commit comments