fprintf(stderr, "\n");
}
-static void zend_dump_op_array(const zend_op_array *op_array, const zend_cfg *cfg)
+static void zend_dump_op_array(const zend_op_array *op_array, const zend_cfg *cfg, int all)
{
int i;
zend_code_block *block;
for (block = cfg->blocks; block; block = block->next) {
- if (block->access) {
+ if (all || block->access) {
const zend_op *opline = block->start_opline;
const zend_op *end = opline + block->len;
int printed = 0;
}
}
cur_block->len = end - cur_block->start_opline;
- cur_block->next = &blocks[op_array->last + 1];
+ cur_block->next = NULL;
print_block(cur_block, op_array->opcodes, "");
return 1;
}
if (printed) {
fprintf(stderr, "\n");
- zend_dump_op_array(op_array, cfg);
+ zend_dump_op_array(op_array, cfg, 0);
}
}
#endif
#if DEBUG_BLOCKPASS
fprintf(stderr, "\nBEFORE-BLOCK-PASS: %s:\n", op_array->function_name ? op_array->function_name->val : "(null)");
- zend_dump_op_array(op_array, &cfg);
+ zend_dump_op_array(op_array, &cfg, 1);
#endif
if (op_array->last_var || op_array->T) {
#if DEBUG_BLOCKPASS
fprintf(stderr, "\nAFTER-BLOCK-PASS: %s:\n", op_array->function_name ? op_array->function_name->val : "(null)");
- zend_dump_op_array(op_array, &cfg);
+ zend_dump_op_array(op_array, &cfg, 0);
#endif
/* Destroy CFG */
case ZEND_ASSERT_CHECK:
ZEND_SET_OP_JMP_ADDR(new_opline, new_opline->op2, ZEND_OP2_JMP_ADDR(opline));
break;
+ case ZEND_CATCH:
+ if (!opline->result.num) {
+ new_opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, new_opline, ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value));
+ }
+ break;
case ZEND_FE_FETCH_R:
case ZEND_FE_FETCH_RW:
- case ZEND_CATCH:
new_opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, new_opline, ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value));
break;
}