]> granicus.if.org Git - php/commitdiff
- Moved breakpoint checking to phpdbg_bp.c file
authorFelipe Pena <felipensp@gmail.com>
Sat, 23 Nov 2013 23:46:24 +0000 (21:46 -0200)
committerFelipe Pena <felipensp@gmail.com>
Sat, 23 Nov 2013 23:46:24 +0000 (21:46 -0200)
phpdbg_bp.c
phpdbg_bp.h
phpdbg_prompt.c

index efd73a4b8fdc5a2697ad793c217f0289661e6b7a..bdd2eef3aefa4ead2f03a888fe799a9f3132a354 100644 (file)
@@ -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]);
index ad57b9c4c68894a34d7aa09b45e8268abdc765eb..92d2a634dbf45c41b859927f3d639f33413a6763 100644 (file)
@@ -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);
index 85fb6cf613f82b4d8c39ea4841ff073115f5364f..a065b8fd61641ec3c4cef49c04e9e467cb9f6d0b 100644 (file)
@@ -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();
                }