| 559 | | static int xc_clear_flag_optimized(zend_op_array *op_array TSRMLS_DC) /* {{{ */ |
| 560 | | { |
| 561 | | op_array->done_pass_two = 0; |
| 562 | | return 0; |
| 563 | | } |
| 564 | | /* }}} */ |
| 565 | | void xc_optimize(zend_op_array *op_array TSRMLS_DC) /* {{{ */ |
| 566 | | { |
| 567 | | xc_compile_result_t cr; |
| 568 | | |
| 569 | | if (!op_array) { |
| 570 | | return; |
| 571 | | } |
| 572 | | |
| 573 | | xc_compile_result_init_cur(&cr, op_array TSRMLS_CC); |
| 574 | | |
| 575 | | xc_apply_op_array(&cr, (apply_func_t) xc_undo_pass_two TSRMLS_CC); |
| 576 | | /* op_array->done_pass_two is now used as if it's op_array->flag_optimized */ |
| 577 | | xc_apply_op_array(&cr, (apply_func_t) xc_optimize_op_array TSRMLS_CC); |
| 578 | | xc_apply_op_array(&cr, (apply_func_t) xc_clear_flag_optimized TSRMLS_CC); |
| 579 | | xc_apply_op_array(&cr, (apply_func_t) xc_redo_pass_two TSRMLS_CC); |
| 580 | | |
| 581 | | xc_compile_result_free(&cr); |
| 582 | | } |
| 583 | | /* }}} */ |
| | 553 | void xc_optimizer_op_array_handler(zend_op_array *op_array) /* {{{ */ |
| | 554 | { |
| | 555 | TSRMLS_FETCH(); |
| | 556 | if (XG(optimizer)) { |
| | 557 | xc_optimize_op_array(op_array TSRMLS_CC); |
| | 558 | } |
| | 559 | } |
| | 560 | /* }}} */ |