From 46f5da1dc1c7ede026656b27659d654599984dae Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Sat, 23 Nov 2013 21:46:24 -0200 Subject: [PATCH] - Moved breakpoint checking to phpdbg_bp.c file --- phpdbg_bp.c | 31 +++++++++++++++++++++++++++++++ phpdbg_bp.h | 1 + phpdbg_prompt.c | 24 ++---------------------- 3 files changed, 34 insertions(+), 22 deletions(-) diff --git a/phpdbg_bp.c b/phpdbg_bp.c index efd73a4b8fd..bdd2eef3aef 100644 --- a/phpdbg_bp.c +++ b/phpdbg_bp.c @@ -23,6 +23,7 @@ #include "phpdbg.h" #include "phpdbg_bp.h" #include "phpdbg_utils.h" +#include "phpdbg_opcode.h" #include "zend_globals.h" ZEND_EXTERN_MODULE_GLOBALS(phpdbg); @@ -445,6 +446,36 @@ int phpdbg_find_conditional_breakpoint(TSRMLS_D) /* {{{ */ return breakpoint; } /* }}} */ +int phpdbg_find_breakpoint(zend_execute_data* execute_data TSRMLS_DC) /* {{{ */ +{ + if (PHPDBG_G(flags) & PHPDBG_HAS_FILE_BP + && phpdbg_find_breakpoint_file(execute_data->op_array TSRMLS_CC) == SUCCESS) { + return SUCCESS; + } + + if (PHPDBG_G(flags) & (PHPDBG_HAS_METHOD_BP|PHPDBG_HAS_SYM_BP)) { + /* check we are at the beginning of the stack */ + if (execute_data->opline == EG(active_op_array)->opcodes) { + if (phpdbg_find_breakpoint_symbol( + execute_data->function_state.function TSRMLS_CC) == SUCCESS) { + return SUCCESS; + } + } + } + + if (PHPDBG_G(flags) & PHPDBG_HAS_OPLINE_BP + && phpdbg_find_breakpoint_opline(execute_data->opline TSRMLS_CC) == SUCCESS) { + return SUCCESS; + } + + if (PHPDBG_G(flags) & PHPDBG_HAS_OPCODE_BP + && phpdbg_find_breakpoint_opcode(execute_data->opline->opcode TSRMLS_CC) == SUCCESS) { + return SUCCESS; + } + + return FAILURE; +} /* }}} */ + PHPDBG_API void phpdbg_clear_breakpoints(TSRMLS_D) /* {{{ */ { zend_hash_clean(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE]); diff --git a/phpdbg_bp.h b/phpdbg_bp.h index ad57b9c4c68..92d2a634dbf 100644 --- a/phpdbg_bp.h +++ b/phpdbg_bp.h @@ -92,6 +92,7 @@ int phpdbg_find_breakpoint_opline(phpdbg_opline_ptr_t TSRMLS_DC); int phpdbg_find_breakpoint_opcode(zend_uchar TSRMLS_DC); int phpdbg_find_conditional_breakpoint(TSRMLS_D); int phpdbg_find_catch(zend_uchar TSRMLS_DC); +int phpdbg_find_breakpoint(zend_execute_data* TSRMLS_DC); PHPDBG_API void phpdbg_clear_breakpoints(TSRMLS_D); PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC); diff --git a/phpdbg_prompt.c b/phpdbg_prompt.c index 85fb6cf613f..a065b8fd616 100644 --- a/phpdbg_prompt.c +++ b/phpdbg_prompt.c @@ -1370,28 +1370,8 @@ zend_vm_enter: DO_INTERACTIVE(); } - if ((PHPDBG_G(flags) & PHPDBG_HAS_FILE_BP) - && phpdbg_find_breakpoint_file(execute_data->op_array TSRMLS_CC) == SUCCESS) { - DO_INTERACTIVE(); - } - - if ((PHPDBG_G(flags) & (PHPDBG_HAS_METHOD_BP|PHPDBG_HAS_SYM_BP))) { - /* check we are at the beginning of the stack */ - if (execute_data->opline == EG(active_op_array)->opcodes) { - if (phpdbg_find_breakpoint_symbol( - execute_data->function_state.function TSRMLS_CC) == SUCCESS) { - DO_INTERACTIVE(); - } - } - } - - if (PHPDBG_G(flags) & PHPDBG_HAS_OPLINE_BP - && phpdbg_find_breakpoint_opline(execute_data->opline TSRMLS_CC) == SUCCESS) { - DO_INTERACTIVE(); - } - - if (PHPDBG_G(flags) & PHPDBG_HAS_OPCODE_BP - && phpdbg_find_breakpoint_opcode(execute_data->opline->opcode TSRMLS_CC) == SUCCESS) { + if (PHPDBG_G(flags) & PHPDBG_BP_MASK + && phpdbg_find_breakpoint(execute_data TSRMLS_CC) == SUCCESS) { DO_INTERACTIVE(); }