]> granicus.if.org Git - php/commitdiff
...
authorkrakjoe <joe.watkins@live.co.uk>
Tue, 12 Nov 2013 09:52:59 +0000 (09:52 +0000)
committerkrakjoe <joe.watkins@live.co.uk>
Tue, 12 Nov 2013 09:52:59 +0000 (09:52 +0000)
phpdbg_prompt.c
phpdbg_prompt.h

index 5fae1559d386f147a7fd4c78d5d7a493a404a228..a3eaacbbef6a5cdde36cba6f6f2f7c7e8b24f496 100644 (file)
@@ -47,9 +47,8 @@ static PHPDBG_COMMAND(exec) /* {{{ */
                printf(
                    "%sDestroying compiled opcodes%s\n",
                    PHPDBG_BOLD_LINE(TSRMLS_C), PHPDBG_END_LINE(TSRMLS_C));
-               destroy_op_array(PHPDBG_G(ops) TSRMLS_CC);
-               efree(PHPDBG_G(ops));
-               PHPDBG_G(ops) = NULL;
+               
+               phpdbg_clean(0 TSRMLS_CC);
        }
 
        PHPDBG_G(exec) = estrndup(expr, PHPDBG_G(exec_len) = expr_len);
@@ -99,9 +98,7 @@ static PHPDBG_COMMAND(compile) /* {{{ */
                            printf(
                                "%sDestroying previously compiled opcodes%s\n", 
                                PHPDBG_BOLD_LINE(TSRMLS_C), PHPDBG_END_LINE(TSRMLS_C));
-                           destroy_op_array(PHPDBG_G(ops) TSRMLS_CC);
-                           efree(PHPDBG_G(ops));
-                           PHPDBG_G(ops)=NULL;
+                           phpdbg_clean(0 TSRMLS_CC);
                    }
                }
 
@@ -184,6 +181,7 @@ static PHPDBG_COMMAND(eval) /* {{{ */
                        &retval, "eval()'d code" TSRMLS_CC) == SUCCESS) {
                        zend_print_zval_r(
                            &retval, 0 TSRMLS_CC);
+                       zval_dtor(&retval);
                        printf("\n");
                }
 
@@ -439,18 +437,7 @@ static PHPDBG_COMMAND(clean) /* {{{ */
         printf("[\tConstants: %d]\n", zend_hash_num_elements(EG(zend_constants)));
         printf("[\tIncluded: %d]\n", zend_hash_num_elements(&EG(included_files)));
 
-        /* this is implicitly required */
-        if (PHPDBG_G(ops)) {
-            destroy_op_array(
-                PHPDBG_G(ops) TSRMLS_CC);
-            efree(PHPDBG_G(ops));
-            PHPDBG_G(ops) = NULL;
-        }
-
-        zend_hash_reverse_apply(EG(function_table), (apply_func_t) clean_non_persistent_function_full TSRMLS_CC);
-        zend_hash_reverse_apply(EG(class_table), (apply_func_t) clean_non_persistent_class_full TSRMLS_CC);
-        zend_hash_reverse_apply(EG(zend_constants), (apply_func_t) clean_non_persistent_constant_full TSRMLS_CC);
-        zend_hash_clean(&EG(included_files));
+        phpdbg_clean(1 TSRMLS_CC);
 
         printf("[Clean Environment:]\n");
         printf("[\tClasses: %d]\n", zend_hash_num_elements(EG(class_table)));
@@ -702,13 +689,38 @@ phpdbg_interactive_enter:
 void phpdbg_print_opline(zend_execute_data *execute_data, zend_bool ignore_flags TSRMLS_DC) /* {{{ */
 {
     /* force out a line while stepping so the user knows what is happening */
-    if (ignore_flags || (!(PHPDBG_G(flags) & PHPDBG_IS_QUIET) || (PHPDBG_G(flags) & PHPDBG_IS_STEPPING))) {
+    if (ignore_flags || 
+        (!(PHPDBG_G(flags) & PHPDBG_IS_QUIET) || 
+        (PHPDBG_G(flags) & PHPDBG_IS_STEPPING))) {
+        
         zend_op *opline = execute_data->opline;
 
         printf(
             "%sOPLINE: %p:%s%s\n", 
             PHPDBG_BOLD_LINE(TSRMLS_C),
-            opline, phpdbg_decode_opcode(opline->opcode), PHPDBG_END_LINE(TSRMLS_C));
+            opline, 
+            phpdbg_decode_opcode(opline->opcode), 
+            PHPDBG_END_LINE(TSRMLS_C));
+    }
+} /* }}} */
+
+void phpdbg_clean(zend_bool full TSRMLS_DC) /* {{{ */
+{
+    zend_objects_store_call_destructors(&EG(objects_store) TSRMLS_CC);
+    /* this is implicitly required */
+    if (PHPDBG_G(ops)) {
+        destroy_op_array(
+            PHPDBG_G(ops) TSRMLS_CC);
+        efree(PHPDBG_G(ops));
+        PHPDBG_G(ops) = NULL;
+    }
+
+    if (full) {
+        zend_hash_reverse_apply(EG(function_table), (apply_func_t) clean_non_persistent_function_full TSRMLS_CC);
+        zend_hash_reverse_apply(EG(class_table), (apply_func_t) clean_non_persistent_class_full TSRMLS_CC);
+        zend_hash_reverse_apply(EG(zend_constants), (apply_func_t) clean_non_persistent_constant_full TSRMLS_CC);
+        zend_hash_clean(&EG(included_files));
     }
 } /* }}} */
 
index f9fd39dfdb5dc0d19e1adde032b25fddae4c7ec7..2a4fa4bb74af905884a14843e53f767e3def166f 100644 (file)
@@ -61,5 +61,6 @@ int phpdbg_do_cmd(const phpdbg_command_t *command, char *cmd_line, size_t cmd_le
 int phpdbg_interactive(TSRMLS_D);
 void phpdbg_execute_ex(zend_execute_data *execute_data TSRMLS_DC);
 void phpdbg_print_opline(zend_execute_data *execute_data, zend_bool ignore_flags TSRMLS_DC);
+void phpdbg_clean(zend_bool full TSRMLS_DC);
 
 #endif /* PHPDBG_PROMPT_H */