]> granicus.if.org Git - php/commitdiff
go back with phpdbg to the state of 5.6.3, reverting the controversial commits(remote...
authorFerenc Kovacs <tyrael@php.net>
Wed, 26 Nov 2014 17:38:36 +0000 (18:38 +0100)
committerFerenc Kovacs <tyrael@php.net>
Wed, 26 Nov 2014 17:38:36 +0000 (18:38 +0100)
55 files changed:
sapi/phpdbg/.travis.yml
sapi/phpdbg/README.md
sapi/phpdbg/config.m4
sapi/phpdbg/config.w32
sapi/phpdbg/phpdbg.c
sapi/phpdbg/phpdbg.h
sapi/phpdbg/phpdbg_bp.c
sapi/phpdbg/phpdbg_bp.h
sapi/phpdbg/phpdbg_break.c
sapi/phpdbg/phpdbg_cmd.c
sapi/phpdbg/phpdbg_cmd.h
sapi/phpdbg/phpdbg_eol.c [deleted file]
sapi/phpdbg/phpdbg_eol.h [deleted file]
sapi/phpdbg/phpdbg_frame.c
sapi/phpdbg/phpdbg_help.c
sapi/phpdbg/phpdbg_help.h
sapi/phpdbg/phpdbg_info.c
sapi/phpdbg/phpdbg_info.h
sapi/phpdbg/phpdbg_io.c [deleted file]
sapi/phpdbg/phpdbg_io.h [deleted file]
sapi/phpdbg/phpdbg_lexer.c
sapi/phpdbg/phpdbg_lexer.l
sapi/phpdbg/phpdbg_list.c
sapi/phpdbg/phpdbg_list.h
sapi/phpdbg/phpdbg_opcode.c
sapi/phpdbg/phpdbg_out.c [deleted file]
sapi/phpdbg/phpdbg_out.h [deleted file]
sapi/phpdbg/phpdbg_parser.c
sapi/phpdbg/phpdbg_parser.h
sapi/phpdbg/phpdbg_parser.y
sapi/phpdbg/phpdbg_print.c
sapi/phpdbg/phpdbg_prompt.c
sapi/phpdbg/phpdbg_prompt.h
sapi/phpdbg/phpdbg_rinit_hook.c [deleted file]
sapi/phpdbg/phpdbg_rinit_hook.h [deleted file]
sapi/phpdbg/phpdbg_set.c
sapi/phpdbg/phpdbg_sigio_win32.c [deleted file]
sapi/phpdbg/phpdbg_sigio_win32.h [deleted file]
sapi/phpdbg/phpdbg_sigsafe.c [deleted file]
sapi/phpdbg/phpdbg_sigsafe.h [deleted file]
sapi/phpdbg/phpdbg_utils.c
sapi/phpdbg/phpdbg_utils.h
sapi/phpdbg/phpdbg_wait.c [deleted file]
sapi/phpdbg/phpdbg_wait.h [deleted file]
sapi/phpdbg/phpdbg_watch.c
sapi/phpdbg/phpdbg_watch.h
sapi/phpdbg/phpdbg_webdata_transfer.c [deleted file]
sapi/phpdbg/phpdbg_webdata_transfer.h [deleted file]
sapi/phpdbg/tests/commands/0002_set.test
sapi/phpdbg/tests/commands/0102_print.test
sapi/phpdbg/tests/commands/0104_clean.test
sapi/phpdbg/tests/commands/0105_clear.test
sapi/phpdbg/tests/commands/0106_compile.test
sapi/phpdbg/xml.md [deleted file]
sapi/phpdbg/zend_mm_structs.h [deleted file]

index 2e777fbe13d7f361a7a4675cd0e78794340ebc0f..d5b492e7cfaa090e9fc78b17755ec07ff970d9cb 100644 (file)
@@ -4,6 +4,7 @@ env:
 - PHP="PHP-5.4"
 - PHP="PHP-5.5"
 - PHP="PHP-5.6"
+- PHP="master"
 
 before_script: ./travis/ci.sh
 
index a2a84deb7b12b81564e919934ac9fa7d09d8e3cd..e7e5c731a805ceb4cdb68d03fba4cdc66fcaab53 100644 (file)
@@ -1,7 +1,7 @@
 The interactive PHP debugger
 ============================
 
-Implemented as a SAPI module, phpdbg can exert complete control over the environment without impacting the functionality or performance of your code.
+Implemented as a SAPI module, phpdbg can excert complete control over the environment without impacting the functionality or performance of your code.
 
 phpdbg aims to be a lightweight, powerful, easy to use debugging platform for PHP 5.4+
 
index 87d38ea8c518f91f018a15a285c5f015b879616b..d78a439af0248014965b26d6535968e61da5af0c 100644 (file)
@@ -3,15 +3,12 @@ dnl $Id$
 dnl
 
 PHP_ARG_ENABLE(phpdbg, for phpdbg support,
-[  --enable-phpdbg            Build phpdbg], no, no)
-
-PHP_ARG_ENABLE(phpdbg-webhelper, for phpdbg web SAPI support,
-[  --enable-phpdbg-webhelper  Build phpdbg web SAPI support], yes, yes)
+[  --enable-phpdbg         Build phpdbg], no, no)
 
 PHP_ARG_ENABLE(phpdbg-debug, for phpdbg debug build,
-[  --enable-phpdbg-debug      Build phpdbg in debug mode], no, no)
+[  --enable-phpdbg-debug   Build phpdbg in debug mode], no, no)
 
-if test "$BUILD_PHPDBG" == "" && test "$PHP_PHPDBG" != "no"; then
+if test "$PHP_PHPDBG" != "no"; then
   AC_HEADER_TIOCGWINSZ
   AC_DEFINE(HAVE_PHPDBG, 1, [ ])
 
@@ -21,15 +18,8 @@ if test "$BUILD_PHPDBG" == "" && test "$PHP_PHPDBG" != "no"; then
     AC_DEFINE(PHPDBG_DEBUG, 0, [ ])
   fi
 
-  if test "$PHP_PHPDBG_WEBHELPER" != "no"; then
-    if ! test -d $abs_srcdir/ext/phpdbg_webhelper; then
-      ln -s ../sapi/phpdbg $abs_srcdir/ext/phpdbg_webhelper
-    fi
-    PHP_NEW_EXTENSION(phpdbg_webhelper, phpdbg_rinit_hook.c phpdbg_webdata_transfer.c, $ext_shared)
-  fi
-
   PHP_PHPDBG_CFLAGS="-D_GNU_SOURCE"
-  PHP_PHPDBG_FILES="phpdbg.c phpdbg_parser.c phpdbg_lexer.c phpdbg_prompt.c phpdbg_help.c phpdbg_break.c phpdbg_print.c phpdbg_bp.c phpdbg_opcode.c phpdbg_list.c phpdbg_utils.c phpdbg_info.c phpdbg_cmd.c phpdbg_set.c phpdbg_frame.c phpdbg_watch.c phpdbg_btree.c phpdbg_sigsafe.c phpdbg_wait.c phpdbg_io.c phpdbg_eol.c phpdbg_out.c"
+  PHP_PHPDBG_FILES="phpdbg.c phpdbg_parser.c phpdbg_lexer.c phpdbg_prompt.c phpdbg_help.c phpdbg_break.c phpdbg_print.c phpdbg_bp.c phpdbg_opcode.c phpdbg_list.c phpdbg_utils.c phpdbg_info.c phpdbg_cmd.c phpdbg_set.c phpdbg_frame.c phpdbg_watch.c phpdbg_btree.c"
 
   if test "$PHP_READLINE" != "no" -o  "$PHP_LIBEDIT" != "no"; then
        PHPDBG_EXTRA_LIBS="$PHP_READLINE_LIBS"
index 8a685d334773dc2fd4b4134294331ea19426703c..17e15b6ced08fb6961a5d6b17d28f00cf71f3def 100644 (file)
@@ -1,12 +1,7 @@
 ARG_ENABLE('phpdbg', 'Build phpdbg', 'no');
 ARG_ENABLE('phpdbgs', 'Build phpdbg shared', 'no');
-ARG_ENABLE('phpdbg-webhelper', 'Build phpdbg webhelper', 'yes');
 
-PHPDBG_SOURCES='phpdbg.c phpdbg_prompt.c phpdbg_cmd.c phpdbg_info.c phpdbg_help.c phpdbg_break.c ' +
-               'phpdbg_print.c phpdbg_bp.c phpdbg_opcode.c phpdbg_list.c phpdbg_utils.c ' +
-               'phpdbg_set.c phpdbg_frame.c phpdbg_watch.c phpdbg_win.c phpdbg_btree.c '+
-               'phpdbg_parser.c phpdbg_lexer.c phpdbg_sigsafe.c phpdbg_wait.c phpdbg_io.c ' +
-               'phpdbg_sigio_win32.c phpdbg_eol.c phpdbg_out.c';
+PHPDBG_SOURCES='phpdbg.c phpdbg_prompt.c phpdbg_cmd.c phpdbg_info.c phpdbg_help.c phpdbg_break.c phpdbg_print.c phpdbg_bp.c phpdbg_opcode.c phpdbg_list.c phpdbg_utils.c phpdbg_set.c phpdbg_frame.c phpdbg_watch.c phpdbg_win.c phpdbg_btree.c phpdbg_parser.c phpdbg_lexer.c';
 PHPDBG_DLL='php' + PHP_VERSION + 'phpdbg.dll';
 PHPDBG_EXE='phpdbg.exe';
 
@@ -14,11 +9,6 @@ if (PHP_PHPDBG == "yes") {
        SAPI('phpdbg', PHPDBG_SOURCES, PHPDBG_EXE);
        ADD_FLAG("LIBS_PHPDBG", "ws2_32.lib user32.lib");
        ADD_FLAG("CFLAGS_PHPDBG", "/D YY_NO_UNISTD_H");
-       ADD_FLAG("LDFLAGS_PHPDBG", "/stack:8388608");
-
-       if (PHP_PHPDBG_WEBHELPER == "yes") {
-               EXTENSION('phpdbg_webhelper', 'phpdbg_rinit_hook.c phpdbg_webdata_transfer.c');
-       }
 }
 
 if (PHP_PHPDBGS == "yes") {
index 2f0ed2eab6de1380b068ff389976ab01aa306dd6..fa6f8434323d3b1b06316627b282f8216142e61d 100644 (file)
@@ -28,9 +28,7 @@
 #include "phpdbg_list.h"
 #include "phpdbg_utils.h"
 #include "phpdbg_set.h"
-#include "phpdbg_io.h"
 #include "zend_alloc.h"
-#include "phpdbg_eol.h"
 
 /* {{{ remote console headers */
 #ifndef _WIN32
 #      include <sys/select.h>
 #      include <sys/time.h>
 #      include <sys/types.h>
-#      include <sys/poll.h>
 #      include <netinet/in.h>
 #      include <unistd.h>
 #      include <arpa/inet.h>
 #endif /* }}} */
 
 ZEND_DECLARE_MODULE_GLOBALS(phpdbg);
-int phpdbg_startup_run = 0;
-
-static PHP_INI_MH(OnUpdateEol)
-{
-       if (!new_value) {
-               return FAILURE;
-       }
-
-       return phpdbg_eol_global_update(new_value TSRMLS_CC);
-}
-
-PHP_INI_BEGIN()
-       STD_PHP_INI_ENTRY("phpdbg.path", "", PHP_INI_SYSTEM | PHP_INI_PERDIR, OnUpdateString, socket_path, zend_phpdbg_globals, phpdbg_globals)
-       STD_PHP_INI_ENTRY("phpdbg.eol", "2", PHP_INI_ALL, OnUpdateEol, socket_path, zend_phpdbg_globals, phpdbg_globals)
-PHP_INI_END()
 
 static zend_bool phpdbg_booted = 0;
 
@@ -81,39 +63,20 @@ static inline void php_phpdbg_globals_ctor(zend_phpdbg_globals *pg) /* {{{ */
        pg->exec = NULL;
        pg->exec_len = 0;
        pg->buffer = NULL;
-       pg->last_was_newline = 1;
        pg->ops = NULL;
        pg->vmret = 0;
        pg->bp_count = 0;
        pg->flags = PHPDBG_DEFAULT_FLAGS;
        pg->oplog = NULL;
-       memset(pg->io, 0, sizeof(pg->io));
+       pg->io[PHPDBG_STDIN] = NULL;
+       pg->io[PHPDBG_STDOUT] = NULL;
+       pg->io[PHPDBG_STDERR] = NULL;
        pg->frame.num = 0;
-       pg->sapi_name_ptr = NULL;
-       pg->socket_fd = -1;
-       pg->socket_server_fd = -1;
-
-       pg->req_id = 0;
-       pg->err_buf.active = 0;
-       pg->err_buf.type = 0;
-
-       pg->input_buflen = 0;
-       pg->sigsafe_mem.mem = NULL;
-       pg->sigsegv_bailout = NULL;
-
-#ifdef PHP_WIN32
-       pg->sigio_watcher_thread = INVALID_HANDLE_VALUE;
-       memset(&pg->swd, 0, sizeof(struct win32_sigio_watcher_data));
-#endif
-
-       pg->eol = PHPDBG_EOL_LF;
 } /* }}} */
 
 static PHP_MINIT_FUNCTION(phpdbg) /* {{{ */
 {
        ZEND_INIT_MODULE_GLOBALS(phpdbg, php_phpdbg_globals_ctor, NULL);
-       REGISTER_INI_ENTRIES();
-
 #if PHP_VERSION_ID >= 50500
        zend_execute_old = zend_execute_ex;
        zend_execute_ex = phpdbg_execute_ex;
@@ -123,7 +86,7 @@ static PHP_MINIT_FUNCTION(phpdbg) /* {{{ */
 #endif
 
        REGISTER_STRINGL_CONSTANT("PHPDBG_VERSION", PHPDBG_VERSION, sizeof(PHPDBG_VERSION)-1, CONST_CS|CONST_PERSISTENT);
-
+       
        REGISTER_LONG_CONSTANT("PHPDBG_FILE",   FILE_PARAM, CONST_CS|CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("PHPDBG_METHOD", METHOD_PARAM, CONST_CS|CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("PHPDBG_LINENO", NUMERIC_PARAM, CONST_CS|CONST_PERSISTENT);
@@ -185,8 +148,7 @@ static void php_phpdbg_destroy_registered(void *data) /* {{{ */
 
 static PHP_RINIT_FUNCTION(phpdbg) /* {{{ */
 {
-       zend_hash_init(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE], 8, NULL, php_phpdbg_destroy_bp_file, 0);
-       zend_hash_init(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE_PENDING], 8, NULL, php_phpdbg_destroy_bp_file, 0);
+       zend_hash_init(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE],   8, NULL, php_phpdbg_destroy_bp_file, 0);
        zend_hash_init(&PHPDBG_G(bp)[PHPDBG_BREAK_SYM], 8, NULL, php_phpdbg_destroy_bp_symbol, 0);
        zend_hash_init(&PHPDBG_G(bp)[PHPDBG_BREAK_FUNCTION_OPLINE], 8, NULL, php_phpdbg_destroy_bp_methods, 0);
        zend_hash_init(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD_OPLINE], 8, NULL, php_phpdbg_destroy_bp_methods, 0);
@@ -216,7 +178,6 @@ static PHP_RSHUTDOWN_FUNCTION(phpdbg) /* {{{ */
        zend_hash_destroy(&PHPDBG_G(bp)[PHPDBG_BREAK_COND]);
        zend_hash_destroy(&PHPDBG_G(bp)[PHPDBG_BREAK_MAP]);
        zend_hash_destroy(&PHPDBG_G(seek));
-       zend_hash_destroy(&PHPDBG_G(file_sources));
        zend_hash_destroy(&PHPDBG_G(registered));
        zend_hash_destroy(&PHPDBG_G(watchpoints));
        zend_llist_destroy(&PHPDBG_G(watchlist_mem));
@@ -225,7 +186,7 @@ static PHP_RSHUTDOWN_FUNCTION(phpdbg) /* {{{ */
                efree(PHPDBG_G(buffer));
                PHPDBG_G(buffer) = NULL;
        }
-
+       
        if (PHPDBG_G(exec)) {
                efree(PHPDBG_G(exec));
                PHPDBG_G(exec) = NULL;
@@ -265,7 +226,7 @@ static PHP_FUNCTION(phpdbg_exec)
 {
        char *exec = NULL;
        int exec_len = 0;
-
+       
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &exec, &exec_len) == FAILURE) {
                return;
        }
@@ -363,7 +324,6 @@ static PHP_FUNCTION(phpdbg_break_function)
 static PHP_FUNCTION(phpdbg_clear)
 {
        zend_hash_clean(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE]);
-       zend_hash_clean(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE_PENDING]);
        zend_hash_clean(&PHPDBG_G(bp)[PHPDBG_BREAK_SYM]);
        zend_hash_clean(&PHPDBG_G(bp)[PHPDBG_BREAK_FUNCTION_OPLINE]);
        zend_hash_clean(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD_OPLINE]);
@@ -378,7 +338,7 @@ static PHP_FUNCTION(phpdbg_color)
 {
        long element = 0L;
        char *color = NULL;
-       size_t color_len = 0;
+       int color_len = 0;
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ls", &element, &color, &color_len) == FAILURE) {
                return;
@@ -399,7 +359,7 @@ static PHP_FUNCTION(phpdbg_color)
 static PHP_FUNCTION(phpdbg_prompt)
 {
        char *prompt = NULL;
-       size_t prompt_len = 0;
+       int prompt_len = 0;
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &prompt, &prompt_len) == FAILURE) {
                return;
@@ -511,12 +471,7 @@ static void php_sapi_phpdbg_log_message(char *message TSRMLS_DC) /* {{{ */
        * We must not request TSRM before being boot
        */
        if (phpdbg_booted) {
-               if (PHPDBG_G(flags) & PHPDBG_IN_EVAL) {
-                       phpdbg_error("eval", "msg=\"%s\"", "%s", message);
-                       return;
-               }
-
-               phpdbg_error("php", "msg=\"%s\"", "%s", message);
+               phpdbg_error("%s", message);
 
                switch (PG(last_error_type)) {
                        case E_ERROR:
@@ -525,17 +480,25 @@ static void php_sapi_phpdbg_log_message(char *message TSRMLS_DC) /* {{{ */
                        case E_USER_ERROR:
                        case E_PARSE:
                        case E_RECOVERABLE_ERROR:
-                               phpdbg_list_file(zend_get_executed_filename(TSRMLS_C), 3, zend_get_executed_lineno(TSRMLS_C)-1, zend_get_executed_lineno(TSRMLS_C) TSRMLS_CC);
+                               if (!(PHPDBG_G(flags) & PHPDBG_IN_EVAL)) {
+                                       phpdbg_list_file(
+                                               zend_get_executed_filename(TSRMLS_C),
+                                               3,
+                                               zend_get_executed_lineno(TSRMLS_C)-1,
+                                               zend_get_executed_lineno(TSRMLS_C)
+                                               TSRMLS_CC
+                                       );
+                               }
 
                                do {
-                                       switch (phpdbg_interactive(1 TSRMLS_CC)) {
+                                       switch (phpdbg_interactive(TSRMLS_C)) {
                                                case PHPDBG_LEAVE:
                                                case PHPDBG_FINISH:
                                                case PHPDBG_UNTIL:
                                                case PHPDBG_NEXT:
                                                        return;
                                        }
-                               } while (!(PHPDBG_G(flags) & PHPDBG_IS_STOPPING));
+                               } while (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING));
 
                }
        } else fprintf(stdout, "%s\n", message);
@@ -544,27 +507,11 @@ static void php_sapi_phpdbg_log_message(char *message TSRMLS_DC) /* {{{ */
 
 static int php_sapi_phpdbg_deactivate(TSRMLS_D) /* {{{ */
 {
-       if ((PHPDBG_G(flags) & PHPDBG_IS_STOPPING) == PHPDBG_IS_CLEANING) {
-               zend_phpdbg_globals *pg = PHPDBG_G(backup) = calloc(1, sizeof(zend_phpdbg_globals));
-
-               php_phpdbg_globals_ctor(pg);
-
-               pg->exec = zend_strndup(PHPDBG_G(exec), PHPDBG_G(exec_len));
-               pg->exec_len = PHPDBG_G(exec_len);
-               pg->oplog = PHPDBG_G(oplog);
-               pg->prompt[0] = PHPDBG_G(prompt)[0];
-               pg->prompt[1] = PHPDBG_G(prompt)[1];
-               memcpy(pg->colors, PHPDBG_G(colors), sizeof(pg->colors));
-               pg->eol = PHPDBG_G(eol);
-               pg->flags = PHPDBG_G(flags) & PHPDBG_PRESERVE_FLAGS_MASK;
-       }
-
        fflush(stdout);
        if(SG(request_info).argv0) {
                free(SG(request_info).argv0);
                SG(request_info).argv0 = NULL;
        }
-
        return SUCCESS;
 }
 /* }}} */
@@ -614,42 +561,9 @@ static void php_sapi_phpdbg_register_vars(zval *track_vars_array TSRMLS_DC) /* {
 
 static inline int php_sapi_phpdbg_ub_write(const char *message, unsigned int length TSRMLS_DC) /* {{{ */
 {
-       if (PHPDBG_G(socket_fd) != -1 && !(PHPDBG_G(flags) & PHPDBG_IS_INTERACTIVE)) {
-               send(PHPDBG_G(socket_fd), message, length, 0);
-       }
-       return phpdbg_script(P_STDOUT, "%.*s", length, message);
+       return phpdbg_write("%s", message);
 } /* }}} */
 
-/* beginning of struct, see main/streams/plain_wrapper.c line 111 */
-typedef struct {
-       FILE *file;
-       int fd;
-} php_stdio_stream_data;
-
-static size_t phpdbg_stdiop_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC) {
-       php_stdio_stream_data *data = (php_stdio_stream_data*)stream->abstract;
-
-       while (data->fd >= 0) {
-               struct stat stat[3];
-               memset(stat, 0, sizeof(stat));
-               if (((fstat(fileno(stderr), &stat[2]) < 0) & (fstat(fileno(stdout), &stat[0]) < 0)) | (fstat(data->fd, &stat[1]) < 0)) {
-                       break;
-               }
-
-               if (stat[0].st_dev == stat[1].st_dev && stat[0].st_ino == stat[1].st_ino) {
-                       phpdbg_script(P_STDOUT, "%.*s", (int) count, buf);
-                       return count;
-               }
-               if (stat[2].st_dev == stat[1].st_dev && stat[2].st_ino == stat[1].st_ino) {
-                       phpdbg_script(P_STDERR, "%.*s", (int) count, buf);
-                       return count;
-               }
-               break;
-       }
-
-       return PHPDBG_G(php_stdiop_write)(stream, buf, count TSRMLS_CC);
-}
-
 #if PHP_VERSION_ID >= 50700
 static inline void php_sapi_phpdbg_flush(void *context TSRMLS_DC)  /* {{{ */
 {
@@ -659,9 +573,7 @@ static inline void php_sapi_phpdbg_flush(void *context)  /* {{{ */
        TSRMLS_FETCH();
 #endif
 
-       if (!phpdbg_active_sigsafe_mem(TSRMLS_C)) {
-               fflush(PHPDBG_G(io)[PHPDBG_STDOUT].ptr);
-       }
+       fflush(PHPDBG_G(io)[PHPDBG_STDOUT]);
 } /* }}} */
 
 /* copied from sapi/cli/php_cli.c cli_register_file_handles */
@@ -777,10 +689,9 @@ const opt_struct OPTIONS[] = { /* {{{ */
        {'r', 0, "run"},
        {'E', 0, "step-through-eval"},
        {'S', 1, "sapi-name"},
+#ifndef _WIN32
        {'l', 1, "listen"},
        {'a', 1, "address-or-any"},
-#if PHPDBG_IN_DEV
-       {'x', 0, "xml output"},
 #endif
        {'V', 0, "version"},
        {'-', 0, NULL}
@@ -814,25 +725,17 @@ static void phpdbg_welcome(zend_bool cleaning TSRMLS_DC) /* {{{ */
 {
        /* print blurb */
        if (!cleaning) {
-               phpdbg_xml("<intros>");
-               phpdbg_notice("intro", "version=\"%s\"", "Welcome to phpdbg, the interactive PHP debugger, v%s", PHPDBG_VERSION);
-               phpdbg_writeln("intro", "help=\"help\"", "To get help using phpdbg type \"help\" and press enter");
-               phpdbg_notice("intro", "report=\"%s\"", "Please report bugs to <%s>", PHPDBG_ISSUES);
-               phpdbg_xml("</intros>");
-       } else if (phpdbg_startup_run == 0) {
-               if (!(PHPDBG_G(flags) & PHPDBG_WRITE_XML)) {
-                       phpdbg_notice(NULL, NULL, "Clean Execution Environment");
-               }
+               phpdbg_notice("Welcome to phpdbg, the interactive PHP debugger, v%s",
+                               PHPDBG_VERSION);
+               phpdbg_writeln("To get help using phpdbg type \"help\" and press enter");
+               phpdbg_notice("Please report bugs to <%s>", PHPDBG_ISSUES);
+       } else {
+               phpdbg_notice("Clean Execution Environment");
 
-               phpdbg_write("cleaninfo", "classes=\"%d\" functions=\"%d\" constants=\"%d\" includes=\"%d\"",
-                       "Classes              %d\n"
-                       "Functions            %d\n"
-                       "Constants            %d\n"
-                       "Includes             %d\n",
-                       zend_hash_num_elements(EG(class_table)),
-                       zend_hash_num_elements(EG(function_table)),
-                       zend_hash_num_elements(EG(zend_constants)),
-                       zend_hash_num_elements(&EG(included_files)));
+               phpdbg_writeln("Classes\t\t\t%d", zend_hash_num_elements(EG(class_table)));
+               phpdbg_writeln("Functions\t\t%d", zend_hash_num_elements(EG(function_table)));
+               phpdbg_writeln("Constants\t\t%d", zend_hash_num_elements(EG(zend_constants)));
+               phpdbg_writeln("Includes\t\t%d",  zend_hash_num_elements(&EG(included_files)));
        }
 } /* }}} */
 
@@ -840,130 +743,163 @@ static inline void phpdbg_sigint_handler(int signo) /* {{{ */
 {
        TSRMLS_FETCH();
 
-       if (PHPDBG_G(flags) & PHPDBG_IS_INTERACTIVE) {
-               /* we quit remote consoles on recv SIGINT */
-               if (PHPDBG_G(flags) & PHPDBG_IS_REMOTE) {
-                       PHPDBG_G(flags) |= PHPDBG_IS_STOPPING;
-                       zend_bailout();
-               }
-       } else {
+       if (EG(in_execution)) {
                /* set signalled only when not interactive */
                if (!(PHPDBG_G(flags) & PHPDBG_IS_INTERACTIVE)) {
-                       if (PHPDBG_G(flags) & PHPDBG_IS_SIGNALED) {
-                               char mem[PHPDBG_SIGSAFE_MEM_SIZE + 1];
-
-                               phpdbg_set_sigsafe_mem(mem TSRMLS_CC);
-                               zend_try {
-                                       phpdbg_force_interruption(TSRMLS_C);
-                               } zend_end_try()
-                               phpdbg_clear_sigsafe_mem(TSRMLS_C);
-                               return;
-                       }
                        PHPDBG_G(flags) |= PHPDBG_IS_SIGNALED;
                }
+       } else {
+               /* we quit remote consoles on recv SIGINT */
+               if (PHPDBG_G(flags) & PHPDBG_IS_REMOTE) {
+                       PHPDBG_G(flags) |= PHPDBG_IS_QUITTING;
+                       zend_bailout();
+               }
        }
 } /* }}} */
 
+#ifndef _WIN32
+int phpdbg_open_socket(const char *interface, short port) /* {{{ */
+{
+       int fd = socket(AF_INET, SOCK_STREAM, 0);
+
+       switch (fd) {
+               case -1:
+                       return -1;
+
+               default: {
+                       int reuse = 1;
+
+                       switch (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*) &reuse, sizeof(reuse))) {
+                               case -1:
+                                       close(fd);
+                                       return -2;
+
+                               default: {
+                                       struct sockaddr_in address;
+
+                                       memset(&address, 0, sizeof(address));
+
+                                       address.sin_port = htons(port);
+                                       address.sin_family = AF_INET;
+
+                                       if ((*interface == '*')) {
+                                               address.sin_addr.s_addr = htonl(INADDR_ANY);
+                                       } else if (!inet_pton(AF_INET, interface, &address.sin_addr)) {
+                                               close(fd);
+                                               return -3;
+                                       }
 
-static void phpdbg_remote_close(int socket, FILE *stream) {
-       if (socket >= 0) {
-               phpdbg_close_socket(socket);
+                                       switch (bind(fd, (struct sockaddr *)&address, sizeof(address))) {
+                                               case -1:
+                                                       close(fd);
+                                                       return -4;
+
+                                               default: {
+                                                       listen(fd, 5);
+                                               }
+                                       }
+                               }
+                       }
+               }
        }
 
-       if (stream) {
-               fclose(stream);
+       return fd;
+} /* }}} */
+
+static inline void phpdbg_close_sockets(int (*socket)[2], FILE *streams[2]) /* {{{ */
+{
+       if ((*socket)[0] >= 0) {
+               shutdown(
+                       (*socket)[0], SHUT_RDWR);
+               close((*socket)[0]);
        }
-}
 
-/* don't inline this, want to debug it easily, will inline when done */
-static int phpdbg_remote_init(const char* address, unsigned short port, int server, int *socket, FILE **stream TSRMLS_DC) {
-       phpdbg_remote_close(*socket, *stream);
+       if (streams[0]) {
+               fclose(streams[0]);
+       }
 
-       if (server < 0) {
-               phpdbg_rlog(fileno(stderr), "Initializing connection on %s:%u failed", address, port);
+       if ((*socket)[1] >= 0) {
+               shutdown(
+                       (*socket)[1], SHUT_RDWR);
+               close((*socket)[1]);
+       }
 
-               return FAILURE;
+       if (streams[1]) {
+               fclose(streams[1]);
        }
+} /* }}} */
 
-       phpdbg_rlog(fileno(stderr), "accepting connections on %s:%u", address, port);
-       {
-               struct sockaddr_storage address;
-               socklen_t size = sizeof(address);
-               char buffer[20] = {0};
-               /* XXX error checks */
-               memset(&address, 0, size);
-               *socket = accept(server, (struct sockaddr *) &address, &size);
-               inet_ntop(AF_INET, &(((struct sockaddr_in *)&address)->sin_addr), buffer, sizeof(buffer));
+/* don't inline this, want to debug it easily, will inline when done */
 
-               phpdbg_rlog(fileno(stderr), "connection established from %s", buffer);
+int phpdbg_open_sockets(char *address, int port[2], int (*listen)[2], int (*socket)[2], FILE* streams[2]) /* {{{ */
+{
+       if (((*listen)[0]) < 0 && ((*listen)[1]) < 0) {
+               ((*listen)[0]) = phpdbg_open_socket(address, (short)port[0]);
+               ((*listen)[1]) = phpdbg_open_socket(address, (short)port[1]);
        }
 
-#ifndef _WIN32
-       dup2(*socket, fileno(stdout));
-       dup2(*socket, fileno(stdin));
+       streams[0] = NULL;
+       streams[1] = NULL;
 
-       setbuf(stdout, NULL);
+       if ((*listen)[0] < 0 || (*listen)[1] < 0) {
+               if ((*listen)[0] < 0) {
+                       phpdbg_rlog(stderr,
+                               "console failed to initialize (stdin) on %s:%d", address, port[0]);
+               }
 
-       *stream = fdopen(*socket, "r+");
+               if ((*listen)[1] < 0) {
+                       phpdbg_rlog(stderr,
+                               "console failed to initialize (stdout) on %s:%d", address, port[1]);
+               }
 
-       phpdbg_set_async_io(*socket);
-#endif
-       return SUCCESS;
-}
+               if ((*listen)[0] >= 0) {
+                       close((*listen)[0]);
+               }
 
-#ifndef _WIN32
-/* This function *strictly* assumes that SIGIO is *only* used on the remote connection stream */
-void phpdbg_sigio_handler(int sig, siginfo_t *info, void *context) /* {{{ */
-{
-       int flags;
-       size_t newlen;
-       size_t i/*, last_nl*/;
-       TSRMLS_FETCH();
+               if ((*listen)[1] >= 0) {
+                       close((*listen)[1]);
+               }
 
-//     if (!(info->si_band & POLLIN)) {
-//             return; /* Not interested in writeablility etc., just interested in incoming data */
-//     }
+               return FAILURE;
+       }
 
-       /* only non-blocking reading, avoid non-blocking writing */
-       flags = fcntl(PHPDBG_G(io)[PHPDBG_STDIN].fd, F_GETFL, 0);
-       fcntl(PHPDBG_G(io)[PHPDBG_STDIN].fd, F_SETFL, flags | O_NONBLOCK);
+       phpdbg_close_sockets(socket, streams);
+
+       phpdbg_rlog(stderr,
+               "accepting connections on %s:%d/%d", address, port[0], port[1]);
+       {
+               struct sockaddr_in address;
+               socklen_t size = sizeof(address);
+               char buffer[20] = {0};
 
-       do {
-               char mem[PHPDBG_SIGSAFE_MEM_SIZE + 1];
-               size_t off = 0;
+               {
+                       memset(&address, 0, size);
+                       (*socket)[0] = accept(
+                               (*listen)[0], (struct sockaddr *) &address, &size);
+                       inet_ntop(AF_INET, &address.sin_addr, buffer, sizeof(buffer));
 
-               if ((newlen = recv(PHPDBG_G(io)[PHPDBG_STDIN].fd, mem, PHPDBG_SIGSAFE_MEM_SIZE, MSG_PEEK)) == (size_t) -1) {
-                       break;
+                       phpdbg_rlog(stderr, "connection (stdin) from %s", buffer);
                }
-               for (i = 0; i < newlen; i++) {
-                       switch (mem[off + i]) {
-                               case '\x03': /* ^C char */
-                                       if (PHPDBG_G(flags) & PHPDBG_IS_INTERACTIVE) {
-                                               break; /* or quit ??? */
-                                       }
-                                       if (PHPDBG_G(flags) & PHPDBG_IS_SIGNALED) {
-                                               phpdbg_set_sigsafe_mem(mem TSRMLS_CC);
-                                               zend_try {
-                                                       phpdbg_force_interruption(TSRMLS_C);
-                                               } zend_end_try();
-                                               phpdbg_clear_sigsafe_mem(TSRMLS_C);
-                                               break;
-                                       }
-                                       if (!(PHPDBG_G(flags) & PHPDBG_IS_INTERACTIVE)) {
-                                               PHPDBG_G(flags) |= PHPDBG_IS_SIGNALED;
-                                       }
-                                       break;
-/*                             case '\n':
-                                       zend_llist_add_element(PHPDBG_G(stdin), strndup()
-                                       last_nl = PHPDBG_G(stdin_buf).len + i;
-                                       break;
-*/                     }
+
+               {
+                       memset(&address, 0, size);
+                       (*socket)[1] = accept(
+                               (*listen)[1], (struct sockaddr *) &address, &size);
+                   inet_ntop(AF_INET, &address.sin_addr, buffer, sizeof(buffer));
+
+                       phpdbg_rlog(stderr, "connection (stdout) from %s", buffer);
                }
-               off += i;
-       } while (0);
+       }
 
+       dup2((*socket)[0], fileno(stdin));
+       dup2((*socket)[1], fileno(stdout));
 
-       fcntl(PHPDBG_G(io)[PHPDBG_STDIN].fd, F_SETFL, flags);
+       setbuf(stdout, NULL);
+
+       streams[0] = fdopen((*socket)[0], "r");
+       streams[1] = fdopen((*socket)[1], "w");
+
+       return SUCCESS;
 } /* }}} */
 
 void phpdbg_signal_handler(int sig, siginfo_t *info, void *context) /* {{{ */
@@ -974,9 +910,6 @@ void phpdbg_signal_handler(int sig, siginfo_t *info, void *context) /* {{{ */
        switch (sig) {
                case SIGBUS:
                case SIGSEGV:
-                       if (PHPDBG_G(sigsegv_bailout)) {
-                               LONGJMP(*PHPDBG_G(sigsegv_bailout), FAILURE);
-                       }
                        is_handled = phpdbg_watchpoint_segfault_handler(info, context TSRMLS_CC);
                        if (is_handled == FAILURE) {
 #ifdef ZEND_SIGNALS
@@ -1028,7 +961,8 @@ int main(int argc, char **argv) /* {{{ */
        zend_ulong zend_extensions_len = 0L;
        zend_bool ini_ignore;
        char *ini_override;
-       char *exec = NULL;
+       char *exec;
+       size_t exec_len;
        char *init_file;
        size_t init_file_len;
        zend_bool init_file_default;
@@ -1037,31 +971,44 @@ int main(int argc, char **argv) /* {{{ */
        zend_ulong flags;
        char *php_optarg;
        int php_optind, opt, show_banner = 1;
-       long cleaning = -1;
+       long cleaning = 0;
        zend_bool remote = 0;
+       int run = 0;
        int step = 0;
-       zend_phpdbg_globals *settings = NULL;
-       char *bp_tmp = NULL;
+
+#ifdef _WIN32
+       char *bp_tmp_file = NULL;
+#else
+       char bp_tmp_file[] = "/tmp/phpdbg.XXXXXX";
+#endif
+
+#ifndef _WIN32
        char *address;
-       int listen = -1;
-       int server = -1;
-       int socket = -1;
-       FILE* stream = NULL;
+       int listen[2];
+       int server[2];
+       int socket[2];
+       FILE* streams[2] = {NULL, NULL};
+#endif
 
 #ifdef ZTS
        void ***tsrm_ls;
 #endif
 
 #ifndef _WIN32
-       struct sigaction sigio_struct;
        struct sigaction signal_struct;
        signal_struct.sa_sigaction = phpdbg_signal_handler;
        signal_struct.sa_flags = SA_SIGINFO | SA_NODEFER;
-       sigio_struct.sa_sigaction = phpdbg_sigio_handler;
-       sigio_struct.sa_flags = SA_SIGINFO;
-#endif
 
        address = strdup("127.0.0.1");
+       socket[0] = -1;
+       socket[1] = -1;
+       listen[0] = -1;
+       listen[1] = -1;
+       server[0] = -1;
+       server[1] = -1;
+       streams[0] = NULL;
+       streams[1] = NULL;
+#endif
 
 #ifdef PHP_WIN32
        _fmode = _O_BINARY;                 /* sets default for file streams to binary */
@@ -1077,12 +1024,37 @@ int main(int argc, char **argv) /* {{{ */
 #endif
 
 phpdbg_main:
+       if (!cleaning) {
+       
+#ifdef _WIN32
+               bp_tmp_file = malloc(L_tmpnam);
+
+               if (bp_tmp_file) {
+                       if (!tmpnam(bp_tmp_file)) {
+                               free(bp_tmp_file);
+                               bp_tmp_file = NULL;
+                       }
+               }
+
+               if (!bp_tmp_file) {
+                       phpdbg_error("Unable to create temporary file");
+                       return 1;
+               }
+#else
+               if (!mkstemp(bp_tmp_file)) {
+                       memset(bp_tmp_file, 0, sizeof(bp_tmp_file));
+               }
+#endif
+
+       }
        ini_entries = NULL;
        ini_entries_len = 0;
        ini_ignore = 0;
        ini_override = NULL;
        zend_extensions = NULL;
        zend_extensions_len = 0L;
+       exec = NULL;
+       exec_len = 0;
        init_file = NULL;
        init_file_len = 0;
        init_file_default = 1;
@@ -1092,16 +1064,14 @@ phpdbg_main:
        php_optarg = NULL;
        php_optind = 1;
        opt = 0;
+       run = 0;
        step = 0;
        sapi_name = NULL;
-       if (settings) {
-               exec = settings->exec;
-       }
 
        while ((opt = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0, 2)) != -1) {
                switch (opt) {
                        case 'r':
-                               phpdbg_startup_run++;
+                               run++;
                                break;
                        case 'n':
                                ini_ignore = 1;
@@ -1201,12 +1171,21 @@ phpdbg_main:
                                show_banner = 0;
                        break;
 
-                       /* if you pass a listen port, we will read and write on listen port */
-                       case 'l': /* set listen ports */
-                               if (sscanf(php_optarg, "%d", &listen) != 1) {
-                                       listen = 8000;
+#ifndef _WIN32
+                       /* if you pass a listen port, we will accept input on listen port */
+                       /* and write output to listen port * 2 */
+
+                       case 'l': { /* set listen ports */
+                               if (sscanf(php_optarg, "%d/%d", &listen[0], &listen[1]) != 2) {
+                                       if (sscanf(php_optarg, "%d", &listen[0]) != 1) {
+                                               /* default to hardcoded ports */
+                                               listen[0] = 4000;
+                                               listen[1] = 8000;
+                                       } else {
+                                               listen[1] = (listen[0] * 2);
+                                       }
                                }
-                               break;
+                       } break;
 
                        case 'a': { /* set bind address */
                                free(address);
@@ -1214,12 +1193,7 @@ phpdbg_main:
                                        address = strdup("*");
                                } else address = strdup(php_optarg);
                        } break;
-
-#if PHPDBG_IN_DEV
-                       case 'x':
-                               flags |= PHPDBG_WRITE_XML;
 #endif
-                       break;
 
                        case 'V': {
                                sapi_startup(phpdbg);
@@ -1240,8 +1214,10 @@ phpdbg_main:
        }
        
        /* set exec if present on command line */
-       if (!exec && (argc > php_optind) && (strcmp(argv[php_optind-1], "--") != SUCCESS)) {
-               if (strlen(argv[php_optind])) {
+       if ((argc > php_optind) && (strcmp(argv[php_optind-1],"--") != SUCCESS))
+       {
+               exec_len = strlen(argv[php_optind]);
+               if (exec_len) {
                        if (exec) {
                                free(exec);
                        }
@@ -1250,6 +1226,19 @@ phpdbg_main:
                php_optind++;
        }
 
+#ifndef _WIN32
+       /* setup remote server if necessary */
+       if (!cleaning &&
+               (listen[0] > 0 && listen[1] > 0)) {
+               if (phpdbg_open_sockets(address, listen, &server, &socket, streams) == FAILURE) {
+                       remote = 0;
+                       exit(0);
+               }
+               /* set remote flag to stop service shutting down upon quit */
+               remote = 1;
+       }
+#endif
+
        if (sapi_name) {
                phpdbg->name = sapi_name;
        }
@@ -1304,35 +1293,7 @@ phpdbg_main:
     EXCEPTION_POINTERS *xp;
     __try {
 #endif
-               zend_mm_heap *mm_heap;
-
-               /* set flags from command line */
-               PHPDBG_G(flags) = flags;
-
-               if (settings) {
-#ifdef ZTS
-                       *((zend_phpdbg_globals *) (*((void ***) tsrm_ls))[TSRM_UNSHUFFLE_RSRC_ID(phpdbg_globals_id)]) = *settings;
-#else
-                       phpdbg_globals = *settings;
-#endif
-               }
-
-               /* setup remote server if necessary */
-               if (cleaning <= 0 && listen > 0) {
-                       server = phpdbg_open_socket(address, listen TSRMLS_CC);
-                               if (-1 > server || phpdbg_remote_init(address, listen, server, &socket, &stream TSRMLS_CC) == FAILURE) {
-                               exit(0);
-                       }
-
-#ifndef _WIN32
-                       sigaction(SIGIO, &sigio_struct, NULL);
-#endif
-
-                       /* set remote flag to stop service shutting down upon quit */
-                       remote = 1;
-               }
-
-               mm_heap = phpdbg_mm_get_heap();
+               zend_mm_heap *mm_heap = phpdbg_mm_get_heap();
 
                if (mm_heap->use_zend_alloc) {
                        mm_heap->_malloc = phpdbg_malloc_wrapper;
@@ -1343,8 +1304,6 @@ phpdbg_main:
 
                zend_activate(TSRMLS_C);
 
-               phpdbg_init_list(TSRMLS_C);
-
                PHPDBG_G(original_free_function) = mm_heap->_free;
                mm_heap->_free = phpdbg_watch_efree;
 
@@ -1364,30 +1323,27 @@ phpdbg_main:
                sigaction(SIGBUS, &signal_struct, &PHPDBG_G(old_sigsegv_signal));
 #endif
 
-               PHPDBG_G(sapi_name_ptr) = sapi_name;
-
-               php_output_activate(TSRMLS_C);
-               php_output_deactivate(TSRMLS_C);
-
-               php_output_activate(TSRMLS_C);
-
                if (php_request_startup(TSRMLS_C) == SUCCESS) {
                        int i;
-
-                       SG(request_info).argc = argc - php_optind + 1;
+               
+                       SG(request_info).argc = argc - php_optind + 1;          
                        SG(request_info).argv = emalloc(SG(request_info).argc * sizeof(char *));
                        for (i = SG(request_info).argc; --i;) {
                                SG(request_info).argv[i] = estrdup(argv[php_optind - 1 + i]);
                        }
-                       SG(request_info).argv[i] = exec ? estrdup(exec) : estrdup("");
+                       SG(request_info).argv[i] = exec ? estrndup(exec, exec_len) : estrdup("");
 
                        php_hash_environment(TSRMLS_C);
                }
 
+               /* make sure to turn off buffer for ev command */
+               php_output_activate(TSRMLS_C);
+               php_output_deactivate(TSRMLS_C);
+               
                /* do not install sigint handlers for remote consoles */
                /* sending SIGINT then provides a decent way of shutting down the server */
 #ifndef _WIN32
-               if (listen < 0) {
+               if (listen[0] < 0) {
 #endif
 #if defined(ZEND_SIGNALS) && !defined(_WIN32)
                        zend_try { zend_signal(SIGINT, phpdbg_sigint_handler TSRMLS_CC); } zend_end_try();
@@ -1400,57 +1356,34 @@ phpdbg_main:
 
                PG(modules_activated) = 0;
 
+               /* set flags from command line */
+               PHPDBG_G(flags) = flags;
+
+#ifndef _WIN32
                /* setup io here */
-               if (remote) {
+               if (streams[0] && streams[1]) {
                        PHPDBG_G(flags) |= PHPDBG_IS_REMOTE;
-#ifndef _WIN32
-                       signal(SIGPIPE, SIG_IGN);
-#endif
-               }
 
-#ifndef _WIN32
-               PHPDBG_G(io)[PHPDBG_STDIN].ptr = stdin;
-               PHPDBG_G(io)[PHPDBG_STDIN].fd = fileno(stdin);
-               PHPDBG_G(io)[PHPDBG_STDOUT].ptr = stdout;
-               PHPDBG_G(io)[PHPDBG_STDOUT].fd = fileno(stdout);
-#else
-               /* XXX this is a complete mess here with FILE/fd/SOCKET,
-                       we should let only one to survive probably. Need 
-                       a clean separation whether it's a remote or local
-                       prompt. And what is supposed to go as user interaction,
-                       error log, etc. */
-               if (remote) {
-                       PHPDBG_G(io)[PHPDBG_STDIN].ptr = stdin;
-                       PHPDBG_G(io)[PHPDBG_STDIN].fd = socket;
-                       PHPDBG_G(io)[PHPDBG_STDOUT].ptr = stdout;
-                       PHPDBG_G(io)[PHPDBG_STDOUT].fd = socket;
-               } else {
-                       PHPDBG_G(io)[PHPDBG_STDIN].ptr = stdin;
-                       PHPDBG_G(io)[PHPDBG_STDIN].fd = fileno(stdin);
-                       PHPDBG_G(io)[PHPDBG_STDOUT].ptr = stdout;
-                       PHPDBG_G(io)[PHPDBG_STDOUT].fd = fileno(stdout);
+                       signal(SIGPIPE, SIG_IGN);
                }
 #endif
-               PHPDBG_G(io)[PHPDBG_STDERR].ptr = stderr;
-               PHPDBG_G(io)[PHPDBG_STDERR].fd = fileno(stderr);
 
-#ifndef _WIN32
-               PHPDBG_G(php_stdiop_write) = php_stream_stdio_ops.write;
-               php_stream_stdio_ops.write = phpdbg_stdiop_write;
-#endif
+               PHPDBG_G(io)[PHPDBG_STDIN] = stdin;
+               PHPDBG_G(io)[PHPDBG_STDOUT] = stdout;
+               PHPDBG_G(io)[PHPDBG_STDERR] = stderr;
 
                if (exec) { /* set execution context */
                        PHPDBG_G(exec) = phpdbg_resolve_path(exec TSRMLS_CC);
-                       PHPDBG_G(exec_len) = PHPDBG_G(exec) ? strlen(PHPDBG_G(exec)) : 0;
+                       PHPDBG_G(exec_len) = strlen(PHPDBG_G(exec));
 
                        free(exec);
-                       exec = NULL;
                }
 
                if (oplog_file) { /* open oplog */
                        PHPDBG_G(oplog) = fopen(oplog_file, "w+");
                        if (!PHPDBG_G(oplog)) {
-                               phpdbg_error("oplog", "path=\"%s\"", "Failed to open oplog %s", oplog_file);
+                               phpdbg_error(
+                                               "Failed to open oplog %s", oplog_file);
                        }
                        free(oplog_file);
                }
@@ -1461,29 +1394,26 @@ phpdbg_main:
                phpdbg_set_color_ex(PHPDBG_COLOR_NOTICE,  PHPDBG_STRL("green") TSRMLS_CC);
 
                /* set default prompt */
-               phpdbg_set_prompt(PHPDBG_DEFAULT_PROMPT TSRMLS_CC);
+               phpdbg_set_prompt(PROMPT TSRMLS_CC);
 
                /* Make stdin, stdout and stderr accessible from PHP scripts */
                phpdbg_register_file_handles(TSRMLS_C);
 
-               if (show_banner && cleaning < 2) {
+               if (show_banner) {
                        /* print blurb */
-                       phpdbg_welcome(cleaning == 1 TSRMLS_CC);
+                       phpdbg_welcome((cleaning > 0) TSRMLS_CC);
                }
 
-               cleaning = -1;
+               /* auto compile */
+               if (PHPDBG_G(exec)) {
+                       phpdbg_compile(TSRMLS_C);
+               }
 
                /* initialize from file */
                PHPDBG_G(flags) |= PHPDBG_IS_INITIALIZING;
                zend_try {
                        phpdbg_init(init_file, init_file_len, init_file_default TSRMLS_CC);
-                       if (bp_tmp) {
-                               PHPDBG_G(flags) |= PHPDBG_DISCARD_OUTPUT;
-                               phpdbg_string_init(bp_tmp TSRMLS_CC);
-                               free(bp_tmp);
-                               bp_tmp = NULL;
-                               PHPDBG_G(flags) &= ~PHPDBG_DISCARD_OUTPUT;
-                       }
+                       phpdbg_try_file_init(bp_tmp_file, strlen(bp_tmp_file), 0 TSRMLS_CC);
                } zend_end_try();
                PHPDBG_G(flags) &= ~PHPDBG_IS_INITIALIZING;
                
@@ -1492,61 +1422,50 @@ phpdbg_main:
                        goto phpdbg_out;
                }
 
-               /* auto compile */
-               if (PHPDBG_G(exec)) {
-                       if (settings) {
-                               PHPDBG_G(flags) |= PHPDBG_DISCARD_OUTPUT;
-                       }
-                       phpdbg_compile(TSRMLS_C);
-                       PHPDBG_G(flags) &= ~PHPDBG_DISCARD_OUTPUT;
-               }
-
                /* step from here, not through init */
                if (step) {
                        PHPDBG_G(flags) |= PHPDBG_IS_STEPPING;
                }
 
+               if (run) {
+                       /* no need to try{}, run does it ... */
+                       PHPDBG_COMMAND_HANDLER(run)(NULL TSRMLS_CC);
+                       if (run > 1) {
+                               /* if -r is on the command line more than once just quit */
+                               goto phpdbg_out;
+                       }
+               }
+
+/* #ifndef for making compiler shutting up */
+#ifndef _WIN32
 phpdbg_interact:
+#endif
                /* phpdbg main() */
                do {
                        zend_try {
-                               if (phpdbg_startup_run) {
-                                       zend_bool quit_immediately = phpdbg_startup_run > 1;
-                                       phpdbg_startup_run = 0;
-                                       PHPDBG_COMMAND_HANDLER(run)(NULL TSRMLS_CC);
-                                       if (quit_immediately) {
-                                               /* if -r is on the command line more than once just quit */
-                                               EG(bailout) = __orig_bailout; /* reset zend_try */
-                                               break;
-                                       }
-                               }
-
-                               phpdbg_interactive(1 TSRMLS_CC);
+                               phpdbg_interactive(TSRMLS_C);
                        } zend_catch {
                                if ((PHPDBG_G(flags) & PHPDBG_IS_CLEANING)) {
-                                       char *bp_tmp_str;
-                                       PHPDBG_G(flags) |= PHPDBG_DISCARD_OUTPUT;
-                                       phpdbg_export_breakpoints_to_string(&bp_tmp_str TSRMLS_CC);
-                                       PHPDBG_G(flags) &= ~PHPDBG_DISCARD_OUTPUT;
-                                       if (bp_tmp_str) {
-                                               bp_tmp = strdup(bp_tmp_str);
-                                               efree(bp_tmp_str);
-                                       }
+                                       FILE *bp_tmp_fp = fopen(bp_tmp_file, "w");
+                                       phpdbg_export_breakpoints(bp_tmp_fp TSRMLS_CC);
+                                       fclose(bp_tmp_fp);
                                        cleaning = 1;
                                } else {
                                        cleaning = 0;
                                }
 
+#ifndef _WIN32
                                if (!cleaning) {
                                        /* remote client disconnected */
                                        if ((PHPDBG_G(flags) & PHPDBG_IS_DISCONNECTED)) {
                                        
                                                if (PHPDBG_G(flags) & PHPDBG_IS_REMOTE) {
                                                        /* renegociate connections */
-                                                       phpdbg_remote_init(address, listen, server, &socket, &stream TSRMLS_CC);
+                                                       phpdbg_open_sockets(
+                                                               address, listen, &server, &socket, streams);
                                
                                                        /* set streams */
-                                                       if (stream) {
+                                                       if (streams[0] && streams[1]) {
                                                                PHPDBG_G(flags) &= ~PHPDBG_IS_QUITTING;
                                                        }
                                
@@ -1558,37 +1477,31 @@ phpdbg_interact:
                                                }
                                        }
                                }
+#endif
                        } zend_end_try();
-               } while (!(PHPDBG_G(flags) & PHPDBG_IS_STOPPING));
-
-
-               if (PHPDBG_G(exec) && (PHPDBG_G(flags) & PHPDBG_IS_CLEANING)) {
-                       exec = strdup(PHPDBG_G(exec)); /* preserve exec, don't reparse that from cmd */
-               }
-
+               } while(!cleaning && !(PHPDBG_G(flags) & PHPDBG_IS_QUITTING));
+               
                /* this must be forced */
                CG(unclean_shutdown) = 0;
                
                /* this is just helpful */
                PG(report_memleaks) = 0;
                
+#ifndef _WIN32
 phpdbg_out:
                if ((PHPDBG_G(flags) & PHPDBG_IS_DISCONNECTED)) {
                        PHPDBG_G(flags) &= ~PHPDBG_IS_DISCONNECTED;
                        goto phpdbg_interact;
                }
+#endif
 
 #ifdef _WIN32
        } __except(phpdbg_exception_handler_win32(xp = GetExceptionInformation())) {
-               phpdbg_error("segfault", "", "Access violation (Segmentation fault) encountered\ntrying to abort cleanly...");
+               phpdbg_error("Access violation (Segementation fault) encountered\ntrying to abort cleanly...");
        }
+phpdbg_out:
 #endif
-
-               if (cleaning <= 0) {
-                       PHPDBG_G(flags) &= ~PHPDBG_IS_CLEANING;
-                       cleaning = -1;
-               }
-
+       
                {
                        int i;
                        /* free argv */
@@ -1598,15 +1511,11 @@ phpdbg_out:
                        efree(SG(request_info).argv);
                }
 
-#ifndef _WIN32
-               /* reset it... else we risk a stack overflow upon next run (when clean'ing) */
-               php_stream_stdio_ops.write = PHPDBG_G(php_stdiop_write);
-#endif
-
 #ifndef ZTS
                /* force cleanup of auto and core globals */
                zend_hash_clean(CG(auto_globals));
-               memset( &core_globals, 0, sizeof(php_core_globals));
+               memset(
+                       &core_globals, 0, sizeof(php_core_globals));
 #endif
                if (ini_entries) {
                        free(ini_entries);
@@ -1615,34 +1524,14 @@ phpdbg_out:
                if (ini_override) {
                        free(ini_override);
                }
-
+               
                /* this must be forced */
                CG(unclean_shutdown) = 0;
-
+               
                /* this is just helpful */
                PG(report_memleaks) = 0;
 
-               if ((PHPDBG_G(flags) & (PHPDBG_IS_CLEANING | PHPDBG_IS_RUNNING)) == PHPDBG_IS_CLEANING) {
-                       php_free_shutdown_functions(TSRMLS_C);
-                       zend_objects_store_mark_destructed(&EG(objects_store) TSRMLS_CC);
-               }
-
-               /* sapi_module.deactivate is where to backup things, last chance before mm_shutdown... */
-
-               zend_try {
-                       php_request_shutdown(NULL);
-               } zend_end_try();
-
-               if ((PHPDBG_G(flags) & (PHPDBG_IS_QUITTING | PHPDBG_IS_RUNNING)) == PHPDBG_IS_RUNNING) {
-                       phpdbg_notice("stop", "type=\"normal\"", "Script ended normally");
-                       cleaning++;
-               }
-
-               if ((PHPDBG_G(flags) & PHPDBG_IS_STOPPING) == PHPDBG_IS_CLEANING) {
-                       settings = PHPDBG_G(backup);
-               }
-
-               php_output_deactivate(TSRMLS_C);
+               php_request_shutdown((void*)0);
 
                zend_try {
                        php_module_shutdown(TSRMLS_C);
@@ -1652,10 +1541,10 @@ phpdbg_out:
 
        }
 
-       if (cleaning > 0 || remote) {
+       if (cleaning || remote) {
                goto phpdbg_main;
        }
-
+       
 #ifdef ZTS
        /* bugggy */
        /* tsrm_shutdown(); */
@@ -1667,9 +1556,15 @@ phpdbg_out:
        }
 #endif
 
-       if (PHPDBG_G(sapi_name_ptr)) {
-               free(PHPDBG_G(sapi_name_ptr));
+       if (sapi_name) {
+               free(sapi_name);
        }
+       
+#ifdef _WIN32
+       free(bp_tmp_file);
+#else
+       unlink(bp_tmp_file);
+#endif
 
        return 0;
 } /* }}} */
index a0ba75e4d478ffa4dd9d25377aa4f3375ae3ee5f..eb4faf1f94282b28df13796556fe1d3fe115cdd2 100644 (file)
@@ -21,8 +21,6 @@
 #ifndef PHPDBG_H
 #define PHPDBG_H
 
-#define PHPDBG_IN_DEV 0
-
 #ifdef PHP_WIN32
 # define PHPDBG_API __declspec(dllexport)
 #elif defined(__GNUC__) && __GNUC__ >= 4
 # define PHPDBG_API
 #endif
 
-#ifndef PHP_WIN32
-#      include <stdint.h>
-#      include <stddef.h>
-#else
-#      include "win32/php_stdint.h"
-#endif
 #include "php.h"
 #include "php_globals.h"
 #include "php_variables.h"
 #include "zend_ini_scanner.h"
 #include "zend_stream.h"
 #ifndef _WIN32
-#      include "zend_signal.h"
+# include "zend_signal.h"
 #endif
 #include "SAPI.h"
 #include <fcntl.h>
 #include <sys/types.h>
 #if defined(_WIN32) && !defined(__MINGW32__)
-#      include <windows.h>
-#      include "config.w32.h"
-#      undef  strcasecmp
-#      undef  strncasecmp
-#      define strcasecmp _stricmp 
-#      define strncasecmp _strnicmp 
+# include <windows.h>
+# include "config.w32.h"
+# undef  strcasecmp
+# undef  strncasecmp
+# define strcasecmp _stricmp 
+# define strncasecmp _strnicmp 
 #else
-#      include "php_config.h"
+# include "php_config.h"
 #endif
 #ifndef O_BINARY
 #      define O_BINARY 0
 # include "TSRM.h"
 #endif
 
-#ifdef HAVE_LIBREADLINE
-#      include <readline/readline.h>
-#      include <readline/history.h>
+#ifdef LIBREADLINE
+#   include <readline/readline.h>
+#   include <readline/history.h>
 #endif
 #ifdef HAVE_LIBEDIT
-#      include <editline/readline.h>
+#   include <editline/readline.h>
 #endif
 
-/* {{{ remote console headers */
-#ifndef _WIN32
-#      include <sys/socket.h>
-#      include <sys/un.h>
-#      include <sys/select.h>
-#      include <sys/types.h>
-#      include <netdb.h>
-#endif /* }}} */
-
-/* {{{ strings */
-#define PHPDBG_NAME "phpdbg"
-#define PHPDBG_AUTHORS "Felipe Pena, Joe Watkins and Bob Weinand" /* Ordered by last name */
-#define PHPDBG_URL "http://phpdbg.com"
-#define PHPDBG_ISSUES "http://github.com/krakjoe/phpdbg/issues"
-#define PHPDBG_VERSION "0.4.0"
-#define PHPDBG_INIT_FILENAME ".phpdbginit"
-#define PHPDBG_DEFAULT_PROMPT "prompt>"
-/* }}} */
-
-/* Hey, apple. One shouldn't define *functions* from the standard C library as marcos. */
-#ifdef memcpy
-#define memcpy_tmp(...) memcpy(__VA_ARGS__)
-#undef memcpy
-#define memcpy(...) memcpy_tmp(__VA_ARGS__)
-#endif
-
-#if !defined(PHPDBG_WEBDATA_TRANSFER_H) && !defined(PHPDBG_WEBHELPER_H)
-
-#ifdef ZTS
-# define PHPDBG_G(v) TSRMG(phpdbg_globals_id, zend_phpdbg_globals *, v)
-#else
-# define PHPDBG_G(v) (phpdbg_globals.v)
-#endif
-
-#include "phpdbg_sigsafe.h"
-#include "phpdbg_out.h"
 #include "phpdbg_lexer.h"
 #include "phpdbg_cmd.h"
 #include "phpdbg_utils.h"
 #include "phpdbg_btree.h"
 #include "phpdbg_watch.h"
-#include "phpdbg_bp.h"
-#ifdef PHP_WIN32
-# include "phpdbg_sigio_win32.h"
-#endif
 
 int phpdbg_do_parse(phpdbg_param_t *stack, char *input TSRMLS_DC);
 
+#ifdef ZTS
+# define PHPDBG_G(v) TSRMG(phpdbg_globals_id, zend_phpdbg_globals *, v)
+#else
+# define PHPDBG_G(v) (phpdbg_globals.v)
+#endif
+
 #define PHPDBG_NEXT   2
 #define PHPDBG_UNTIL  3
 #define PHPDBG_FINISH 4
@@ -137,87 +95,84 @@ int phpdbg_do_parse(phpdbg_param_t *stack, char *input TSRMLS_DC);
  BEGIN: DO NOT CHANGE DO NOT CHANGE DO NOT CHANGE
 */
 
+/* {{{ tables */
+#define PHPDBG_BREAK_FILE            0
+#define PHPDBG_BREAK_SYM             1
+#define PHPDBG_BREAK_OPLINE          2
+#define PHPDBG_BREAK_METHOD          3
+#define PHPDBG_BREAK_COND            4
+#define PHPDBG_BREAK_OPCODE          5
+#define PHPDBG_BREAK_FUNCTION_OPLINE 6
+#define PHPDBG_BREAK_METHOD_OPLINE   7
+#define PHPDBG_BREAK_FILE_OPLINE     8
+#define PHPDBG_BREAK_MAP             9
+#define PHPDBG_BREAK_TABLES          10 /* }}} */
+
 /* {{{ flags */
-#define PHPDBG_HAS_FILE_BP            (1ULL<<1)
-#define PHPDBG_HAS_PENDING_FILE_BP    (1ULL<<2)
-#define PHPDBG_HAS_SYM_BP             (1ULL<<3)
-#define PHPDBG_HAS_OPLINE_BP          (1ULL<<4)
-#define PHPDBG_HAS_METHOD_BP          (1ULL<<5)
-#define PHPDBG_HAS_COND_BP            (1ULL<<6)
-#define PHPDBG_HAS_OPCODE_BP          (1ULL<<7)
-#define PHPDBG_HAS_FUNCTION_OPLINE_BP (1ULL<<8)
-#define PHPDBG_HAS_METHOD_OPLINE_BP   (1ULL<<9)
-#define PHPDBG_HAS_FILE_OPLINE_BP     (1ULL<<10) /* }}} */
+#define PHPDBG_HAS_FILE_BP            (1<<1)
+#define PHPDBG_HAS_SYM_BP             (1<<2)
+#define PHPDBG_HAS_OPLINE_BP          (1<<3)
+#define PHPDBG_HAS_METHOD_BP          (1<<4)
+#define PHPDBG_HAS_COND_BP            (1<<5)
+#define PHPDBG_HAS_OPCODE_BP          (1<<6)
+#define PHPDBG_HAS_FUNCTION_OPLINE_BP (1<<7)
+#define PHPDBG_HAS_METHOD_OPLINE_BP   (1<<8)
+#define PHPDBG_HAS_FILE_OPLINE_BP     (1<<9) /* }}} */
 
 /*
  END: DO NOT CHANGE DO NOT CHANGE DO NOT CHANGE
 */
 
-#define PHPDBG_IN_COND_BP             (1ULL<<11)
-#define PHPDBG_IN_EVAL                (1ULL<<12)
-
-#define PHPDBG_IS_STEPPING            (1ULL<<13)
-#define PHPDBG_STEP_OPCODE            (1ULL<<14)
-#define PHPDBG_IS_QUIET               (1ULL<<15)
-#define PHPDBG_IS_QUITTING            (1ULL<<16)
-#define PHPDBG_IS_COLOURED            (1ULL<<17)
-#define PHPDBG_IS_CLEANING            (1ULL<<18)
-#define PHPDBG_IS_RUNNING             (1ULL<<19)
+#define PHPDBG_IN_COND_BP             (1<<10)
+#define PHPDBG_IN_EVAL                (1<<11)
 
-#define PHPDBG_IN_UNTIL               (1ULL<<20)
-#define PHPDBG_IN_FINISH              (1ULL<<21)
-#define PHPDBG_IN_LEAVE               (1ULL<<22)
+#define PHPDBG_IS_STEPPING            (1<<12)
+#define PHPDBG_STEP_OPCODE            (1<<13)
+#define PHPDBG_IS_QUIET               (1<<14)
+#define PHPDBG_IS_QUITTING            (1<<15)
+#define PHPDBG_IS_COLOURED            (1<<16)
+#define PHPDBG_IS_CLEANING            (1<<17)
 
-#define PHPDBG_IS_REGISTERED          (1ULL<<23)
-#define PHPDBG_IS_STEPONEVAL          (1ULL<<24)
-#define PHPDBG_IS_INITIALIZING        (1ULL<<25)
-#define PHPDBG_IS_SIGNALED            (1ULL<<26)
-#define PHPDBG_IS_INTERACTIVE         (1ULL<<27)
-#define PHPDBG_IS_BP_ENABLED          (1ULL<<28)
-#define PHPDBG_IS_REMOTE              (1ULL<<29)
-#define PHPDBG_IS_DISCONNECTED        (1ULL<<30)
-#define PHPDBG_WRITE_XML              (1ULL<<31)
+#define PHPDBG_IN_UNTIL               (1<<18)
+#define PHPDBG_IN_FINISH              (1<<19)
+#define PHPDBG_IN_LEAVE               (1<<20)
 
-#define PHPDBG_SHOW_REFCOUNTS         (1ULL<<32)
+#define PHPDBG_IS_REGISTERED          (1<<21)
+#define PHPDBG_IS_STEPONEVAL          (1<<22)
+#define PHPDBG_IS_INITIALIZING        (1<<23)
+#define PHPDBG_IS_SIGNALED            (1<<24)
+#define PHPDBG_IS_INTERACTIVE         (1<<25)
+#define PHPDBG_IS_BP_ENABLED          (1<<26)
+#define PHPDBG_IS_REMOTE              (1<<27)
+#define PHPDBG_IS_DISCONNECTED        (1<<28)
 
-#define PHPDBG_IN_SIGNAL_HANDLER      (1ULL<<33)
+#define PHPDBG_SHOW_REFCOUNTS         (1<<29)
 
-#define PHPDBG_DISCARD_OUTPUT         (1ULL<<34)
-
-#define PHPDBG_SEEK_MASK              (PHPDBG_IN_UNTIL | PHPDBG_IN_FINISH | PHPDBG_IN_LEAVE)
-#define PHPDBG_BP_RESOLVE_MASK       (PHPDBG_HAS_FUNCTION_OPLINE_BP | PHPDBG_HAS_METHOD_OPLINE_BP | PHPDBG_HAS_FILE_OPLINE_BP)
-#define PHPDBG_BP_MASK                (PHPDBG_HAS_FILE_BP | PHPDBG_HAS_SYM_BP | PHPDBG_HAS_METHOD_BP | PHPDBG_HAS_OPLINE_BP | PHPDBG_HAS_COND_BP | PHPDBG_HAS_OPCODE_BP | PHPDBG_HAS_FUNCTION_OPLINE_BP | PHPDBG_HAS_METHOD_OPLINE_BP | PHPDBG_HAS_FILE_OPLINE_BP)
-#define PHPDBG_IS_STOPPING            (PHPDBG_IS_QUITTING | PHPDBG_IS_CLEANING)
-
-#define PHPDBG_PRESERVE_FLAGS_MASK    (PHPDBG_SHOW_REFCOUNTS | PHPDBG_IS_STEPONEVAL | PHPDBG_IS_BP_ENABLED | PHPDBG_STEP_OPCODE | PHPDBG_IS_QUIET | PHPDBG_IS_COLOURED | PHPDBG_IS_REMOTE | PHPDBG_WRITE_XML | PHPDBG_IS_DISCONNECTED)
+#define PHPDBG_SEEK_MASK              (PHPDBG_IN_UNTIL|PHPDBG_IN_FINISH|PHPDBG_IN_LEAVE)
+#define PHPDBG_BP_RESOLVE_MASK           (PHPDBG_HAS_FUNCTION_OPLINE_BP|PHPDBG_HAS_METHOD_OPLINE_BP|PHPDBG_HAS_FILE_OPLINE_BP)
+#define PHPDBG_BP_MASK                (PHPDBG_HAS_FILE_BP|PHPDBG_HAS_SYM_BP|PHPDBG_HAS_METHOD_BP|PHPDBG_HAS_OPLINE_BP|PHPDBG_HAS_COND_BP|PHPDBG_HAS_OPCODE_BP|PHPDBG_HAS_FUNCTION_OPLINE_BP|PHPDBG_HAS_METHOD_OPLINE_BP|PHPDBG_HAS_FILE_OPLINE_BP)
 
 #ifndef _WIN32
-#      define PHPDBG_DEFAULT_FLAGS (PHPDBG_IS_QUIET | PHPDBG_IS_COLOURED | PHPDBG_IS_BP_ENABLED)
+#      define PHPDBG_DEFAULT_FLAGS (PHPDBG_IS_QUIET|PHPDBG_IS_COLOURED|PHPDBG_IS_BP_ENABLED)
 #else
-#      define PHPDBG_DEFAULT_FLAGS (PHPDBG_IS_QUIET | PHPDBG_IS_BP_ENABLED)
+#      define PHPDBG_DEFAULT_FLAGS (PHPDBG_IS_QUIET|PHPDBG_IS_BP_ENABLED)
 #endif /* }}} */
 
+/* {{{ strings */
+#define PHPDBG_NAME "phpdbg"
+#define PHPDBG_AUTHORS "Felipe Pena, Joe Watkins and Bob Weinand" /* Ordered by last name */
+#define PHPDBG_URL "http://phpdbg.com"
+#define PHPDBG_ISSUES "http://github.com/krakjoe/phpdbg/issues"
+#define PHPDBG_VERSION "0.4.0"
+#define PHPDBG_INIT_FILENAME ".phpdbginit"
+/* }}} */
+
 /* {{{ output descriptors */
 #define PHPDBG_STDIN                   0
 #define PHPDBG_STDOUT                  1
 #define PHPDBG_STDERR                  2
 #define PHPDBG_IO_FDS                  3 /* }}} */
 
-#define phpdbg_try_access \
-       {                                                            \
-               JMP_BUF *__orig_bailout = PHPDBG_G(sigsegv_bailout); \
-               JMP_BUF __bailout;                                   \
-                                                                     \
-               PHPDBG_G(sigsegv_bailout) = &__bailout;              \
-               if (SETJMP(__bailout) == 0) {
-#define phpdbg_catch_access \
-               } else {                                             \
-                       PHPDBG_G(sigsegv_bailout) = __orig_bailout;
-#define phpdbg_end_try_access() \
-               }                                                    \
-                       PHPDBG_G(sigsegv_bailout) = __orig_bailout;  \
-       }
-
 
 /* {{{ structs */
 ZEND_BEGIN_MODULE_GLOBALS(phpdbg)
@@ -247,54 +202,29 @@ ZEND_BEGIN_MODULE_GLOBALS(phpdbg)
        int bp_count;                                /* breakpoint count */
        int vmret;                                   /* return from last opcode handler execution */
 
-       zend_op_array *(*compile_file)(zend_file_handle *file_handle, int type TSRMLS_DC);
-       HashTable file_sources;
-
        FILE *oplog;                                 /* opline log */
-       struct {
-               FILE *ptr;
-               int fd;
-       } io[PHPDBG_IO_FDS];                         /* io */
-       int eol;                                     /* type of line ending to use */
-       size_t (*php_stdiop_write)(php_stream *, const char *, size_t TSRMLS_DC);
-       int in_script_xml;                           /* in <stream> output mode */
-       struct {
-               zend_bool active;
-               int type;
-               int fd;
-               char *tag;
-               char *msg;
-               int msglen;
-               char *xml;
-               int xmllen;
-       } err_buf;                                   /* error buffer */
-       zend_ulong req_id;                           /* "request id" to keep track of commands */
+       FILE *io[PHPDBG_IO_FDS];                     /* io */
 
        char *prompt[2];                             /* prompt */
        const phpdbg_color_t *colors[PHPDBG_COLORS]; /* colors */
        char *buffer;                                /* buffer */
-       zend_bool last_was_newline;                  /* check if we don't need to output a newline upon next phpdbg_error or phpdbg_notice */
-
-       char input_buffer[PHPDBG_MAX_CMD];           /* stdin input buffer */
-       int input_buflen;                            /* length of stdin input buffer */
-       phpdbg_signal_safe_mem sigsafe_mem;          /* memory to use in async safe environment (only once!) */
 
-       JMP_BUF *sigsegv_bailout;                    /* bailout address for accesibility probing */
-
-       uint64_t flags;                              /* phpdbg flags */
-
-       char *socket_path;                           /* phpdbg.path ini setting */
-       char *sapi_name_ptr;                         /* store sapi name to free it if necessary to not leak memory */
-       int socket_fd;                               /* file descriptor to socket (wait command) (-1 if unused) */
-       int socket_server_fd;                        /* file descriptor to master socket (wait command) (-1 if unused) */
-#ifdef PHP_WIN32
-       HANDLE sigio_watcher_thread;                 /* sigio watcher thread handle */
-       struct win32_sigio_watcher_data swd;
-#endif
-
-       struct _zend_phpdbg_globals *backup;         /* backup of data to store */
+       zend_ulong flags;                            /* phpdbg flags */
 ZEND_END_MODULE_GLOBALS(phpdbg) /* }}} */
 
-#endif
+/* the beginning (= the important part) of the _zend_mm_heap struct defined in Zend/zend_alloc.c
+   Needed for realizing watchpoints */
+struct _zend_mm_heap {
+       int   use_zend_alloc;
+       void *(*_malloc)(size_t);
+       void  (*_free)(void *);
+       void *(*_realloc)(void *, size_t);
+       size_t              free_bitmap;
+       size_t              large_free_bitmap;
+       size_t              block_size;
+       size_t              compact_size;
+       zend_mm_segment    *segments_list;
+       zend_mm_storage    *storage;
+};
 
 #endif /* PHPDBG_H */
index 85dc12a3e5cdca51cbf159770e46f6a0fa58eb5d..a18316a2285e172aeec42e9630e8bbd158f4f8ef 100644 (file)
@@ -43,7 +43,8 @@ static inline phpdbg_breakbase_t *phpdbg_find_conditional_breakpoint(zend_execut
 */
 static inline void _phpdbg_break_mapping(int id, HashTable *table TSRMLS_DC)
 {
-       zend_hash_index_update(&PHPDBG_G(bp)[PHPDBG_BREAK_MAP], (id), (void**) &table, sizeof(void*), NULL);
+       zend_hash_index_update(
+               &PHPDBG_G(bp)[PHPDBG_BREAK_MAP], (id), (void**) &table, sizeof(void*), NULL);
 }
 
 #define PHPDBG_BREAK_MAPPING(id, table) _phpdbg_break_mapping(id, table TSRMLS_CC)
@@ -96,8 +97,8 @@ PHPDBG_API void phpdbg_reset_breakpoints(TSRMLS_D) /* {{{ */
                HashTable **table = NULL;
 
                for (zend_hash_internal_pointer_reset_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_MAP], &position[0]);
-                    zend_hash_get_current_data_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_MAP], (void **) &table, &position[0]) == SUCCESS;
-                    zend_hash_move_forward_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_MAP], &position[0])) {
+                       zend_hash_get_current_data_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_MAP], (void**)&table, &position[0]) == SUCCESS;
+                       zend_hash_move_forward_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_MAP], &position[0])) {
                        phpdbg_breakbase_t *brake;
 
                        for (zend_hash_internal_pointer_reset_ex((*table), &position[1]);
@@ -110,82 +111,73 @@ PHPDBG_API void phpdbg_reset_breakpoints(TSRMLS_D) /* {{{ */
 } /* }}} */
 
 PHPDBG_API void phpdbg_export_breakpoints(FILE *handle TSRMLS_DC) /* {{{ */
-{
-       char *string;
-       phpdbg_export_breakpoints_to_string(&string TSRMLS_CC);
-       fputs(string, handle);
-}
-
-PHPDBG_API void phpdbg_export_breakpoints_to_string(char **str TSRMLS_DC) /* {{{ */
 {
        HashPosition position[2];
        HashTable **table = NULL;
        zend_ulong id = 0L;
 
-       *str = "";
-
        if (zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_MAP])) {
-               phpdbg_notice("exportbreakpoint", "count=\"%d\"", "Exporting %d breakpoints", zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_MAP]));
+               phpdbg_notice(
+                       "Exporting %d breakpoints",
+                       zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_MAP]));
                /* this only looks like magic, it isn't */
                for (zend_hash_internal_pointer_reset_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_MAP], &position[0]);
-                    zend_hash_get_current_data_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_MAP], (void **) &table, &position[0]) == SUCCESS;
-                    zend_hash_move_forward_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_MAP], &position[0])) {
+                       zend_hash_get_current_data_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_MAP], (void**)&table, &position[0]) == SUCCESS;
+                       zend_hash_move_forward_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_MAP], &position[0])) {
                        phpdbg_breakbase_t *brake;
 
                        zend_hash_get_current_key_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_MAP], NULL, NULL, &id, 0, &position[0]);
 
                        for (zend_hash_internal_pointer_reset_ex((*table), &position[1]);
-                            zend_hash_get_current_data_ex((*table), (void**)&brake, &position[1]) == SUCCESS;
-                            zend_hash_move_forward_ex((*table), &position[1])) {
+                               zend_hash_get_current_data_ex((*table), (void**)&brake, &position[1]) == SUCCESS;
+                               zend_hash_move_forward_ex((*table), &position[1])) {
                                if (brake->id == id) {
-                                       char *new_str = NULL;
-
                                        switch (brake->type) {
                                                case PHPDBG_BREAK_FILE: {
-                                                       phpdbg_asprintf(&new_str,
-                                                               "%sbreak %s:%lu\n", *str,
+                                                       fprintf(handle,
+                                                               "break %s:%lu\n",
                                                                ((phpdbg_breakfile_t*)brake)->filename,
                                                                ((phpdbg_breakfile_t*)brake)->line);
                                                } break;
 
                                                case PHPDBG_BREAK_SYM: {
-                                                       phpdbg_asprintf(&new_str,
-                                                               "%sbreak %s\n", *str,
+                                                       fprintf(handle,
+                                                               "break %s\n",
                                                                ((phpdbg_breaksymbol_t*)brake)->symbol);
                                                } break;
 
                                                case PHPDBG_BREAK_METHOD: {
-                                                       phpdbg_asprintf(&new_str,
-                                                               "%sbreak %s::%s\n", *str,
+                                                       fprintf(handle,
+                                                               "break %s::%s\n",
                                                                ((phpdbg_breakmethod_t*)brake)->class_name,
                                                                ((phpdbg_breakmethod_t*)brake)->func_name);
                                                } break;
 
                                                case PHPDBG_BREAK_METHOD_OPLINE: {
-                                                       phpdbg_asprintf(&new_str,
-                                                               "%sbreak %s::%s#%ld\n", *str,
+                                                       fprintf(handle,
+                                                               "break %s::%s#%ld\n",
                                                                ((phpdbg_breakopline_t*)brake)->class_name,
                                                                ((phpdbg_breakopline_t*)brake)->func_name,
                                                                ((phpdbg_breakopline_t*)brake)->opline_num);
                                                } break;
 
                                                case PHPDBG_BREAK_FUNCTION_OPLINE: {
-                                                       phpdbg_asprintf(&new_str,
-                                                               "%sbreak %s#%ld\n", *str,
+                                                       fprintf(handle,
+                                                               "break %s#%ld\n",
                                                                ((phpdbg_breakopline_t*)brake)->func_name,
                                                                ((phpdbg_breakopline_t*)brake)->opline_num);
                                                } break;
 
                                                case PHPDBG_BREAK_FILE_OPLINE: {
-                                                       phpdbg_asprintf(&new_str,
-                                                               "%sbreak %s:#%ld\n", *str,
+                                                       fprintf(handle,
+                                                               "break %s:#%ld\n",
                                                                ((phpdbg_breakopline_t*)brake)->class_name,
                                                                ((phpdbg_breakopline_t*)brake)->opline_num);
                                                } break;
 
                                                case PHPDBG_BREAK_OPCODE: {
-                                                       phpdbg_asprintf(&new_str,
-                                                               "%sbreak %s\n", *str,
+                                                       fprintf(handle,
+                                                               "break %s\n",
                                                                ((phpdbg_breakop_t*)brake)->name);
                                                } break;
 
@@ -195,20 +187,20 @@ PHPDBG_API void phpdbg_export_breakpoints_to_string(char **str TSRMLS_DC) /* {{{
                                                        if (conditional->paramed) {
                                                                switch (conditional->param.type) {
                                                                        case STR_PARAM:
-                                                                               phpdbg_asprintf(&new_str,
-                                                                                       "%sbreak at %s if %s\n", *str, conditional->param.str, conditional->code);
+                                                                               fprintf(handle,
+                                                                                       "break at %s if %s\n", conditional->param.str, conditional->code);
                                                                        break;
 
                                                                        case METHOD_PARAM:
-                                                                               phpdbg_asprintf(&new_str,
-                                                                                       "%sbreak at %s::%s if %s\n", *str,
+                                                                               fprintf(handle,
+                                                                                       "break at %s::%s if %s\n",
                                                                                        conditional->param.method.class, conditional->param.method.name,
                                                                                        conditional->code);
                                                                        break;
 
                                                                        case FILE_PARAM:
-                                                                               phpdbg_asprintf(&new_str,
-                                                                                       "%sbreak at %s:%lu if %s\n", *str,
+                                                                               fprintf(handle,
+                                                                                       "break at %s:%lu if %s\n",
                                                                                        conditional->param.file.name, conditional->param.file.line,
                                                                                        conditional->code);
                                                                        break;
@@ -216,179 +208,70 @@ PHPDBG_API void phpdbg_export_breakpoints_to_string(char **str TSRMLS_DC) /* {{{
                                                                        default: { /* do nothing */ } break;
                                                                }
                                                        } else {
-                                                               phpdbg_asprintf(&new_str, "%sbreak if %s\n", str, conditional->code);
+                                                               fprintf(
+                                                                       handle, "break if %s\n", conditional->code);
                                                        }
                                                } break;
                                        }
-
-                                       if ((*str)[0]) {
-                                               efree(*str);
-                                       }
-                                       *str = new_str;
                                }
                        }
                }
        }
-
-       if (!(*str)[0]) {
-               *str = NULL;
-       }
 } /* }}} */
 
 PHPDBG_API void phpdbg_set_breakpoint_file(const char *path, long line_num TSRMLS_DC) /* {{{ */
 {
        php_stream_statbuf ssb;
        char realpath[MAXPATHLEN];
-       const char *original_path = path;
-       zend_bool pending = 0;
-
-       HashTable *broken, *file_breaks =  &PHPDBG_G(bp)[PHPDBG_BREAK_FILE];
-       phpdbg_breakfile_t new_break;
-       size_t path_len = 0L;
-
-       if (VCWD_REALPATH(path, realpath)) {
-               path = realpath;
-       }
-       path_len = strlen(path);
-
-       phpdbg_debug("file path: %s, resolved path: %s, was compiled: %d\n", original_path, path, zend_hash_exists(&PHPDBG_G(file_sources), path, path_len));
-
-       if (!zend_hash_exists(&PHPDBG_G(file_sources), path, path_len)) {
-               if (php_stream_stat_path(path, &ssb) == FAILURE) {
-                       if (original_path[0] == '/') {
-                               phpdbg_error("breakpoint", "type=\"nofile\" add=\"fail\" file=\"%s\"", "Cannot stat %s, it does not exist", original_path);
-                               return;
+       
+       if (php_stream_stat_path(path, &ssb) != FAILURE) {
+               if (ssb.sb.st_mode & (S_IFREG|S_IFLNK)) {
+                       HashTable *broken;
+                       phpdbg_breakfile_t new_break;
+                       size_t path_len = 0L;
+                       
+                       if (VCWD_REALPATH(path, realpath)) {
+                               path = realpath;
                        }
-
-                       file_breaks = &PHPDBG_G(bp)[PHPDBG_BREAK_FILE_PENDING];
-                       path = original_path;
                        path_len = strlen(path);
-                       pending = 1;
-               } else if (!(ssb.sb.st_mode & (S_IFREG|S_IFLNK))) {
-                       phpdbg_error("breakpoint", "type=\"notregular\" add=\"fail\" file=\"%s\"", "Cannot set breakpoint in %s, it is not a regular file", path);
-                       return;
-               } else {
-                       phpdbg_debug("File exists, but not compiled\n");
-               }
-       }
+                       
+                       if (zend_hash_find(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE],
+                               path, path_len, (void**)&broken) == FAILURE) {
+                               HashTable breaks;
 
-       if (zend_hash_find(file_breaks, path, path_len, (void **) &broken) == FAILURE) {
-               HashTable breaks;
-               zend_hash_init(&breaks, 8, NULL, phpdbg_file_breaks_dtor, 0);
-
-               zend_hash_add(file_breaks, path, path_len, &breaks, sizeof(HashTable), (void **) &broken);
-       }
+                               zend_hash_init(&breaks, 8, NULL, phpdbg_file_breaks_dtor, 0);
 
-       if (!zend_hash_index_exists(broken, line_num)) {
-               HashPosition position;
-               char *file;
-               uint filelen;
-
-               PHPDBG_BREAK_INIT(new_break, PHPDBG_BREAK_FILE);
-               new_break.filename = estrndup(path, path_len);
-               new_break.line = line_num;
+                               zend_hash_update(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE],
+                                       path, path_len, &breaks, sizeof(HashTable),
+                                       (void**)&broken);
+                       }
 
-               zend_hash_index_update(broken, line_num, (void **) &new_break, sizeof(phpdbg_breakfile_t), NULL);
+                       if (!zend_hash_index_exists(broken, line_num)) {
+                               PHPDBG_G(flags) |= PHPDBG_HAS_FILE_BP;
 
-               PHPDBG_BREAK_MAPPING(new_break.id, broken);
+                               PHPDBG_BREAK_INIT(new_break, PHPDBG_BREAK_FILE);
+                               new_break.filename = estrndup(path, path_len);
+                               new_break.line = line_num;
 
-               if (pending) {
-                       for (zend_hash_internal_pointer_reset_ex(&PHPDBG_G(file_sources), &position);
-                            zend_hash_get_current_key_ex(&PHPDBG_G(file_sources), &file, &filelen, NULL, 0, &position) == HASH_KEY_IS_STRING;
-                            zend_hash_move_forward_ex(&PHPDBG_G(file_sources), &position)) {
-                               HashTable *fileht;
+                               zend_hash_index_update(
+                                       broken, line_num, (void**)&new_break, sizeof(phpdbg_breakfile_t), NULL);
 
-                               phpdbg_debug("Compare against loaded %s\n", file);
+                               phpdbg_notice("Breakpoint #%d added at %s:%ld",
+                                       new_break.id, new_break.filename, new_break.line);
 
-                               if (!(pending = ((fileht = phpdbg_resolve_pending_file_break_ex(file, filelen, path, path_len, broken TSRMLS_CC)) == NULL))) {
-                                       phpdbg_breakfile_t *brake;
-                                       zend_hash_index_find(fileht, line_num, (void **) &brake);
-                                       new_break = *brake;
-                                       break;
-                               }
+                               PHPDBG_BREAK_MAPPING(new_break.id, broken);
+                       } else {
+                               phpdbg_error("Breakpoint at %s:%ld exists", path, line_num);
                        }
-               }
-
-               if (pending) {
-                       PHPDBG_G(flags) |= PHPDBG_HAS_PENDING_FILE_BP;
 
-                       phpdbg_notice("breakpoint", "add=\"success\" id=\"%d\" file=\"%s\" line=\"%ld\" pending=\"pending\"", "Pending breakpoint #%d added at %s:%ld", new_break.id, new_break.filename, new_break.line);
                } else {
-                       PHPDBG_G(flags) |= PHPDBG_HAS_FILE_BP;
-
-                       phpdbg_notice("breakpoint", "add=\"success\" id=\"%d\" file=\"%s\" line=\"%ld\"", "Breakpoint #%d added at %s:%ld", new_break.id, new_break.filename, new_break.line);
+                       phpdbg_error("Cannot set breakpoint in %s, it is not a regular file", path);
                }
        } else {
-               phpdbg_error("breakpoint", "type=\"exists\" add=\"fail\" file=\"%s\" line=\"%ld\"", "Breakpoint at %s:%ld exists", path, line_num);
+               phpdbg_error("Cannot stat %s, it does not exist", path);
        }
 } /* }}} */
 
-PHPDBG_API HashTable *phpdbg_resolve_pending_file_break_ex(const char *file, uint filelen, const char *cur, uint curlen, HashTable *fileht TSRMLS_DC) /* {{{ */
-{
-       phpdbg_debug("file: %s, filelen: %u, cur: %s, curlen %u, pos: %c, memcmp: %d\n", file, filelen, cur, curlen, filelen > curlen ? file[filelen - curlen - 1] : '?', filelen > curlen ? memcmp(file + filelen - curlen, cur, curlen) : 0);
-
-       if (((curlen < filelen && file[filelen - curlen - 1] == '/') || filelen == curlen) && !memcmp(file + filelen - curlen, cur, curlen)) {
-               phpdbg_breakfile_t *brake, new_brake;
-               HashTable *master = NULL;
-               HashPosition position;
-
-               PHPDBG_G(flags) |= PHPDBG_HAS_FILE_BP;
-
-               if (zend_hash_find(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE], file, filelen, (void **) &master) == FAILURE) {
-                       HashTable new_ht;
-                       zend_hash_init(&new_ht, 8, NULL, phpdbg_file_breaks_dtor, 0);
-                       zend_hash_add(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE], file, filelen, &new_ht, sizeof(HashTable), (void **) &master);
-               }
-
-               for (zend_hash_internal_pointer_reset_ex(fileht, &position);
-                    zend_hash_get_current_data_ex(fileht, (void**)&brake, &position) == SUCCESS;
-                    zend_hash_move_forward_ex(fileht, &position)) {
-                       new_brake = *brake;
-                       new_brake.filename = estrndup(file, filelen);
-                       PHPDBG_BREAK_UNMAPPING(brake->id);
-
-                       if (master) {
-                               zend_hash_index_update(master, brake->line, (void **) &new_brake, sizeof(phpdbg_breakfile_t), NULL);
-                               PHPDBG_BREAK_MAPPING(brake->id, master);
-                       }
-               }
-
-               zend_hash_del(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE_PENDING], cur, curlen);
-
-               if (!zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE_PENDING])) {
-                       PHPDBG_G(flags) &= ~PHPDBG_HAS_PENDING_FILE_BP;
-               }
-
-               phpdbg_debug("compiled file: %s, cur bp file: %s\n", file, cur);
-
-               return master;
-       }
-
-       return NULL;
-} /* }}} */
-
-PHPDBG_API void phpdbg_resolve_pending_file_break(const char *file TSRMLS_DC) /* {{{ */
-{
-       HashPosition position;
-       HashTable *fileht;
-       uint filelen = strlen(file);
-
-       phpdbg_debug("was compiled: %s\n", file);
-
-       zend_hash_internal_pointer_reset_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE_PENDING], &position);
-       while (zend_hash_get_current_data_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE_PENDING], (void**) &fileht, &position) == SUCCESS) {
-               const char *cur;
-               uint curlen;
-
-               zend_hash_get_current_key_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE_PENDING], (char **) &cur, &curlen, NULL, 0, &position);
-               zend_hash_move_forward_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE_PENDING], &position);
-
-               phpdbg_debug("check bp: %s\n", cur);
-
-               phpdbg_resolve_pending_file_break_ex(file, filelen, cur, curlen, fileht TSRMLS_CC);
-       }
-}
-
 PHPDBG_API void phpdbg_set_breakpoint_symbol(const char *name, size_t name_len TSRMLS_DC) /* {{{ */
 {
        if (!zend_hash_exists(&PHPDBG_G(bp)[PHPDBG_BREAK_SYM], name, name_len)) {
@@ -402,12 +285,12 @@ PHPDBG_API void phpdbg_set_breakpoint_symbol(const char *name, size_t name_len T
                zend_hash_update(&PHPDBG_G(bp)[PHPDBG_BREAK_SYM], new_break.symbol,
                        name_len, &new_break, sizeof(phpdbg_breaksymbol_t), NULL);
 
-               phpdbg_notice("breakpoint", "add=\"success\" id=\"%d\" function=\"%s\"", "Breakpoint #%d added at %s",
+               phpdbg_notice("Breakpoint #%d added at %s",
                        new_break.id, new_break.symbol);
 
                PHPDBG_BREAK_MAPPING(new_break.id, &PHPDBG_G(bp)[PHPDBG_BREAK_SYM]);
        } else {
-               phpdbg_error("breakpoint", "type=\"exists\" add=\"fail\" function=\"%s\"", "Breakpoint exists at %s", name);
+               phpdbg_notice("Breakpoint exists at %s", name);
        }
 } /* }}} */
 
@@ -441,12 +324,12 @@ PHPDBG_API void phpdbg_set_breakpoint_method(const char *class_name, const char
                zend_hash_update(class_table, lcname, func_len,
                        &new_break, sizeof(phpdbg_breakmethod_t), NULL);
 
-               phpdbg_notice("breakpoint", "add=\"success\" id=\"%d\" method=\"%s::%s\"", "Breakpoint #%d added at %s::%s",
+               phpdbg_notice("Breakpoint #%d added at %s::%s",
                        new_break.id, class_name, func_name);
 
                PHPDBG_BREAK_MAPPING(new_break.id, class_table);
        } else {
-               phpdbg_error("breakpoint", "type=\"exists\" add=\"fail\" method=\"%s::%s\"", "Breakpoint exists at %s::%s", class_name, func_name);
+               phpdbg_notice("Breakpoint exists at %s::%s", class_name, func_name);
        }
 
        efree(lcname);
@@ -467,11 +350,11 @@ PHPDBG_API void phpdbg_set_breakpoint_opline(zend_ulong opline TSRMLS_DC) /* {{{
                zend_hash_index_update(&PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE], opline,
                        &new_break, sizeof(phpdbg_breakline_t), NULL);
 
-               phpdbg_notice("breakpoint", "add=\"success\" id=\"%d\" opline=\"%#lx\"", "Breakpoint #%d added at %#lx",
+               phpdbg_notice("Breakpoint #%d added at %#lx",
                        new_break.id, new_break.opline);
                PHPDBG_BREAK_MAPPING(new_break.id, &PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE]);
        } else {
-               phpdbg_error("breakpoint", "type=\"exists\" add=\"fail\" opline=\"%#lx\"", "Breakpoint exists at %#lx", opline);
+               phpdbg_notice("Breakpoint exists at %#lx", opline);
        }
 } /* }}} */
 
@@ -480,11 +363,11 @@ PHPDBG_API int phpdbg_resolve_op_array_break(phpdbg_breakopline_t *brake, zend_o
        phpdbg_breakline_t opline_break;
        if (op_array->last <= brake->opline_num) {
                if (brake->class_name == NULL) {
-                       phpdbg_error("breakpoint", "type=\"maxoplines\" add=\"fail\" maxoplinenum=\"%d\" function=\"%s\" usedoplinenum=\"%ld\"", "There are only %d oplines in function %s (breaking at opline %ld impossible)", op_array->last, brake->func_name, brake->opline_num);
+                       phpdbg_error("There are only %d oplines in function %s (breaking at opline %ld impossible)", op_array->last, brake->func_name, brake->opline_num);
                } else if (brake->func_name == NULL) {
-                       phpdbg_error("breakpoint", "type=\"maxoplines\" add=\"fail\" maxoplinenum=\"%d\" file=\"%s\" usedoplinenum=\"%ld\"", "There are only %d oplines in file %s (breaking at opline %ld impossible)", op_array->last, brake->class_name, brake->opline_num);
+                       phpdbg_error("There are only %d oplines in file %s (breaking at opline %ld impossible)", op_array->last, brake->class_name, brake->opline_num);
                } else {
-                       phpdbg_error("breakpoint", "type=\"maxoplines\" add=\"fail\" maxoplinenum=\"%d\" method=\"%s::%s\" usedoplinenum=\"%ld\"", "There are only %d oplines in method %s::%s (breaking at opline %ld impossible)", op_array->last, brake->class_name, brake->func_name, brake->opline_num);
+                       phpdbg_error("There are only %d oplines in method %s::%s (breaking at opline %ld impossible)", op_array->last, brake->class_name, brake->func_name, brake->opline_num);
                }
 
                return FAILURE;
@@ -540,7 +423,7 @@ PHPDBG_API void phpdbg_resolve_op_array_breaks(zend_op_array *op_array TSRMLS_DC
                        zend_hash_internal_pointer_end(&PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE]);
                        zend_hash_get_current_data(&PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE], (void **)&opline_break);
 
-                       phpdbg_notice("breakpoint", "add=\"success\" id=\"%d\" symbol=\"%s\" num=\"%ld\" opline=\"%#lx\"", "Breakpoint #%d resolved at %s%s%s#%ld (opline %#lx)",
+                       phpdbg_notice("Breakpoint #%d resolved at %s%s%s#%ld (opline %#lx)",
                                brake->id,
                                brake->class_name?brake->class_name:"",
                                brake->class_name&&brake->func_name?"::":"",
@@ -591,7 +474,7 @@ PHPDBG_API int phpdbg_resolve_opline_break(phpdbg_breakopline_t *new_break TSRML
 
        if (zend_hash_find(func_table, zend_str_tolower_dup(new_break->func_name, new_break->func_len), new_break->func_len + 1, (void **)&func) == FAILURE) {
                if (new_break->class_name != NULL && new_break->func_name != NULL) {
-                       phpdbg_error("breakpoint", "type=\"nomethod\" method=\"%s::%s\"", "Method %s doesn't exist in class %s", new_break->func_name, new_break->class_name);
+                       phpdbg_error("Method %s doesn't exist in class %s", new_break->func_name, new_break->class_name);
                        return 2;
                }
                return FAILURE;
@@ -599,9 +482,9 @@ PHPDBG_API int phpdbg_resolve_opline_break(phpdbg_breakopline_t *new_break TSRML
 
        if (func->type != ZEND_USER_FUNCTION) {
                if (new_break->class_name == NULL) {
-                       phpdbg_error("breakpoint", "type=\"internalfunction\" function=\"%s\"", "%s is not an user defined function, no oplines exist", new_break->func_name);
+                       phpdbg_error("%s is not an user defined function, no oplines exist", new_break->func_name);
                } else {
-                       phpdbg_error("breakpoint", "type=\"internalfunction\" method=\"%s::%s\"", "%s::%s is not an user defined method, no oplines exist", new_break->class_name, new_break->func_name);
+                       phpdbg_error("%s::%s is not an user defined method, no oplines exist", new_break->class_name, new_break->func_name);
                }
                return 2;
        }
@@ -629,11 +512,11 @@ PHPDBG_API void phpdbg_set_breakpoint_method_opline(const char *class, const cha
 
        switch (phpdbg_resolve_opline_break(&new_break TSRMLS_CC)) {
                case FAILURE:
-                       phpdbg_notice("breakpoint", "pending=\"pending\" id=\"%d\" method=\"%::%s\" num=\"%ld\"", "Pending breakpoint #%d at %s::%s#%ld", new_break.id, new_break.class_name, new_break.func_name, opline);
+                       phpdbg_notice("Pending breakpoint #%d at %s::%s#%ld", new_break.id, new_break.class_name, new_break.func_name, opline);
                        break;
 
                case SUCCESS:
-                       phpdbg_notice("breakpoint", "id=\"%d\" method=\"%::%s\" num=\"%ld\"", "Breakpoint #%d added at %s::%s#%ld", new_break.id, new_break.class_name, new_break.func_name, opline);
+                       phpdbg_notice("Breakpoint #%d added at %s::%s#%ld", new_break.id, new_break.class_name, new_break.func_name, opline);
                        break;
 
                case 2:
@@ -659,7 +542,7 @@ PHPDBG_API void phpdbg_set_breakpoint_method_opline(const char *class, const cha
        }
 
        if (zend_hash_index_exists(method_table, opline)) {
-               phpdbg_error("breakpoint", "type=\"exists\" method=\"%s\" num=\"%ld\"", "Breakpoint already exists for %s::%s#%ld", new_break.class_name, new_break.func_name, opline);
+               phpdbg_notice("Breakpoint already exists for %s::%s#%ld", new_break.class_name, new_break.func_name, opline);
                efree((char*)new_break.func_name);
                efree((char*)new_break.class_name);
                PHPDBG_G(bp_count)--;
@@ -688,11 +571,11 @@ PHPDBG_API void phpdbg_set_breakpoint_function_opline(const char *function, zend
 
        switch (phpdbg_resolve_opline_break(&new_break TSRMLS_CC)) {
                case FAILURE:
-                       phpdbg_notice("breakpoint", "pending=\"pending\" id=\"%d\" function=\"%s\" num=\"%ld\"", "Pending breakpoint #%d at %s#%ld", new_break.id, new_break.func_name, opline);
+                       phpdbg_notice("Pending breakpoint #%d at %s#%ld", new_break.id, new_break.func_name, opline);
                        break;
 
                case SUCCESS:
-                       phpdbg_notice("breakpoint", "id=\"%d\" function=\"%s\" num=\"%ld\"", "Breakpoint #%d added at %s#%ld", new_break.id, new_break.func_name, opline);
+                       phpdbg_notice("Breakpoint #%d added at %s#%ld", new_break.id, new_break.func_name, opline);
                        break;
 
                case 2:
@@ -709,7 +592,7 @@ PHPDBG_API void phpdbg_set_breakpoint_function_opline(const char *function, zend
        }
 
        if (zend_hash_index_exists(func_table, opline)) {
-               phpdbg_error("breakpoint", "type=\"exists\" function=\"%s\" num=\"%ld\"", "Breakpoint already exists for %s#%ld", new_break.func_name, opline);
+               phpdbg_notice("Breakpoint already exists for %s#%ld", new_break.func_name, opline);
                efree((char*)new_break.func_name);
                PHPDBG_G(bp_count)--;
                return;
@@ -737,11 +620,11 @@ PHPDBG_API void phpdbg_set_breakpoint_file_opline(const char *file, zend_ulong o
 
        switch (phpdbg_resolve_opline_break(&new_break TSRMLS_CC)) {
                case FAILURE:
-                       phpdbg_notice("breakpoint", "pending=\"pending\" id=\"%d\" file=\"%s\" num=\"%ld\"", "Pending breakpoint #%d at %s:%ld", new_break.id, new_break.class_name, opline);
+                       phpdbg_notice("Pending breakpoint #%d at %s:%ld", new_break.id, new_break.class_name, opline);
                        break;
 
                case SUCCESS:
-                       phpdbg_notice("breakpoint", "id=\"%d\" file=\"%s\" num=\"%ld\"", "Breakpoint #%d added at %s:%ld", new_break.id, new_break.class_name, opline);
+                       phpdbg_notice("Breakpoint #%d added at %s:%ld", new_break.id, new_break.class_name, opline);
                        break;
 
                case 2:
@@ -758,7 +641,7 @@ PHPDBG_API void phpdbg_set_breakpoint_file_opline(const char *file, zend_ulong o
        }
 
        if (zend_hash_index_exists(file_table, opline)) {
-               phpdbg_error("breakpoint", "type=\"exists\" file=\"%s\" num=\"%d\"", "Breakpoint already exists for %s:%ld", new_break.class_name, opline);
+               phpdbg_notice("Breakpoint already exists for %s:%ld", new_break.class_name, opline);
                efree((char*)new_break.class_name);
                PHPDBG_G(bp_count)--;
                return;
@@ -777,7 +660,8 @@ PHPDBG_API void phpdbg_set_breakpoint_opcode(const char *name, size_t name_len T
        zend_ulong hash = zend_hash_func(name, name_len);
 
        if (zend_hash_index_exists(&PHPDBG_G(bp)[PHPDBG_BREAK_OPCODE], hash)) {
-               phpdbg_error("breakpoint", "type=\"exists\" opcode=\"%s\"", "Breakpoint exists for %s", name);
+               phpdbg_notice(
+                       "Breakpoint exists for %s", name);
                return;
        }
 
@@ -790,7 +674,7 @@ PHPDBG_API void phpdbg_set_breakpoint_opcode(const char *name, size_t name_len T
 
        PHPDBG_G(flags) |= PHPDBG_HAS_OPCODE_BP;
 
-       phpdbg_notice("breakpoint", "id=\"%d\" opcode=\"%s\"", "Breakpoint #%d added at %s", new_break.id, name);
+       phpdbg_notice("Breakpoint #%d added at %s", new_break.id, name);
        PHPDBG_BREAK_MAPPING(new_break.id, &PHPDBG_G(bp)[PHPDBG_BREAK_OPCODE]);
 } /* }}} */
 
@@ -807,10 +691,9 @@ PHPDBG_API void phpdbg_set_breakpoint_opline_ex(phpdbg_opline_ptr_t opline TSRML
                zend_hash_index_update(&PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE],
                        (zend_ulong) opline, &new_break, sizeof(phpdbg_breakline_t), NULL);
 
-               phpdbg_notice("breakpoint", "id=\"%d\" opline=\"%#lx\"", "Breakpoint #%d added at %#lx", new_break.id, new_break.opline);
+               phpdbg_notice("Breakpoint #%d added at %#lx",
+                       new_break.id, new_break.opline);
                PHPDBG_BREAK_MAPPING(new_break.id, &PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE]);
-       } else {
-               phpdbg_error("breakpoint", "type=\"exists\" opline=\"%#lx\"", "Breakpoint exists for opline %#lx", (zend_ulong) opline);
        }
 } /* }}} */
 
@@ -846,7 +729,8 @@ static inline void phpdbg_create_conditional_break(phpdbg_breakcond_t *brake, co
        Z_STRVAL(pv)[Z_STRLEN(pv)] = '\0';
        Z_TYPE(pv) = IS_STRING;
 
-       new_break.ops = zend_compile_string(&pv, "Conditional Breakpoint Code" TSRMLS_CC);
+       new_break.ops = zend_compile_string(
+               &pv, "Conditional Breakpoint Code" TSRMLS_CC);
 
        zval_dtor(&pv);
 
@@ -855,12 +739,14 @@ static inline void phpdbg_create_conditional_break(phpdbg_breakcond_t *brake, co
                        &PHPDBG_G(bp)[PHPDBG_BREAK_COND], hash, &new_break,
                        sizeof(phpdbg_breakcond_t), (void**)&brake);
 
-               phpdbg_notice("breakpoint", "id=\"%d\" expression=\"%s\" ptr=\"%p\"", "Conditional breakpoint #%d added %s/%p", brake->id, brake->code, brake->ops);
+               phpdbg_notice("Conditional breakpoint #%d added %s/%p",
+                       brake->id, brake->code, brake->ops);
 
                PHPDBG_G(flags) |= PHPDBG_HAS_COND_BP;
                PHPDBG_BREAK_MAPPING(new_break.id, &PHPDBG_G(bp)[PHPDBG_BREAK_COND]);
        } else {
-                phpdbg_error("compile", "expression=\"%s\"", "Failed to compile code for expression %s", expr);
+                phpdbg_error(
+                       "Failed to compile code for expression %s", expr);
                 efree((char*)new_break.code);
                 PHPDBG_G(bp_count)--;
        }
@@ -876,7 +762,7 @@ PHPDBG_API void phpdbg_set_breakpoint_expression(const char *expr, size_t expr_l
                phpdbg_create_conditional_break(
                        &new_break, NULL, expr, expr_len, expr_hash TSRMLS_CC);
        } else {
-               phpdbg_error("breakpoint", "type=\"exists\" expression=\"%s\"", "Conditional break %s exists", expr);
+               phpdbg_notice("Conditional break %s exists", expr);
        }
 } /* }}} */
 
@@ -885,39 +771,31 @@ PHPDBG_API void phpdbg_set_breakpoint_at(const phpdbg_param_t *param TSRMLS_DC)
        phpdbg_breakcond_t new_break;
        phpdbg_param_t *condition;
        zend_ulong hash = 0L;
-
+       
        if (param->next) {
                condition = param->next;
                hash = zend_inline_hash_func(condition->str, condition->len);
-
+               
                if (!zend_hash_index_exists(&PHPDBG_G(bp)[PHPDBG_BREAK_COND], hash)) {
-                       phpdbg_create_conditional_break(&new_break, param, condition->str, condition->len, hash TSRMLS_CC);
+                       phpdbg_create_conditional_break(
+                               &new_break, param, 
+                                       condition->str, condition->len, hash TSRMLS_CC);
                } else {
-                       phpdbg_notice("breakpoint", "type=\"exists\" arg=\"%s\"", "Conditional break %s exists at the specified location", condition->str);
-               }
+                       phpdbg_notice(
+                               "Conditional break %s exists at the specified location", condition->str);
+               }       
        }
-
+       
 } /* }}} */
 
 static inline phpdbg_breakbase_t *phpdbg_find_breakpoint_file(zend_op_array *op_array TSRMLS_DC) /* {{{ */
 {
        HashTable *breaks;
        phpdbg_breakbase_t *brake;
-       size_t path_len;
-       char realpath[MAXPATHLEN];
-       const char *path = op_array->filename;
-
-       if (VCWD_REALPATH(path, realpath)) {
-               path = realpath;
-       }
-
-       path_len = strlen(path);
-
-#if 0
-       phpdbg_debug("Op at: %.*s %d\n", path_len, path, (*EG(opline_ptr))->lineno);
-#endif
+       size_t name_len = strlen(op_array->filename);
 
-       if (zend_hash_find(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE], path, path_len, (void**)&breaks) == FAILURE) {
+       if (zend_hash_find(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE], op_array->filename,
+               name_len, (void**)&breaks) == FAILURE) {
                return NULL;
        }
 
@@ -1092,6 +970,7 @@ static inline phpdbg_breakbase_t *phpdbg_find_conditional_breakpoint(zend_execut
             zend_hash_get_current_data_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_COND], (void*)&bp, &position) == SUCCESS;
             zend_hash_move_forward_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_COND], &position)) {
                zval *retval = NULL;
+               int orig_interactive = CG(interactive);
                zval **orig_retval = EG(return_value_ptr_ptr);
                zend_op_array *orig_ops = EG(active_op_array);
                zend_op **orig_opline = EG(opline_ptr);
@@ -1116,6 +995,8 @@ static inline phpdbg_breakbase_t *phpdbg_find_conditional_breakpoint(zend_execut
                        zend_rebuild_symbol_table(TSRMLS_C);
                }
 
+               CG(interactive) = 0;
+
                zend_try {
                        PHPDBG_G(flags) |= PHPDBG_IN_COND_BP;
                        zend_execute(EG(active_op_array) TSRMLS_CC);
@@ -1127,6 +1008,8 @@ static inline phpdbg_breakbase_t *phpdbg_find_conditional_breakpoint(zend_execut
                                breakpoint = SUCCESS;
                        }
                } zend_catch {
+                       CG(interactive) = orig_interactive;
+
                        EG(no_extensions)=1;
                        EG(return_value_ptr_ptr) = orig_retval;
                        EG(active_op_array) = orig_ops;
@@ -1134,6 +1017,8 @@ static inline phpdbg_breakbase_t *phpdbg_find_conditional_breakpoint(zend_execut
                        PHPDBG_G(flags) &= ~PHPDBG_IN_COND_BP;
                } zend_end_try();
 
+               CG(interactive) = orig_interactive;
+
                EG(no_extensions)=1;
                EG(return_value_ptr_ptr) = orig_retval;
                EG(active_op_array) = orig_ops;
@@ -1263,17 +1148,16 @@ PHPDBG_API void phpdbg_delete_breakpoint(zend_ulong num TSRMLS_DC) /* {{{ */
                        break;
                }
 
-               phpdbg_notice("breakpoint", "deleted=\"success\" id=\"%ld\"", "Deleted breakpoint #%ld", num);
+               phpdbg_notice("Deleted breakpoint #%ld", num);
                PHPDBG_BREAK_UNMAPPING(num);
        } else {
-               phpdbg_error("breakpoint", "type=\"nobreakpoint\" deleted=\"fail\" id=\"%ld\"", "Failed to find breakpoint #%ld", num);
+               phpdbg_error("Failed to find breakpoint #%ld", num);
        }
 } /* }}} */
 
 PHPDBG_API void phpdbg_clear_breakpoints(TSRMLS_D) /* {{{ */
 {
        zend_hash_clean(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE]);
-       zend_hash_clean(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE_PENDING]);
        zend_hash_clean(&PHPDBG_G(bp)[PHPDBG_BREAK_SYM]);
        zend_hash_clean(&PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE]);
        zend_hash_clean(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD_OPLINE]);
@@ -1305,7 +1189,7 @@ PHPDBG_API void phpdbg_print_breakpoint(phpdbg_breakbase_t *brake TSRMLS_DC) /*
 
        switch (brake->type) {
                case PHPDBG_BREAK_FILE: {
-                       phpdbg_notice("breakpoint", "id=\"%d\" file=\"%s\" line=\"%ld\" hits=\"%lu\"", "Breakpoint #%d at %s:%ld, hits: %lu",
+                       phpdbg_notice("Breakpoint #%d at %s:%ld, hits: %lu",
                                ((phpdbg_breakfile_t*)brake)->id,
                                ((phpdbg_breakfile_t*)brake)->filename,
                                ((phpdbg_breakfile_t*)brake)->line,
@@ -1313,7 +1197,7 @@ PHPDBG_API void phpdbg_print_breakpoint(phpdbg_breakbase_t *brake TSRMLS_DC) /*
                } break;
 
                case PHPDBG_BREAK_SYM: {
-                       phpdbg_notice("breakpoint", "id=\"%d\" function=\"%s\" file=\"%s\" line=\"%ld\" hits=\"%lu\"", "Breakpoint #%d in %s() at %s:%u, hits: %lu",
+                       phpdbg_notice("Breakpoint #%d in %s() at %s:%u, hits: %lu",
                                ((phpdbg_breaksymbol_t*)brake)->id,
                                ((phpdbg_breaksymbol_t*)brake)->symbol,
                                zend_get_executed_filename(TSRMLS_C),
@@ -1322,7 +1206,7 @@ PHPDBG_API void phpdbg_print_breakpoint(phpdbg_breakbase_t *brake TSRMLS_DC) /*
                } break;
 
                case PHPDBG_BREAK_OPLINE: {
-                       phpdbg_notice("breakpoint", "id=\"%d\" opline=\"%#lx\" file=\"%s\" line=\"%ld\" hits=\"%lu\"", "Breakpoint #%d in %#lx at %s:%u, hits: %lu",
+                       phpdbg_notice("Breakpoint #%d in %#lx at %s:%u, hits: %lu",
                                ((phpdbg_breakline_t*)brake)->id,
                                ((phpdbg_breakline_t*)brake)->opline,
                                zend_get_executed_filename(TSRMLS_C),
@@ -1331,7 +1215,7 @@ PHPDBG_API void phpdbg_print_breakpoint(phpdbg_breakbase_t *brake TSRMLS_DC) /*
                } break;
 
                case PHPDBG_BREAK_METHOD_OPLINE: {
-                        phpdbg_notice("breakpoint", "id=\"%d\" method=\"%s::%s\" num=\"%lu\" file=\"%s\" line=\"%ld\" hits=\"%lu\"", "Breakpoint #%d in %s::%s()#%lu at %s:%u, hits: %lu",
+                        phpdbg_notice("Breakpoint #%d in %s::%s()#%lu at %s:%u, hits: %lu",
                                ((phpdbg_breakopline_t*)brake)->id,
                                ((phpdbg_breakopline_t*)brake)->class_name,
                                ((phpdbg_breakopline_t*)brake)->func_name,
@@ -1342,7 +1226,7 @@ PHPDBG_API void phpdbg_print_breakpoint(phpdbg_breakbase_t *brake TSRMLS_DC) /*
                } break;
 
                case PHPDBG_BREAK_FUNCTION_OPLINE: {
-                        phpdbg_notice("breakpoint", "id=\"%d\" num=\"%lu\" function=\"%s\" file=\"%s\" line=\"%ld\" hits=\"%lu\"", "Breakpoint #%d in %s()#%lu at %s:%u, hits: %lu",
+                        phpdbg_notice("Breakpoint #%d in %s()#%lu at %s:%u, hits: %lu",
                                ((phpdbg_breakopline_t*)brake)->id,
                                ((phpdbg_breakopline_t*)brake)->func_name,
                                ((phpdbg_breakopline_t*)brake)->opline_num,
@@ -1352,8 +1236,9 @@ PHPDBG_API void phpdbg_print_breakpoint(phpdbg_breakbase_t *brake TSRMLS_DC) /*
                } break;
 
                case PHPDBG_BREAK_FILE_OPLINE: {
-                        phpdbg_notice("breakpoint", "id=\"%d\" num=\"%lu\" file=\"%s\" line=\"%ld\" hits=\"%lu\"", "Breakpoint #%d in #%lu at %s:%u, hits: %lu",
+                        phpdbg_notice("Breakpoint #%d in %s:%lu at %s:%u, hits: %lu",
                                ((phpdbg_breakopline_t*)brake)->id,
+                               ((phpdbg_breakopline_t*)brake)->class_name,
                                ((phpdbg_breakopline_t*)brake)->opline_num,
                                zend_get_executed_filename(TSRMLS_C),
                                zend_get_executed_lineno(TSRMLS_C),
@@ -1361,7 +1246,7 @@ PHPDBG_API void phpdbg_print_breakpoint(phpdbg_breakbase_t *brake TSRMLS_DC) /*
                } break;
 
                case PHPDBG_BREAK_OPCODE: {
-                        phpdbg_notice("breakpoint", "id=\"%d\" opcode=\"%s\" file=\"%s\" line=\"%ld\" hits=\"%lu\"", "Breakpoint #%d in %s at %s:%u, hits: %lu",
+                        phpdbg_notice("Breakpoint #%d in %s at %s:%u, hits: %lu",
                                ((phpdbg_breakop_t*)brake)->id,
                                ((phpdbg_breakop_t*)brake)->name,
                                zend_get_executed_filename(TSRMLS_C),
@@ -1370,7 +1255,7 @@ PHPDBG_API void phpdbg_print_breakpoint(phpdbg_breakbase_t *brake TSRMLS_DC) /*
                } break;
 
                case PHPDBG_BREAK_METHOD: {
-                        phpdbg_notice("breakpoint", "id=\"%d\" method=\"%s::%s\" file=\"%s\" line=\"%ld\" hits=\"%lu\"", "Breakpoint #%d in %s::%s() at %s:%u, hits: %lu",
+                        phpdbg_notice("Breakpoint #%d in %s::%s() at %s:%u, hits: %lu",
                                ((phpdbg_breakmethod_t*)brake)->id,
                                ((phpdbg_breakmethod_t*)brake)->class_name,
                                ((phpdbg_breakmethod_t*)brake)->func_name,
@@ -1382,7 +1267,7 @@ PHPDBG_API void phpdbg_print_breakpoint(phpdbg_breakbase_t *brake TSRMLS_DC) /*
                case PHPDBG_BREAK_COND: {
                        if (((phpdbg_breakcond_t*)brake)->paramed) {
                                char *param;
-                               phpdbg_notice("breakpoint", "id=\"%d\" location=\"%s\" eval=\"%s\" file=\"%s\" line=\"%ld\" hits=\"%lu\"", "Conditional breakpoint #%d: at %s if %s at %s:%u, hits: %lu",
+                               phpdbg_notice("Conditional breakpoint #%d: at %s if %s %s:%u, hits: %lu",
                                        ((phpdbg_breakcond_t*)brake)->id,
                                        phpdbg_param_tostring(&((phpdbg_breakcond_t*)brake)->param, &param TSRMLS_CC),
                                        ((phpdbg_breakcond_t*)brake)->code,
@@ -1392,7 +1277,7 @@ PHPDBG_API void phpdbg_print_breakpoint(phpdbg_breakbase_t *brake TSRMLS_DC) /*
                                if (param)
                                        free(param);
                        } else {
-                               phpdbg_notice("breakpoint", "id=\"%d\" eval=\"%s\" file=\"%s\" line=\"%ld\" hits=\"%lu\"", "Conditional breakpoint #%d: on %s == true at %s:%u, hits: %lu",
+                               phpdbg_notice("Conditional breakpoint #%d: on %s == true %s:%u, hits: %lu",
                                        ((phpdbg_breakcond_t*)brake)->id,
                                        ((phpdbg_breakcond_t*)brake)->code,
                                        zend_get_executed_filename(TSRMLS_C),
@@ -1404,7 +1289,7 @@ PHPDBG_API void phpdbg_print_breakpoint(phpdbg_breakbase_t *brake TSRMLS_DC) /*
 
                default: {
 unknown:
-                       phpdbg_notice("breakpoint", "id=\"\" file=\"%s\" line=\"%ld\" hits=\"%lu\"", "Unknown breakpoint at %s:%u",
+                       phpdbg_notice("Unknown breakpoint at %s:%u",
                                zend_get_executed_filename(TSRMLS_C),
                                zend_get_executed_lineno(TSRMLS_C));
                }
@@ -1465,19 +1350,17 @@ PHPDBG_API phpdbg_breakbase_t *phpdbg_find_breakbase_ex(zend_ulong id, HashTable
 
 PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
 {
-       phpdbg_xml("<breakpoints %r>");
-
        switch (type) {
                case PHPDBG_BREAK_SYM: if ((PHPDBG_G(flags) & PHPDBG_HAS_SYM_BP)) {
                        HashPosition position;
                        phpdbg_breaksymbol_t *brake;
 
-                       phpdbg_out(SEPARATE "\n");
-                       phpdbg_out("Function Breakpoints:\n");
+                       phpdbg_writeln(SEPARATE);
+                       phpdbg_writeln("Function Breakpoints:");
                        for (zend_hash_internal_pointer_reset_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_SYM], &position);
                             zend_hash_get_current_data_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_SYM], (void**) &brake, &position) == SUCCESS;
                             zend_hash_move_forward_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_SYM], &position)) {
-                               phpdbg_writeln("function", "id=\"%d\" name=\"%s\" disabled=\"%s\"", "#%d\t\t%s%s",
+                               phpdbg_writeln("#%d\t\t%s%s",
                                        brake->id, brake->symbol,
                                        ((phpdbg_breakbase_t*)brake)->disabled ? " [disabled]" : "");
                        }
@@ -1490,8 +1373,8 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                        zend_uint class_len = 0;
                        zend_ulong class_idx = 0L;
 
-                       phpdbg_out(SEPARATE "\n");
-                       phpdbg_out("Method Breakpoints:\n");
+                       phpdbg_writeln(SEPARATE);
+                       phpdbg_writeln("Method Breakpoints:");
                        for (zend_hash_internal_pointer_reset_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD], &position[0]);
                             zend_hash_get_current_data_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD], (void**) &class_table, &position[0]) == SUCCESS;
                             zend_hash_move_forward_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD], &position[0])) {
@@ -1503,7 +1386,7 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                                        for (zend_hash_internal_pointer_reset_ex(class_table, &position[1]);
                                             zend_hash_get_current_data_ex(class_table, (void**)&brake, &position[1]) == SUCCESS;
                                             zend_hash_move_forward_ex(class_table, &position[1])) {
-                                               phpdbg_writeln("method", "id=\"%d\" name=\"%s::%s\" disabled=\"%s\"", "#%d\t\t%s::%s%s",
+                                               phpdbg_writeln("#%d\t\t%s::%s%s",
                                                        brake->id, brake->class_name, brake->func_name,
                                                        ((phpdbg_breakbase_t*)brake)->disabled ? " [disabled]" : "");
                                        }
@@ -1516,8 +1399,8 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                        HashPosition position[2];
                        HashTable *points;
 
-                       phpdbg_out(SEPARATE "\n");
-                       phpdbg_out("File Breakpoints:\n");
+                       phpdbg_writeln(SEPARATE);
+                       phpdbg_writeln("File Breakpoints:");
                        for (zend_hash_internal_pointer_reset_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE], &position[0]);
                             zend_hash_get_current_data_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE], (void**) &points, &position[0]) == SUCCESS;
                             zend_hash_move_forward_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE], &position[0])) {
@@ -1526,26 +1409,7 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                                for (zend_hash_internal_pointer_reset_ex(points, &position[1]);
                                     zend_hash_get_current_data_ex(points, (void**)&brake, &position[1]) == SUCCESS;
                                     zend_hash_move_forward_ex(points, &position[1])) {
-                                       phpdbg_writeln("file", "id=\"%d\" name=\"%s\" line=\"%lu\" disabled=\"%s\"", "#%d\t\t%s:%lu%s",
-                                               brake->id, brake->filename, brake->line,
-                                               ((phpdbg_breakbase_t*)brake)->disabled ? " [disabled]" : "");
-                               }
-                       }
-               }  if ((PHPDBG_G(flags) & PHPDBG_HAS_PENDING_FILE_BP)) {
-                       HashPosition position[2];
-                       HashTable *points;
-
-                       phpdbg_out(SEPARATE "\n");
-                       phpdbg_out("Pending File Breakpoints:\n");
-                       for (zend_hash_internal_pointer_reset_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE_PENDING], &position[0]);
-                            zend_hash_get_current_data_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE_PENDING], (void**) &points, &position[0]) == SUCCESS;
-                            zend_hash_move_forward_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE_PENDING], &position[0])) {
-                               phpdbg_breakfile_t *brake;
-
-                               for (zend_hash_internal_pointer_reset_ex(points, &position[1]);
-                                    zend_hash_get_current_data_ex(points, (void**)&brake, &position[1]) == SUCCESS;
-                                    zend_hash_move_forward_ex(points, &position[1])) {
-                                       phpdbg_writeln("file", "id=\"%d\" name=\"%s\" line=\"%lu\" disabled=\"%s\" pending=\"pending\"", "#%d\t\t%s:%lu%s",
+                                       phpdbg_writeln("#%d\t\t%s:%lu%s",
                                                brake->id, brake->filename, brake->line,
                                                ((phpdbg_breakbase_t*)brake)->disabled ? " [disabled]" : "");
                                }
@@ -1557,8 +1421,8 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                        HashPosition position;
                        phpdbg_breakline_t *brake;
 
-                       phpdbg_out(SEPARATE "\n");
-                       phpdbg_out("Opline Breakpoints:\n");
+                       phpdbg_writeln(SEPARATE);
+                       phpdbg_writeln("Opline Breakpoints:");
                        for (zend_hash_internal_pointer_reset_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE], &position);
                             zend_hash_get_current_data_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE], (void**) &brake, &position) == SUCCESS;
                             zend_hash_move_forward_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE], &position)) {
@@ -1566,16 +1430,16 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                                        case PHPDBG_BREAK_METHOD_OPLINE:
                                        case PHPDBG_BREAK_FUNCTION_OPLINE:
                                        case PHPDBG_BREAK_FILE_OPLINE:
-                                               phpdbg_writeln("opline", "id=\"%d\" num=\"%#lx\" type=\"%s\" disabled=\"%s\"", "#%d\t\t%#lx\t\t(%s breakpoint)%s", brake->id, brake->opline,
-                                                       brake->type == PHPDBG_BREAK_METHOD_OPLINE ? "method" :
-                                                               brake->type == PHPDBG_BREAK_FUNCTION_OPLINE ? "function" :
-                                                                       brake->type == PHPDBG_BREAK_FILE_OPLINE ? "file" :
+                                               phpdbg_writeln("#%d\t\t%#lx\t\t(%s breakpoint)%s", brake->id, brake->opline,
+                                                       brake->type == PHPDBG_BREAK_METHOD_OPLINE?"method":
+                                                               brake->type == PHPDBG_BREAK_FUNCTION_OPLINE?"function":
+                                                                       brake->type == PHPDBG_BREAK_FILE_OPLINE?"file":
                                                                                "--- error ---",
                                                        ((phpdbg_breakbase_t*)brake)->disabled ? " [disabled]" : "");
                                                break;
 
                                        default:
-                                               phpdbg_writeln("opline", "id=\"%d\" num=\"%#lx\" disabled=\"%s\"", "#%d\t\t%#lx%s", brake->id, brake->opline, ((phpdbg_breakbase_t*)brake)->disabled ? " [disabled]" : "");
+                                               phpdbg_writeln("#%d\t\t%#lx", brake->id, brake->opline);
                                                break;
                                }
                        }
@@ -1588,8 +1452,8 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                        zend_uint class_len = 0, method_len = 0;
                        zend_ulong class_idx = 0L, method_idx = 0L;
 
-                       phpdbg_out(SEPARATE "\n");
-                       phpdbg_out("Method opline Breakpoints:\n");
+                       phpdbg_writeln(SEPARATE);
+                       phpdbg_writeln("Method opline Breakpoints:");
                        for (zend_hash_internal_pointer_reset_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD_OPLINE], &position[0]);
                             zend_hash_get_current_data_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD_OPLINE], (void**) &class_table, &position[0]) == SUCCESS;
                             zend_hash_move_forward_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD_OPLINE], &position[0])) {
@@ -1609,7 +1473,7 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                                                        for (zend_hash_internal_pointer_reset_ex(method_table, &position[2]);
                                                             zend_hash_get_current_data_ex(method_table, (void**)&brake, &position[2]) == SUCCESS;
                                                             zend_hash_move_forward_ex(method_table, &position[2])) {
-                                                               phpdbg_writeln("methodopline", "id=\"%d\" name=\"%s::%s\" num=\"%ld\" disabled=\"%s\"", "#%d\t\t%s::%s opline %ld%s",
+                                                               phpdbg_writeln("#%d\t\t%s::%s opline %ld%s",
                                                                        brake->id, brake->class_name, brake->func_name, brake->opline_num,
                                                                        ((phpdbg_breakbase_t*)brake)->disabled ? " [disabled]" : "");
                                                        }
@@ -1627,8 +1491,8 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                        zend_uint function_len = 0;
                        zend_ulong function_idx = 0L;
 
-                       phpdbg_out(SEPARATE "\n");
-                       phpdbg_out("Function opline Breakpoints:\n");
+                       phpdbg_writeln(SEPARATE);
+                       phpdbg_writeln("Function opline Breakpoints:");
                        for (zend_hash_internal_pointer_reset_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_FUNCTION_OPLINE], &position[0]);
                             zend_hash_get_current_data_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_FUNCTION_OPLINE], (void**) &function_table, &position[0]) == SUCCESS;
                             zend_hash_move_forward_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_FUNCTION_OPLINE], &position[0])) {
@@ -1641,7 +1505,7 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                                        for (zend_hash_internal_pointer_reset_ex(function_table, &position[1]);
                                             zend_hash_get_current_data_ex(function_table, (void**)&brake, &position[1]) == SUCCESS;
                                             zend_hash_move_forward_ex(function_table, &position[1])) {
-                                               phpdbg_writeln("functionopline", "id=\"%d\" name=\"%s\" num=\"%ld\" disabled=\"%s\"", "#%d\t\t%s opline %ld%s",
+                                               phpdbg_writeln("#%d\t\t%s opline %ld%s",
                                                        brake->id, brake->func_name, brake->opline_num,
                                                        ((phpdbg_breakbase_t*)brake)->disabled ? " [disabled]" : "");
                                        }
@@ -1657,8 +1521,8 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                        zend_uint file_len = 0;
                        zend_ulong file_idx = 0L;
 
-                       phpdbg_out(SEPARATE "\n");
-                       phpdbg_out("File opline Breakpoints:\n");
+                       phpdbg_writeln(SEPARATE);
+                       phpdbg_writeln("File opline Breakpoints:");
                        for (zend_hash_internal_pointer_reset_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE_OPLINE], &position[0]);
                             zend_hash_get_current_data_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE_OPLINE], (void**) &file_table, &position[0]) == SUCCESS;
                             zend_hash_move_forward_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE_OPLINE], &position[0])) {
@@ -1671,7 +1535,7 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                                        for (zend_hash_internal_pointer_reset_ex(file_table, &position[1]);
                                             zend_hash_get_current_data_ex(file_table, (void**)&brake, &position[1]) == SUCCESS;
                                             zend_hash_move_forward_ex(file_table, &position[1])) {
-                                               phpdbg_writeln("fileopline", "id=\"%d\" name=\"%s\" num=\"%ld\" disabled=\"%s\"", "#%d\t\t%s opline %ld%s",
+                                               phpdbg_writeln("#%d\t\t%s opline %ld%s",
                                                        brake->id, brake->class_name, brake->opline_num,
                                                        ((phpdbg_breakbase_t*)brake)->disabled ? " [disabled]" : "");
                                        }
@@ -1683,15 +1547,15 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                        HashPosition position;
                        phpdbg_breakcond_t *brake;
 
-                       phpdbg_out(SEPARATE "\n");
-                       phpdbg_out("Conditional Breakpoints:\n");
+                       phpdbg_writeln(SEPARATE);
+                       phpdbg_writeln("Conditional Breakpoints:");
                        for (zend_hash_internal_pointer_reset_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_COND], &position);
                             zend_hash_get_current_data_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_COND], (void**) &brake, &position) == SUCCESS;
                             zend_hash_move_forward_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_COND], &position)) {
                                if (brake->paramed) {
                                        switch (brake->param.type) {
                                                case STR_PARAM:
-                                                       phpdbg_writeln("evalfunction", "id=\"%d\" name=\"%s\" eval=\"%s\" disabled=\"%s\"", "#%d\t\tat %s if %s%s",
+                                                       phpdbg_writeln("#%d\t\tat %s if %s%s",
                                                                brake->id,
                                                                brake->param.str,
                                                                brake->code,
@@ -1699,7 +1563,7 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                                                break;
 
                                                case NUMERIC_FUNCTION_PARAM:
-                                                       phpdbg_writeln("evalfunctionopline", "id=\"%d\" name=\"%s\" num=\"%ld\" eval=\"%s\" disabled=\"%s\"", "#%d\t\tat %s#%ld if %s%s",
+                                                       phpdbg_writeln("#%d\t\tat %s#%ld if %s%s",
                                                                brake->id,
                                                                brake->param.str,
                                                                brake->param.num,
@@ -1708,7 +1572,7 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                                                break;
 
                                                case METHOD_PARAM:
-                                                       phpdbg_writeln("evalmethod", "id=\"%d\" name=\"%s::%s\" eval=\"%s\" disabled=\"%s\"", "#%d\t\tat %s::%s if %s%s",
+                                                       phpdbg_writeln("#%d\t\tat %s::%s if %s%s",
                                                                brake->id,
                                                                brake->param.method.class,
                                                                brake->param.method.name,
@@ -1717,7 +1581,7 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                                                break;
 
                                                case NUMERIC_METHOD_PARAM:
-                                                       phpdbg_writeln("evalmethodopline", "id=\"%d\" name=\"%s::%s\" num=\"%d\" eval=\"%s\" disabled=\"%s\"", "#%d\t\tat %s::%s#%ld if %s%s",
+                                                       phpdbg_writeln("#%d\t\tat %s::%s#%ld if %s%s",
                                                                brake->id,
                                                                brake->param.method.class,
                                                                brake->param.method.name,
@@ -1727,7 +1591,7 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                                                break;
 
                                                case FILE_PARAM:
-                                                       phpdbg_writeln("evalfile", "id=\"%d\" name=\"%s\" line=\"%d\" eval=\"%s\" disabled=\"%s\"", "#%d\t\tat %s:%lu if %s%s",
+                                                       phpdbg_writeln("#%d\t\tat %s:%lu if %s%s",
                                                                brake->id,
                                                                brake->param.file.name,
                                                                brake->param.file.line,
@@ -1736,7 +1600,7 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                                                break;
 
                                                case ADDR_PARAM:
-                                                       phpdbg_writeln("evalopline", "id=\"%d\" opline=\"%#lx\" eval=\"%s\" disabled=\"%s\"", "#%d\t\tat #%lx if %s%s",
+                                                       phpdbg_writeln("#%d\t\tat #%lx if %s%s",
                                                                brake->id,
                                                                brake->param.addr,
                                                                brake->code,
@@ -1744,11 +1608,11 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                                                break;
 
                                                default:
-                                                       phpdbg_error("eval", "type=\"invalidparameter\"", "Invalid parameter type for conditional breakpoint");
+                                                       phpdbg_error("Invalid parameter type for conditional breakpoint");
                                                return;
                                        }
                                } else {
-                                       phpdbg_writeln("eval", "id=\"%d\" eval=\"%s\" disabled=\"%s\"", "#%d\t\tif %s%s",
+                                       phpdbg_writeln("#%d\t\tif %s%s",
                                                brake->id, brake->code,
                                                ((phpdbg_breakbase_t*)brake)->disabled ? " [disabled]" : "");
                                }
@@ -1759,17 +1623,15 @@ PHPDBG_API void phpdbg_print_breakpoints(zend_ulong type TSRMLS_DC) /* {{{ */
                        HashPosition position;
                        phpdbg_breakop_t *brake;
 
-                       phpdbg_out(SEPARATE "\n");
-                       phpdbg_out("Opcode Breakpoints:\n");
+                       phpdbg_writeln(SEPARATE);
+                       phpdbg_writeln("Opcode Breakpoints:");
                        for (zend_hash_internal_pointer_reset_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_OPCODE], &position);
                             zend_hash_get_current_data_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_OPCODE], (void**) &brake, &position) == SUCCESS;
                             zend_hash_move_forward_ex(&PHPDBG_G(bp)[PHPDBG_BREAK_OPCODE], &position)) {
-                               phpdbg_writeln("opcode", "id=\"%d\" name=\"%s\" disabled=\"%s\"", "#%d\t\t%s%s",
+                               phpdbg_writeln("#%d\t\t%s%s",
                                        brake->id, brake->name,
                                        ((phpdbg_breakbase_t*)brake)->disabled ? " [disabled]" : "");
                        }
                } break;
        }
-
-       phpdbg_xml("</breakpoints>");
 } /* }}} */
index 63a9961d2a876f88b85617aa309366ca77586a60..97980e7ed78c215abed739c4262979ba2ca9db9c 100644 (file)
 #ifndef PHPDBG_BP_H
 #define PHPDBG_BP_H
 
-/* {{{ defines */
-#define PHPDBG_BREAK_FILE            0
-#define PHPDBG_BREAK_FILE_PENDING    1
-#define PHPDBG_BREAK_SYM             2
-#define PHPDBG_BREAK_OPLINE          3
-#define PHPDBG_BREAK_METHOD          4
-#define PHPDBG_BREAK_COND            5
-#define PHPDBG_BREAK_OPCODE          6
-#define PHPDBG_BREAK_FUNCTION_OPLINE 7
-#define PHPDBG_BREAK_METHOD_OPLINE   8
-#define PHPDBG_BREAK_FILE_OPLINE     9
-#define PHPDBG_BREAK_MAP             10
-#define PHPDBG_BREAK_TABLES          11 /* }}} */
-
 /* {{{ */
 typedef struct _zend_op *phpdbg_opline_ptr_t; /* }}} */
 
@@ -117,12 +103,10 @@ typedef struct _phpdbg_breakcond_t {
        zend_op_array  *ops;
 } phpdbg_breakcond_t;
 
-/* {{{ Resolving breaks API */
+/* {{{ Opline breaks API */
 PHPDBG_API void phpdbg_resolve_op_array_breaks(zend_op_array *op_array TSRMLS_DC);
 PHPDBG_API int phpdbg_resolve_op_array_break(phpdbg_breakopline_t *brake, zend_op_array *op_array TSRMLS_DC);
-PHPDBG_API int phpdbg_resolve_opline_break(phpdbg_breakopline_t *new_break TSRMLS_DC);
-PHPDBG_API HashTable *phpdbg_resolve_pending_file_break_ex(const char *file, uint filelen, const char *cur, uint curlen, HashTable *fileht TSRMLS_DC);
-PHPDBG_API void phpdbg_resolve_pending_file_break(const char *file TSRMLS_DC); /* }}} */
+PHPDBG_API int phpdbg_resolve_opline_break(phpdbg_breakopline_t *new_break TSRMLS_DC); /* }}} */
 
 /* {{{ Breakpoint Creation API */
 PHPDBG_API void phpdbg_set_breakpoint_file(const char* filename, long lineno TSRMLS_DC);
@@ -157,7 +141,6 @@ PHPDBG_API phpdbg_breakbase_t *phpdbg_find_breakbase(zend_ulong id TSRMLS_DC);
 PHPDBG_API phpdbg_breakbase_t *phpdbg_find_breakbase_ex(zend_ulong id, HashTable ***table, HashPosition *position TSRMLS_DC); /* }}} */
 
 /* {{{ Breakpoint Exportation API */
-PHPDBG_API void phpdbg_export_breakpoints(FILE *handle TSRMLS_DC);
-PHPDBG_API void phpdbg_export_breakpoints_to_string(char **str TSRMLS_DC); /* }}} */
+PHPDBG_API void phpdbg_export_breakpoints(FILE *handle TSRMLS_DC); /* }}} */
 
 #endif /* PHPDBG_BP_H */
index 386d4d95620dcdd2e5fcba88a6031db4f8195df9..be76b22b05965b03e5657174e6f5f2c136d085ff 100644 (file)
 
 ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
 
-#define PHPDBG_BREAK_COMMAND_D(f, h, a, m, l, s, flags) \
-       PHPDBG_COMMAND_D_EXP(f, h, a, m, l, s, &phpdbg_prompt_commands[10], flags)
+#define PHPDBG_BREAK_COMMAND_D(f, h, a, m, l, s) \
+       PHPDBG_COMMAND_D_EXP(f, h, a, m, l, s, &phpdbg_prompt_commands[10])
 
 /**
  * Commands
  */
 const phpdbg_command_t phpdbg_break_commands[] = {
-       PHPDBG_BREAK_COMMAND_D(at,         "specify breakpoint by location and condition",           '@', break_at,      NULL, "*c", 0),
-       PHPDBG_BREAK_COMMAND_D(del,        "delete breakpoint by identifier number",                 '~', break_del,     NULL, "n",  0),
+       PHPDBG_BREAK_COMMAND_D(at,         "specify breakpoint by location and condition",           '@', break_at,      NULL, "*c"),
+       PHPDBG_BREAK_COMMAND_D(del,        "delete breakpoint by identifier number",                 '~', break_del,     NULL, "n"),
        PHPDBG_END_COMMAND
 };
 
index a170d52955586072196234b659a74ff391c79659..5290639dcb3eb5e5a92250270ce7544d124aea6f 100644 (file)
@@ -23,7 +23,6 @@
 #include "phpdbg_utils.h"
 #include "phpdbg_set.h"
 #include "phpdbg_prompt.h"
-#include "phpdbg_io.h"
 
 ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
 
@@ -40,7 +39,7 @@ static inline const char *phpdbg_command_name(const phpdbg_command_t *command, c
        memcpy(&buffer[pos], command->name, command->name_len);
        pos += command->name_len;
        buffer[pos] = 0;
-
+       
        return buffer;
 }
 
@@ -159,12 +158,12 @@ PHPDBG_API void phpdbg_copy_param(const phpdbg_param_t* src, phpdbg_param_t* des
                case STACK_PARAM:
                        /* nope */
                break;
-
+               
                case STR_PARAM:
                        dest->str = estrndup(src->str, src->len);
                        dest->len = src->len;
                break;
-
+               
                case OP_PARAM:
                        dest->str = estrndup(src->str, src->len);
                        dest->len = src->len;
@@ -204,7 +203,7 @@ PHPDBG_API void phpdbg_copy_param(const phpdbg_param_t* src, phpdbg_param_t* des
                break;
 
                case EMPTY_PARAM: { /* do nothing */ } break;
-
+               
                default: {
                        /* not yet */
                }
@@ -219,7 +218,7 @@ PHPDBG_API zend_ulong phpdbg_hash_param(const phpdbg_param_t *param TSRMLS_DC) /
                case STACK_PARAM:
                        /* nope */
                break;
-
+               
                case STR_PARAM:
                        hash += zend_inline_hash_func(param->str, param->len);
                break;
@@ -257,7 +256,7 @@ PHPDBG_API zend_ulong phpdbg_hash_param(const phpdbg_param_t *param TSRMLS_DC) /
                break;
 
                case EMPTY_PARAM: { /* do nothing */ } break;
-
+               
                default: {
                        /* not yet */
                }
@@ -275,7 +274,7 @@ PHPDBG_API zend_bool phpdbg_match_param(const phpdbg_param_t *l, const phpdbg_pa
                                        /* nope, or yep */
                                        return 1;
                                break;
-
+                               
                                case NUMERIC_FUNCTION_PARAM:
                                        if (l->num != r->num) {
                                                break;
@@ -330,7 +329,7 @@ PHPDBG_API zend_bool phpdbg_match_param(const phpdbg_param_t *l, const phpdbg_pa
 
                                case EMPTY_PARAM:
                                        return 1;
-
+                                       
                                default: {
                                        /* not yet */
                                }
@@ -347,43 +346,43 @@ PHPDBG_API void phpdbg_param_debug(const phpdbg_param_t *param, const char *msg)
                        case STR_PARAM:
                                fprintf(stderr, "%s STR_PARAM(%s=%lu)\n", msg, param->str, param->len);
                        break;
-
+                       
                        case ADDR_PARAM:
                                fprintf(stderr, "%s ADDR_PARAM(%lu)\n", msg, param->addr);
                        break;
-
+                       
                        case NUMERIC_FILE_PARAM:
                                fprintf(stderr, "%s NUMERIC_FILE_PARAM(%s:#%lu)\n", msg, param->file.name, param->file.line);
                        break;
-
+                       
                        case FILE_PARAM:
                                fprintf(stderr, "%s FILE_PARAM(%s:%lu)\n", msg, param->file.name, param->file.line);
                        break;
-
+                       
                        case METHOD_PARAM:
                                fprintf(stderr, "%s METHOD_PARAM(%s::%s)\n", msg, param->method.class, param->method.name);
                        break;
-
+                       
                        case NUMERIC_METHOD_PARAM:
                                fprintf(stderr, "%s NUMERIC_METHOD_PARAM(%s::%s)\n", msg, param->method.class, param->method.name);
                        break;
-
+                       
                        case NUMERIC_FUNCTION_PARAM:
                                fprintf(stderr, "%s NUMERIC_FUNCTION_PARAM(%s::%ld)\n", msg, param->str, param->num);
                        break;
-
+                       
                        case NUMERIC_PARAM:
                                fprintf(stderr, "%s NUMERIC_PARAM(%ld)\n", msg, param->num);
                        break;
-
+                       
                        case COND_PARAM:
                                fprintf(stderr, "%s COND_PARAM(%s=%lu)\n", msg, param->str, param->len);
                        break;
-
+                       
                        case OP_PARAM:
                                fprintf(stderr, "%s OP_PARAM(%s=%lu)\n", msg, param->str, param->len);
                        break;
-
+                       
                        default: {
                                /* not yet */
                        }
@@ -395,13 +394,13 @@ PHPDBG_API void phpdbg_param_debug(const phpdbg_param_t *param, const char *msg)
 PHPDBG_API void phpdbg_stack_free(phpdbg_param_t *stack) {
        if (stack && stack->next) {
                phpdbg_param_t *remove = stack->next;
-
+               
                while (remove) {
                        phpdbg_param_t *next = NULL;
-
+                       
                        if (remove->next)
                                next = remove->next;
-
+                       
                        switch (remove->type) {
                                case NUMERIC_METHOD_PARAM:
                                case METHOD_PARAM:
@@ -415,30 +414,29 @@ PHPDBG_API void phpdbg_stack_free(phpdbg_param_t *stack) {
                                case STR_PARAM:
                                case OP_PARAM:
                                        if (remove->str)
-                                               free(remove->str);
+                                               free(remove->str);      
                                break;
-
+                               
                                case NUMERIC_FILE_PARAM:
                                case FILE_PARAM:
                                        if (remove->file.name)
                                                free(remove->file.name);
                                break;
-
+                               
                                default: {
                                        /* nothing */
                                }
                        }
-
+                       
                        free(remove);
                        remove = NULL;
-
+                       
                        if (next)
-                               remove = next;
+                               remove = next; 
                        else break;
                }
        }
-
-
+       
        stack->next = NULL;
 } /* }}} */
 
@@ -466,29 +464,30 @@ PHPDBG_API void phpdbg_stack_push(phpdbg_param_t *stack, phpdbg_param_t *param)
        stack->len++;
 } /* }}} */
 
-PHPDBG_API int phpdbg_stack_verify(const phpdbg_command_t *command, phpdbg_param_t **stack TSRMLS_DC) {
+PHPDBG_API int phpdbg_stack_verify(const phpdbg_command_t *command, phpdbg_param_t **stack, char **why TSRMLS_DC) {
        if (command) {
                char buffer[128] = {0,};
                const phpdbg_param_t *top = (stack != NULL) ? *stack : NULL;
                const char *arg = command->args;
                size_t least = 0L,
-                      received = 0L,
-                      current = 0L;
+                          received = 0L,
+                          current = 0L;
                zend_bool optional = 0;
-
+               
                /* check for arg spec */
                if (!(arg) || !(*arg)) {
                        if (!top) {
                                return SUCCESS;
                        }
-
-                       phpdbg_error("command", "type=\"toomanyargs\" command=\"%s\" expected=\"0\"", "The command \"%s\" expected no arguments", 
+                       
+                       asprintf(why,
+                               "The command \"%s\" expected no arguments", 
                                phpdbg_command_name(command, buffer));
                        return FAILURE;
                }
-
+               
                least = 0L;
-
+               
                /* count least amount of arguments */
                while (arg && *arg) {
                        if (arg[0] == '|') {
@@ -497,19 +496,21 @@ PHPDBG_API int phpdbg_stack_verify(const phpdbg_command_t *command, phpdbg_param
                        least++;
                        arg++;
                }
-
+               
                arg = command->args;
 
 #define verify_arg(e, a, t) if (!(a)) { \
        if (!optional) { \
-               phpdbg_error("command", "type=\"noarg\" command=\"%s\" expected=\"%s\" num=\"%lu\"", "The command \"%s\" expected %s and got nothing at parameter %lu", \
+               asprintf(why, \
+                       "The command \"%s\" expected %s and got nothing at parameter %lu", \
                        phpdbg_command_name(command, buffer), \
                        (e), \
                        current); \
                return FAILURE;\
        } \
 } else if ((a)->type != (t)) { \
-       phpdbg_error("command", "type=\"wrongarg\" command=\"%s\" expected=\"%s\" got=\"%s\" num=\"%lu\"", "The command \"%s\" expected %s and got %s at parameter %lu", \
+       asprintf(why, \
+               "The command \"%s\" expected %s and got %s at parameter %lu", \
                phpdbg_command_name(command, buffer), \
                (e),\
                phpdbg_get_param_type((a) TSRMLS_CC), \
@@ -519,14 +520,14 @@ PHPDBG_API int phpdbg_stack_verify(const phpdbg_command_t *command, phpdbg_param
 
                while (arg && *arg) {
                        current++;
-
+                       
                        switch (*arg) {
                                case '|': {
                                        current--;
                                        optional = 1;
                                        arg++;
                                } continue;
-
+                               
                                case 'i': verify_arg("raw input", top, STR_PARAM); break;
                                case 's': verify_arg("string", top, STR_PARAM); break;
                                case 'n': verify_arg("number", top, NUMERIC_PARAM); break;
@@ -536,14 +537,14 @@ PHPDBG_API int phpdbg_stack_verify(const phpdbg_command_t *command, phpdbg_param
                                case 'c': verify_arg("condition", top, COND_PARAM); break;
                                case 'o': verify_arg("opcode", top, OP_PARAM); break;
                                case 'b': verify_arg("boolean", top, NUMERIC_PARAM); break;
-
+                               
                                case '*': { /* do nothing */ } break;
                        }
-
+                       
                        if (top ) {
                                top = top->next;
                        } else break;
-
+                       
                        received++;
                        arg++;
                }
@@ -551,27 +552,28 @@ PHPDBG_API int phpdbg_stack_verify(const phpdbg_command_t *command, phpdbg_param
 #undef verify_arg
 
                if ((received < least)) {
-                       phpdbg_error("command", "type=\"toofewargs\" command=\"%s\" expected=\"%d\" argtypes=\"%s\" got=\"%d\"", "The command \"%s\" expected at least %lu arguments (%s) and received %lu",
+                       asprintf(why,
+                               "The command \"%s\" expected at least %lu arguments (%s) and received %lu",
                                phpdbg_command_name(command, buffer),
                                least,
-                               command->args,
+                               command->args, 
                                received);
                        return FAILURE;
                }
        }
-
+       
        return SUCCESS;
 }
 
 /* {{{ */
-PHPDBG_API const phpdbg_command_t *phpdbg_stack_resolve(const phpdbg_command_t *commands, const phpdbg_command_t *parent, phpdbg_param_t **top TSRMLS_DC) {
+PHPDBG_API const phpdbg_command_t* phpdbg_stack_resolve(const phpdbg_command_t *commands, const phpdbg_command_t *parent, phpdbg_param_t **top, char **why) {
        const phpdbg_command_t *command = commands;
        phpdbg_param_t *name = *top;
        const phpdbg_command_t *matched[3] = {NULL, NULL, NULL};
        ulong matches = 0L;
-
+       
        while (command && command->name && command->handler) {
-               if (name->len == 1 || command->name_len >= name->len) {
+               if ((name->len == 1) || (command->name_len >= name->len)) {
                        /* match single letter alias */
                        if (command->alias && (name->len == 1)) {
                                if (command->alias == (*name->str)) {
@@ -579,76 +581,85 @@ PHPDBG_API const phpdbg_command_t *phpdbg_stack_resolve(const phpdbg_command_t *
                                        matches++;
                                }
                        } else {
+
                                /* match full, case insensitive, command name */
                                if (strncasecmp(command->name, name->str, name->len) == SUCCESS) {
                                        if (matches < 3) {
+                                               
                                                /* only allow abbreviating commands that can be aliased */
-                                               if ((name->len != command->name_len && command->alias) || name->len == command->name_len) {
+                                               if (((name->len != command->name_len) && command->alias) ||
+                                                       (name->len == command->name_len)) {
                                                        matched[matches] = command;
                                                        matches++;
                                                }
-
+                                               
+                                               
                                                /* exact match */
-                                               if (name->len == command->name_len) {
+                                               if (name->len == command->name_len)
                                                        break;
-                                               }
-                                       } else {
-                                               break;
-                                       }
+                                       } else break;
                                }
                        }
                }
-
+               
                command++;
        }
-
+       
        switch (matches) {
-               case 0:
+               case 0: {
                        if (parent) {
-                               phpdbg_error("command", "type=\"notfound\" command=\"%s\" subcommand=\"%s\"", "The command \"%s %s\" could not be found", parent->name, name->str);
-                       } else {
-                               phpdbg_error("command", "type=\"notfound\" command=\"%s\"", "The command \"%s\" could not be found", name->str);
-                       }
-                       return parent;
-
-               case 1:
+                               asprintf(
+                               why,
+                               "The command \"%s %s\" could not be found", 
+                               parent->name, name->str);
+                       } else asprintf(
+                               why,
+                               "The command \"%s\" could not be found", 
+                               name->str);
+               } return parent;
+               
+               case 1: {
                        (*top) = (*top)->next;
 
                        command = matched[0];
-                       break;
-
+               } break;
+               
                default: {
                        char *list = NULL;
                        zend_uint it = 0;
                        size_t pos = 0;
-
+                       
                        while (it < matches) {
                                if (!list) {
-                                       list = emalloc(matched[it]->name_len + 1 + (it + 1 < matches ? sizeof(", ") - 1 : 0));
+                                       list = malloc(
+                                               matched[it]->name_len + 1 + 
+                                               ((it+1) < matches ? sizeof(", ")-1 : 0));
                                } else {
-                                       list = erealloc(list, (pos + matched[it]->name_len) + 1 + (it + 1 < matches ? sizeof(", ") - 1 : 0));
+                                       list = realloc(list, 
+                                               (pos + matched[it]->name_len) + 1  + 
+                                               ((it+1) < matches ? sizeof(", ")-1 : 0));
                                }
                                memcpy(&list[pos], matched[it]->name, matched[it]->name_len);
                                pos += matched[it]->name_len;
-                               if ((it + 1) < matches) {
-                                       memcpy(&list[pos], ", ", sizeof(", ") - 1);
+                               if ((it+1) < matches) {
+                                       memcpy(&list[pos], ", ", sizeof(", ")-1);
                                        pos += (sizeof(", ") - 1);
                                }
-
+                               
                                list[pos] = 0;
                                it++;
                        }
-
-                       /* ", " separated matches */
-                       phpdbg_error("command", "type=\"ambiguous\" command=\"%s\" matches=\"%lu\" matched=\"%s\"", "The command \"%s\" is ambigious, matching %lu commands (%s)", name->str, matches, list);
-                       efree(list);
-
-                       return NULL;
-               }
+                       
+                       asprintf(
+                               why,
+                               "The command \"%s\" is ambigious, matching %lu commands (%s)", 
+                               name->str, matches, list);
+                       free(list);
+               } return NULL;
        }
 
        if (command->subs && (*top) && ((*top)->type == STR_PARAM)) {
-               return phpdbg_stack_resolve(command->subs, command, top TSRMLS_CC);
+               return phpdbg_stack_resolve(command->subs, command, top, why);
        } else {
                return command;
        }
@@ -657,97 +668,102 @@ PHPDBG_API const phpdbg_command_t *phpdbg_stack_resolve(const phpdbg_command_t *
 } /* }}} */
 
 /* {{{ */
-PHPDBG_API int phpdbg_stack_execute(phpdbg_param_t *stack, zend_bool allow_async_unsafe TSRMLS_DC) {
+PHPDBG_API int phpdbg_stack_execute(phpdbg_param_t *stack, char **why TSRMLS_DC) {
        phpdbg_param_t *top = NULL;
        const phpdbg_command_t *handler = NULL;
-
+       
        if (stack->type != STACK_PARAM) {
-               phpdbg_error("command", "type=\"nostack\"", "The passed argument was not a stack !");
+               asprintf(
+                       why, "The passed argument was not a stack !!");
                return FAILURE;
        }
-
+       
        if (!stack->len) {
-               phpdbg_error("command", "type=\"emptystack\"", "The stack contains nothing !");
+               asprintf(
+                       why, "The stack contains nothing !!");
                return FAILURE;
        }
-
-       top = (phpdbg_param_t *) stack->next;
-
+       
+       top = (phpdbg_param_t*) stack->next;
+       
        switch (top->type) {
                case EVAL_PARAM:
-                       phpdbg_activate_err_buf(0 TSRMLS_CC);
-                       phpdbg_free_err_buf(TSRMLS_C);
                        return PHPDBG_COMMAND_HANDLER(ev)(top TSRMLS_CC);
 
                case RUN_PARAM:
-                       if (!allow_async_unsafe) {
-                               phpdbg_error("signalsegv", "command=\"run\"", "run command is disallowed during hard interrupt");
-                       }
-                       phpdbg_activate_err_buf(0 TSRMLS_CC);
-                       phpdbg_free_err_buf(TSRMLS_C);
                        return PHPDBG_COMMAND_HANDLER(run)(top TSRMLS_CC);
-
+               
                case SHELL_PARAM:
-                       if (!allow_async_unsafe) {
-                               phpdbg_error("signalsegv", "command=\"sh\"", "sh command is disallowed during hard interrupt");
-                               return FAILURE;
-                       }
-                       phpdbg_activate_err_buf(0 TSRMLS_CC);
-                       phpdbg_free_err_buf(TSRMLS_C);
                        return PHPDBG_COMMAND_HANDLER(sh)(top TSRMLS_CC);
-
+               
                case STR_PARAM: {
-                       handler = phpdbg_stack_resolve(phpdbg_prompt_commands, NULL, &top TSRMLS_CC);
-
+                       handler = phpdbg_stack_resolve(
+                               phpdbg_prompt_commands, NULL, &top, why);
+                       
                        if (handler) {
-                               if (!allow_async_unsafe && !(handler->flags & PHPDBG_ASYNC_SAFE)) {
-                                       phpdbg_error("signalsegv", "command=\"%s\"", "%s command is disallowed during hard interrupt", handler->name);
-                                       return FAILURE;
-                               }
-
-                               if (phpdbg_stack_verify(handler, &top TSRMLS_CC) == SUCCESS) {
-                                       phpdbg_activate_err_buf(0 TSRMLS_CC);
-                                       phpdbg_free_err_buf(TSRMLS_C);
+                               if (phpdbg_stack_verify(handler, &top, why TSRMLS_CC) == SUCCESS) {
                                        return handler->handler(top TSRMLS_CC);
                                }
                        }
                } return FAILURE;
-
+               
                default:
-                       phpdbg_error("command", "type=\"invalidcommand\"", "The first parameter makes no sense !");
+                       asprintf(
+                               why, "The first parameter makes no sense !!");
                        return FAILURE;
        }
-
+       
        return SUCCESS;
 } /* }}} */
 
-PHPDBG_API char *phpdbg_read_input(char *buffered TSRMLS_DC) /* {{{ */
+PHPDBG_API charphpdbg_read_input(char *buffered TSRMLS_DC) /* {{{ */
 {
-       char buf[PHPDBG_MAX_CMD];
        char *cmd = NULL;
+#if !defined(HAVE_LIBREADLINE) && !defined(HAVE_LIBEDIT)
+       char buf[PHPDBG_MAX_CMD];
+#endif
        char *buffer = NULL;
 
-       if ((PHPDBG_G(flags) & (PHPDBG_IS_STOPPING | PHPDBG_IS_RUNNING)) != PHPDBG_IS_STOPPING) {
-               if ((PHPDBG_G(flags) & PHPDBG_IS_REMOTE) && (buffered == NULL) && !phpdbg_active_sigsafe_mem(TSRMLS_C)) {
-                       fflush(PHPDBG_G(io)[PHPDBG_STDOUT].ptr);
+       if (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) {
+               if ((PHPDBG_G(flags) & PHPDBG_IS_REMOTE) &&
+                       (buffered == NULL)) {
+                       fflush(PHPDBG_G(io)[PHPDBG_STDOUT]);
                }
 
                if (buffered == NULL) {
-#define USE_LIB_STAR (defined(HAVE_LIBREADLINE) || defined(HAVE_LIBEDIT))
-                       /* note: EOF makes readline write prompt again in local console mode - and ignored if compiled without readline */
-#if USE_LIB_STAR
-readline:
-                       if (PHPDBG_G(flags) & PHPDBG_IS_REMOTE)
-#endif
-                       {
-                               phpdbg_write("prompt", "", "%s", phpdbg_get_prompt(TSRMLS_C));
-                               phpdbg_consume_stdin_line(cmd = buf TSRMLS_CC);
+disconnect:
+                       if (0) {
+                               PHPDBG_G(flags) |= (PHPDBG_IS_QUITTING|PHPDBG_IS_DISCONNECTED);
+                               zend_bailout();
+                               return NULL;
                        }
-#if USE_LIB_STAR
-                       else {
-                               cmd = readline(phpdbg_get_prompt(TSRMLS_C));
-                               PHPDBG_G(last_was_newline) = 1;
+
+#if !defined(HAVE_LIBREADLINE) && !defined(HAVE_LIBEDIT)
+                       if (!(PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {
+                               if (!phpdbg_write("%s", phpdbg_get_prompt(TSRMLS_C))) {
+                                       goto disconnect;
+                               }
                        }
+                       
+                       /* note: EOF is ignored */
+readline:      
+                       if (!fgets(buf, PHPDBG_MAX_CMD, PHPDBG_G(io)[PHPDBG_STDIN])) {
+                               /* the user has gone away */
+                               if ((PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {
+                                       goto disconnect;
+                               } else goto readline;
+                       }
+
+                       cmd = buf;
+#else
+                       /* note: EOF makes readline write prompt again in local console mode */
+readline:
+                       if ((PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {
+                               char buf[PHPDBG_MAX_CMD];
+                               if (fgets(buf, PHPDBG_MAX_CMD, PHPDBG_G(io)[PHPDBG_STDIN])) {
+                                       cmd = buf;
+                               } else goto disconnect;
+                       } else cmd = readline(phpdbg_get_prompt(TSRMLS_C));
 
                        if (!cmd) {
                                goto readline;
@@ -757,14 +773,13 @@ readline:
                                add_history(cmd);
                        }
 #endif
-               } else {
-                       cmd = buffered;
-               }
-
+               } else cmd = buffered;
+               
                buffer = estrdup(cmd);
 
-#if USE_LIB_STAR
-               if (!buffered && cmd && !(PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {
+#if defined(HAVE_LIBREADLINE) || defined(HAVE_LIBEDIT)
+               if (!buffered && cmd &&
+                       !(PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {
                        free(cmd);
                }
 #endif
@@ -790,7 +805,7 @@ readline:
                        buffer = estrdup(PHPDBG_G(buffer));
                }
        }
-
+       
        return buffer;
 } /* }}} */
 
@@ -799,23 +814,3 @@ PHPDBG_API void phpdbg_destroy_input(char **input TSRMLS_DC) /*{{{ */
        efree(*input);
 } /* }}} */
 
-PHPDBG_API int phpdbg_ask_user_permission(const char *question TSRMLS_DC) {
-       if (!(PHPDBG_G(flags) & PHPDBG_WRITE_XML)) {
-               char buf[PHPDBG_MAX_CMD];
-               phpdbg_out("%s", question);
-               phpdbg_out(" (type y or n): ");
-
-               while (1) {
-                       phpdbg_consume_stdin_line(buf TSRMLS_CC);
-                       if (buf[1] == '\n' && (buf[0] == 'y' || buf[0] == 'n')) {
-                               if (buf[0] == 'y') {
-                                       return SUCCESS;
-                               }
-                               return FAILURE;
-                       }
-                       phpdbg_out("Please enter either y (yes) or n (no): ");
-               }
-       }
-
-       return SUCCESS;
-}
index a79641c0800afccbfbbb82c4d70220e60ae02a81..682dd86186870590b1997f4e8343e4b445c7c3fb 100644 (file)
@@ -86,8 +86,6 @@ struct _phpdbg_param {
 #define YYSTYPE phpdbg_param_t
 #endif
 
-#define PHPDBG_ASYNC_SAFE 1
-
 typedef int (*phpdbg_command_handler_t)(const phpdbg_param_t* TSRMLS_DC);
 
 typedef struct _phpdbg_command_t phpdbg_command_t;
@@ -99,9 +97,8 @@ struct _phpdbg_command_t {
        char alias;                         /* Alias */
        phpdbg_command_handler_t handler;   /* Command handler */
        const phpdbg_command_t *subs;       /* Sub Commands */
-       char *args;                         /* Argument Spec */
-       const phpdbg_command_t *parent;     /* Parent Command */
-       zend_bool flags;                    /* General flags */
+       char *args;                                                     /* Argument Spec */
+       const phpdbg_command_t *parent;         /* Parent Command */                                                    
 };
 /* }}} */
 
@@ -109,7 +106,7 @@ struct _phpdbg_command_t {
 #define PHPDBG_STRL(s) s, sizeof(s)-1
 #define PHPDBG_MAX_CMD 500
 #define PHPDBG_FRAME(v) (PHPDBG_G(frame).v)
-#define PHPDBG_EX(v) (EG(current_execute_data)->v)
+#define PHPDBG_EX(v) (EG(current_execute_data)->v) 
 
 typedef struct {
        int num;
@@ -131,15 +128,14 @@ typedef struct {
 */
 PHPDBG_API char* phpdbg_read_input(char *buffered TSRMLS_DC);
 PHPDBG_API void phpdbg_destroy_input(char** TSRMLS_DC);
-PHPDBG_API int phpdbg_ask_user_permission(const char *question TSRMLS_DC);
 
 /**
  * Stack Management
  */
 PHPDBG_API void phpdbg_stack_push(phpdbg_param_t *stack, phpdbg_param_t *param);
-PHPDBG_API const phpdbg_command_t *phpdbg_stack_resolve(const phpdbg_command_t *commands, const phpdbg_command_t *parent, phpdbg_param_t **top TSRMLS_DC);
-PHPDBG_API int phpdbg_stack_verify(const phpdbg_command_t *command, phpdbg_param_t **stack TSRMLS_DC);
-PHPDBG_API int phpdbg_stack_execute(phpdbg_param_t *stack, zend_bool allow_async_unsafe TSRMLS_DC);
+PHPDBG_API const phpdbg_command_t* phpdbg_stack_resolve(const phpdbg_command_t *commands, const phpdbg_command_t *parent, phpdbg_param_t **top, char **why);
+PHPDBG_API int phpdbg_stack_verify(const phpdbg_command_t *command, phpdbg_param_t **stack, char **why TSRMLS_DC);
+PHPDBG_API int phpdbg_stack_execute(phpdbg_param_t *stack, char **why TSRMLS_DC);
 PHPDBG_API void phpdbg_stack_free(phpdbg_param_t *stack);
 
 /*
@@ -158,27 +154,27 @@ PHPDBG_API void phpdbg_param_debug(const phpdbg_param_t *param, const char *msg)
  */
 #define PHPDBG_COMMAND_HANDLER(name) phpdbg_do_##name
 
-#define PHPDBG_COMMAND_D_EXP(name, tip, alias, handler, children, args, parent, flags) \
-       {PHPDBG_STRL(#name), tip, sizeof(tip)-1, alias, phpdbg_do_##handler, children, args, parent, flags}
+#define PHPDBG_COMMAND_D_EXP(name, tip, alias, handler, children, args, parent) \
+       {PHPDBG_STRL(#name), tip, sizeof(tip)-1, alias, phpdbg_do_##handler, children, args, parent}
 
-#define PHPDBG_COMMAND_D_EX(name, tip, alias, handler, children, args, flags) \
-       {PHPDBG_STRL(#name), tip, sizeof(tip)-1, alias, phpdbg_do_##handler, children, args, NULL, flags}
+#define PHPDBG_COMMAND_D_EX(name, tip, alias, handler, children, args) \
+       {PHPDBG_STRL(#name), tip, sizeof(tip)-1, alias, phpdbg_do_##handler, children, args, NULL}
 
-#define PHPDBG_COMMAND_D(name, tip, alias, children, args, flags) \
-       {PHPDBG_STRL(#name), tip, sizeof(tip)-1, alias, phpdbg_do_##name, children, args, NULL, flags}
+#define PHPDBG_COMMAND_D(name, tip, alias, children, args) \
+       {PHPDBG_STRL(#name), tip, sizeof(tip)-1, alias, phpdbg_do_##name, children, args, NULL}
 
 #define PHPDBG_COMMAND(name) int phpdbg_do_##name(const phpdbg_param_t *param TSRMLS_DC)
 
 #define PHPDBG_COMMAND_ARGS param TSRMLS_CC
 
-#define PHPDBG_END_COMMAND {NULL, 0, NULL, 0, '\0', NULL, NULL, NULL, NULL, 0}
+#define PHPDBG_END_COMMAND {NULL, 0, NULL, 0, '\0', NULL, NULL, '\0', NULL}
 
 /*
 * Default Switch Case
 */
 #define phpdbg_default_switch_case() \
        default: \
-               phpdbg_error("command", "type=\"wrongarg\" got=\"%s\"", "Unsupported parameter type (%s) for command", phpdbg_get_param_type(param TSRMLS_CC)); \
+               phpdbg_error("Unsupported parameter type (%s) for command", phpdbg_get_param_type(param TSRMLS_CC)); \
        break
 
 #endif /* PHPDBG_CMD_H */
diff --git a/sapi/phpdbg/phpdbg_eol.c b/sapi/phpdbg/phpdbg_eol.c
deleted file mode 100644 (file)
index fc20d56..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
-   +----------------------------------------------------------------------+
-   | PHP Version 5                                                        |
-   +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2014 The PHP Group                                |
-   +----------------------------------------------------------------------+
-   | This source file is subject to version 3.01 of the PHP license,      |
-   | that is bundled with this package in the file LICENSE, and is        |
-   | available through the world-wide-web at the following url:           |
-   | http://www.php.net/license/3_01.txt                                  |
-   | If you did not receive a copy of the PHP license and are unable to   |
-   | obtain it through the world-wide-web, please send a note to          |
-   | license@php.net so we can mail you a copy immediately.               |
-   +----------------------------------------------------------------------+
-   | Authors: Anatol Belski <ab@php.net>                                  |
-   +----------------------------------------------------------------------+
-*/
-
-#ifdef HAVE_CONFIG_H
-#      include "config.h"
-#endif
-
-#include "phpdbg.h"
-#include "phpdbg_eol.h"
-
-ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
-
-#define EOL_LIST_LEN 4
-struct phpdbg_eol_rep phpdbg_eol_list[EOL_LIST_LEN] = {
-       {"CRLF", "\r\n", PHPDBG_EOL_CRLF},
-/*     {"LFCR", "\n\r", PHPDBG_EOL_LFCR},*/
-       {"LF", "\n", PHPDBG_EOL_LF},
-       {"CR", "\r", PHPDBG_EOL_CR},
-};
-
-int phpdbg_eol_global_update(char *name TSRMLS_DC)
-{
-
-       if (0 == memcmp(name, "CRLF", 4) || 0 == memcmp(name, "crlf", 4) || 0 == memcmp(name, "DOS", 3) || 0 == memcmp(name, "dos", 3)) {
-               PHPDBG_G(eol) = PHPDBG_EOL_CRLF;
-       } else if (0 == memcmp(name, "LF", 2) || 0 == memcmp(name, "lf", 2) || 0 == memcmp(name, "UNIX", 4) || 0 == memcmp(name, "unix", 4)) {
-               PHPDBG_G(eol) = PHPDBG_EOL_LF;
-       } else if (0 == memcmp(name, "CR", 2) || 0 == memcmp(name, "cr", 2) || 0 == memcmp(name, "MAC", 3) || 0 == memcmp(name, "mac", 3)) {
-               PHPDBG_G(eol) = PHPDBG_EOL_CR;
-       } else {
-               return FAILURE;
-       }
-
-       return SUCCESS;
-}
-
-char *phpdbg_eol_name(int id)
-{
-       size_t i = 0;
-
-       while (i < EOL_LIST_LEN) {
-
-               if (id == phpdbg_eol_list[i].id) {
-                       return phpdbg_eol_list[i].name;
-               }
-
-               i++;
-       }
-
-       return NULL;
-}
-
-char *phpdbg_eol_rep(int id)
-{
-       size_t i = 0;
-
-       while (i < EOL_LIST_LEN) {
-
-               if (id == phpdbg_eol_list[i].id) {
-                       return phpdbg_eol_list[i].rep;
-               }
-
-               i++;
-       }
-
-       return NULL;
-}
-
-
-/* Inspired by https://ccrma.stanford.edu/~craig/utility/flip/flip.cpp */
-void phpdbg_eol_convert(char **str, int *len TSRMLS_DC)
-{
-       char *in = *str, *out ;
-       int in_len = *len, out_len, cursor, i;
-       char last, cur;
-
-       if ((PHPDBG_G(flags) & PHPDBG_IS_REMOTE) != PHPDBG_IS_REMOTE) {
-               return;
-       }
-
-       out_len = *len;
-       if (PHPDBG_EOL_CRLF == PHPDBG_G(eol)) { /* XXX add LFCR case if it's gonna be needed */
-               /* depending on the source EOL the out str will have all CR/LF duplicated */
-               for (i = 0; i < in_len; i++) {
-                       if (0x0a == in[i] || 0x0d == in[i]) {
-                               out_len++;
-                       }
-               }
-               out = (char *)emalloc(out_len);
-
-               last = cur = in[0];
-               i = cursor = 0;
-               for (; i < in_len;) {
-                       if (0x0a == cur && last != 0x0d) {
-                               out[cursor] = 0x0d;
-                               cursor++;
-                               out[cursor] = cur;
-                       } else if(0x0d == cur) {
-                               if (i + 1 < in_len && 0x0a != in[i+1]) {
-                                       out[cursor] = cur;
-                                       cursor++;
-                                       out[cursor] = 0x0a;
-                                       last = 0x0a;
-                               } else {
-                                       out[cursor] = 0x0d;
-                                       last = 0x0d;
-                               }
-                       } else {
-                               out[cursor] = cur;
-                               last = cur;
-                       }
-                       
-                       i++;
-                       cursor++;
-                       cur = in[i];
-               }
-
-       } else if (PHPDBG_EOL_LF == PHPDBG_G(eol) || PHPDBG_EOL_CR == PHPDBG_G(eol)) {
-               char want, kick;
-
-               if (PHPDBG_EOL_LF == PHPDBG_G(eol)) {
-                       want = 0x0a;
-                       kick = 0x0d;
-               } else {
-                       want = 0x0d;
-                       kick = 0x0a;
-               }
-
-               /* We gonna have a smaller or equally long string, estimation is almost neglecting */
-               out = (char *)emalloc(out_len);
-
-               last = cur = in[0];
-               i = cursor = 0;
-               for (; cursor < in_len;) {
-                       if (kick == cur) {
-                               out[cursor] = want;
-                       } else if (want == cur) {
-                               if (kick != last) {
-                                       out[cursor] = want;
-                               }
-                       } else {
-                               out[cursor] = cur;
-                       }
-
-                       last = cur;
-                       cursor++;
-                       cur = in[cursor];
-               }
-       } else {
-               return;
-       }
-
-       efree(*str);
-       *str = erealloc(out, cursor);
-       *len = cursor;
-       in = NULL;
-}
diff --git a/sapi/phpdbg/phpdbg_eol.h b/sapi/phpdbg/phpdbg_eol.h
deleted file mode 100644 (file)
index 68b54cb..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-   +----------------------------------------------------------------------+
-   | PHP Version 5                                                        |
-   +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2014 The PHP Group                                |
-   +----------------------------------------------------------------------+
-   | This source file is subject to version 3.01 of the PHP license,      |
-   | that is bundled with this package in the file LICENSE, and is        |
-   | available through the world-wide-web at the following url:           |
-   | http://www.php.net/license/3_01.txt                                  |
-   | If you did not receive a copy of the PHP license and are unable to   |
-   | obtain it through the world-wide-web, please send a note to          |
-   | license@php.net so we can mail you a copy immediately.               |
-   +----------------------------------------------------------------------+
-   | Authors: Anatol Belski <ab@php.net>                                  |
-   +----------------------------------------------------------------------+
-*/
-
-#ifndef PHPDBG_EOL_H
-#define PHPDBG_EOL_H
-
-#include "phpdbg.h"
-
-struct phpdbg_eol_rep {
-       char *name;
-       char *rep;
-       int id;
-};
-
-enum {
-       PHPDBG_EOL_CRLF, /* DOS */
-       /*PHPDBG_EOL_LFCR,*/ /* for Risc OS? */
-       PHPDBG_EOL_LF, /* UNIX */
-       PHPDBG_EOL_CR /* MAC */
-};
-
-int phpdbg_eol_global_update(char *name TSRMLS_DC);
-
-char *phpdbg_eol_name(int id);
-
-char *phpdbg_eol_rep(int id);
-
-void phpdbg_eol_convert(char **str, int *len TSRMLS_DC);
-
-#endif /* PHPDBG_EOL_H */
-
index 0506c305dcbe358557a61d77a10d1ae782c9a347..a235fe8cb04c25a5ed46a2fdb4905a8b54830ccc 100644 (file)
@@ -52,27 +52,22 @@ void phpdbg_switch_frame(int frame TSRMLS_DC) /* {{{ */
        int i = 0;
 
        if (PHPDBG_FRAME(num) == frame) {
-               phpdbg_notice("frame", "id=\"%d\"", "Already in frame #%d", frame);
+               phpdbg_notice("Already in frame #%d", frame);
                return;
        }
 
-       phpdbg_try_access {
-               while (execute_data) {
-                       if (i++ == frame) {
-                               break;
-                       }
-
-                       do {
-                               execute_data = execute_data->prev_execute_data;
-                       } while (execute_data && execute_data->opline == NULL);
+       while (execute_data) {
+               if (i++ == frame) {
+                       break;
                }
-       } phpdbg_catch_access {
-               phpdbg_error("signalsegv", "", "Couldn't switch frames, invalid data source");
-               return;
-       } phpdbg_end_try_access();
+
+               do {
+                       execute_data = execute_data->prev_execute_data;
+               } while (execute_data && execute_data->opline == NULL);
+       }
 
        if (execute_data == NULL) {
-               phpdbg_error("frame", "type=\"maxnum\" id=\"%d\"", "No frame #%d", frame);
+               phpdbg_error("No frame #%d", frame);
                return;
        }
 
@@ -95,7 +90,7 @@ void phpdbg_switch_frame(int frame TSRMLS_DC) /* {{{ */
                EG(called_scope) = PHPDBG_EX(current_called_scope);
        }
 
-       phpdbg_notice("frame", "id=\"%d\"", "Switched to frame #%d", frame);
+       phpdbg_notice("Switched to frame #%d", frame);
        phpdbg_list_file(
                zend_get_executed_filename(TSRMLS_C),
                3,
@@ -109,84 +104,61 @@ static void phpdbg_dump_prototype(zval **tmp TSRMLS_DC) /* {{{ */
 {
        zval **funcname, **class, **type, **args, **argstmp;
        char is_class;
-       int has_args = FAILURE;
 
-       zend_hash_find(Z_ARRVAL_PP(tmp), "function", sizeof("function"), (void **) &funcname);
+       zend_hash_find(Z_ARRVAL_PP(tmp), "function", sizeof("function"),
+               (void **)&funcname);
 
-       if ((is_class = zend_hash_find(Z_ARRVAL_PP(tmp), "object", sizeof("object"), (void **) &class)) == FAILURE) {
-               is_class = zend_hash_find(Z_ARRVAL_PP(tmp), "class", sizeof("class"), (void **)&class);
+       if ((is_class = zend_hash_find(Z_ARRVAL_PP(tmp),
+               "object", sizeof("object"), (void **)&class)) == FAILURE) {
+               is_class = zend_hash_find(Z_ARRVAL_PP(tmp), "class", sizeof("class"),
+                       (void **)&class);
        } else {
-               zend_get_object_classname(*class, (const char **) &Z_STRVAL_PP(class), (zend_uint *) &Z_STRLEN_PP(class) TSRMLS_CC);
+               zend_get_object_classname(*class, (const char **)&Z_STRVAL_PP(class),
+                       (zend_uint *)&Z_STRLEN_PP(class) TSRMLS_CC);
        }
 
        if (is_class == SUCCESS) {
                zend_hash_find(Z_ARRVAL_PP(tmp), "type", sizeof("type"), (void **)&type);
        }
 
-       has_args = zend_hash_find(Z_ARRVAL_PP(tmp), "args", sizeof("args"), (void **)&args) == SUCCESS;
-
-       phpdbg_xml(" symbol=\"%s%s%s\"",
-               is_class == FAILURE?"":Z_STRVAL_PP(class),
-               is_class == FAILURE?"":Z_STRVAL_PP(type),
-               Z_STRVAL_PP(funcname)
-       );
-       if (has_args) {
-               phpdbg_xml(">");
-       } else {
-               phpdbg_xml(" />");
-       }
-
-       phpdbg_out("%s%s%s(",
+       phpdbg_write("%s%s%s(",
                is_class == FAILURE?"":Z_STRVAL_PP(class),
                is_class == FAILURE?"":Z_STRVAL_PP(type),
                Z_STRVAL_PP(funcname)
        );
 
-       if (has_args) {
+       if (zend_hash_find(Z_ARRVAL_PP(tmp), "args", sizeof("args"),
+               (void **)&args) == SUCCESS) {
                HashPosition iterator;
-               const zend_function *func = NULL;
-               const zend_arg_info *arginfo = NULL;
-               int j = 0, m;
+               const zend_function *func = phpdbg_get_function(
+                       Z_STRVAL_PP(funcname), is_class == FAILURE ? NULL : Z_STRVAL_PP(class) TSRMLS_CC);
+               const zend_arg_info *arginfo = func ? func->common.arg_info : NULL;
+               int j = 0, m = func ? func->common.num_args : 0;
                zend_bool is_variadic = 0;
 
-               phpdbg_try_access {
-                       /* assuming no autoloader call is necessary, class should have been loaded if it's in backtrace ... */
-                       if ((func = phpdbg_get_function(Z_STRVAL_PP(funcname), is_class == FAILURE ? NULL : Z_STRVAL_PP(class) TSRMLS_CC))) {
-                               arginfo = func->common.arg_info;
-                       }
-               } phpdbg_end_try_access();
-
-               m = func ? func->common.num_args : 0;
-
                zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(args), &iterator);
-               while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(args), (void **) &argstmp, &iterator) == SUCCESS) {
+               while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(args),
+                       (void **) &argstmp, &iterator) == SUCCESS) {
                        if (j) {
-                               phpdbg_out(", ");
+                               phpdbg_write(", ");
                        }
-                       phpdbg_xml("<arg %r");
                        if (m && j < m) {
 #if PHP_VERSION_ID >= 50600
-                               is_variadic = arginfo ? arginfo[j].is_variadic : 0;
+                               is_variadic = arginfo[j].is_variadic;
 #endif
-                               phpdbg_xml(" variadic=\"%s\" name=\"%s\">", is_variadic ? "variadic" : "", arginfo ? arginfo[j].name : "");
-                               phpdbg_out("%s=%s", arginfo ? arginfo[j].name : "?", is_variadic ? "[": "");
-
-                       } else {
-                               phpdbg_xml(">");
+                               phpdbg_write("%s=%s",
+                                       arginfo[j].name, is_variadic ? "[": "");
                        }
                        ++j;
 
                        zend_print_flat_zval_r(*argstmp TSRMLS_CC);
                        zend_hash_move_forward_ex(Z_ARRVAL_PP(args), &iterator);
-
-                       phpdbg_xml("</arg>");
                }
                if (is_variadic) {
-                       phpdbg_out("]");
+                       phpdbg_write("]");
                }
-               phpdbg_xml("</frame>");
        }
-       phpdbg_out(")");
+       phpdbg_write(")");
 }
 
 void phpdbg_dump_backtrace(size_t num TSRMLS_DC) /* {{{ */
@@ -198,54 +170,37 @@ void phpdbg_dump_backtrace(size_t num TSRMLS_DC) /* {{{ */
        int i = 0, limit = num;
        int user_defined;
 
-       PHPDBG_OUTPUT_BACKUP();
-
        if (limit < 0) {
-               phpdbg_error("backtrace", "type=\"minnum\"", "Invalid backtrace size %d", limit);
-
-               PHPDBG_OUTPUT_BACKUP_RESTORE();
-               return;
+               phpdbg_error("Invalid backtrace size %d", limit);
        }
 
-       phpdbg_try_access {
-               zend_fetch_debug_backtrace(&zbacktrace, 0, 0, limit TSRMLS_CC);
-       } phpdbg_catch_access {
-               phpdbg_error("signalsegv", "", "Couldn't fetch backtrace, invalid data source");
-               return;
-       } phpdbg_end_try_access();
-
-       phpdbg_xml("<backtrace %r>");
+       zend_fetch_debug_backtrace(
+               &zbacktrace, 0, 0, limit TSRMLS_CC);
 
        zend_hash_internal_pointer_reset_ex(Z_ARRVAL(zbacktrace), &position);
-       zend_hash_get_current_data_ex(Z_ARRVAL(zbacktrace), (void **) &tmp, &position);
+       zend_hash_get_current_data_ex(Z_ARRVAL(zbacktrace), (void**)&tmp, &position);
        while (1) {
-               user_defined = zend_hash_find(Z_ARRVAL_PP(tmp), "file", sizeof("file"), (void **) &file);
-               zend_hash_find(Z_ARRVAL_PP(tmp), "line", sizeof("line"), (void **) &line);
+               user_defined = zend_hash_find(Z_ARRVAL_PP(tmp), "file", sizeof("file"), (void **)&file);
+               zend_hash_find(Z_ARRVAL_PP(tmp), "line", sizeof("line"), (void **)&line);
                zend_hash_move_forward_ex(Z_ARRVAL(zbacktrace), &position);
 
-               if (zend_hash_get_current_data_ex(Z_ARRVAL(zbacktrace), (void **) &tmp, &position) == FAILURE) {
-                       phpdbg_write("frame", "id=\"%d\" symbol=\"{main}\" file=\"%s\" line=\"%d\"", "frame #%d: {main} at %s:%ld", i, Z_STRVAL_PP(file), Z_LVAL_PP(line));
+               if (zend_hash_get_current_data_ex(Z_ARRVAL(zbacktrace),
+                       (void**)&tmp, &position) == FAILURE) {
+                       phpdbg_write("frame #%d: {main} at %s:%ld", i, Z_STRVAL_PP(file), Z_LVAL_PP(line));
                        break;
                }
 
                if (user_defined == SUCCESS) {
-                       phpdbg_out("frame #%d: ", i);
-                       phpdbg_xml("<frame %r id=\"%d\" file=\"%s\" line=\"%d\"", i, Z_STRVAL_PP(file), Z_LVAL_PP(line));
+                       phpdbg_write("frame #%d: ", i++);
                        phpdbg_dump_prototype(tmp TSRMLS_CC);
-                       phpdbg_out(" at %s:%ld\n", Z_STRVAL_PP(file), Z_LVAL_PP(line));
-                       i++;
+                       phpdbg_writeln(" at %s:%ld", Z_STRVAL_PP(file), Z_LVAL_PP(line));
                } else {
-                       phpdbg_out(" => ");
-                       phpdbg_xml("<frame %r id=\"%d\" internal=\"internal\"", i);
+                       phpdbg_write(" => ");
                        phpdbg_dump_prototype(tmp TSRMLS_CC);
-                       phpdbg_out(" (internal function)\n");
+                       phpdbg_writeln(" (internal function)");
                }
        }
 
-       phpdbg_out("\n");
-       phpdbg_xml("</backtrace>");
-
+       phpdbg_writeln(EMPTY);
        zval_dtor(&zbacktrace);
-
-       PHPDBG_OUTPUT_BACKUP_RESTORE();
 } /* }}} */
index d47f8c776ab06c168d6f24aca4c0fc9b5765d103..1e58dc69cad557880d722d7dbd0a0bb241383b86 100644 (file)
@@ -22,7 +22,6 @@
 #include "phpdbg.h"
 #include "phpdbg_help.h"
 #include "phpdbg_prompt.h"
-#include "phpdbg_eol.h"
 #include "zend.h"
 
 ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
@@ -62,11 +61,6 @@ void pretty_print(char *text TSRMLS_DC)
        unsigned int last_blank_count = 0;    /* printable char offset of last blank char */
        unsigned int line_count = 0;          /* number printable chars on current line */
 
-       if (PHPDBG_G(flags) & PHPDBG_WRITE_XML) {
-               phpdbg_xml("<help %r msg=\"%s\" />", text);
-               return;
-       }
-
        /* First pass calculates a safe size for the pretty print version */
        for (p = text; *p; p++) {
                if (UNEXPECTED(p[0] == '*') && p[1] == '*') {
@@ -134,10 +128,10 @@ void pretty_print(char *text TSRMLS_DC)
        *q++ = '\0';
 
        if ((q-new)>size) {
-               phpdbg_error("help", "overrun=\"%lu\"", "Output overrun of %lu bytes", ((q - new) - size));
+               phpdbg_error("Output overrun of %lu bytes", ((q-new) - size));
        }
 
-       phpdbg_out("%s\n", new);
+       phpdbg_write("%s\n", new);
        efree(new);
 }  /* }}} */
 
@@ -207,7 +201,7 @@ static int get_command(
 
        return num_matches;
 
-} /* }}} */
+} /* }}} */    
 
 PHPDBG_COMMAND(help) /* {{{ */
 {
@@ -237,7 +231,7 @@ PHPDBG_COMMAND(help) /* {{{ */
                                pretty_print(get_help("duplicate!" TSRMLS_CC) TSRMLS_CC);
                                return SUCCESS;
                        } else {
-                               phpdbg_error("help", "type=\"ambiguousalias\" alias=\"%s\"", "Internal help error, non-unique alias \"%c\"", param->str[0]);
+                               phpdbg_error("Internal help error, non-unique alias \"%c\"", param->str[0]);
                                return FAILURE;
                        }
 
@@ -265,41 +259,34 @@ PHPDBG_HELP(aliases) /* {{{ */
        int len;
 
        /* Print out aliases for all commands except help as this one comes last */
-       phpdbg_writeln("help", "", "Below are the aliased, short versions of all supported commands");
-       phpdbg_xml("<helpcommands %r>");
+       phpdbg_writeln("Below are the aliased, short versions of all supported commands");
        for(c = phpdbg_prompt_commands; c->name; c++) {
                if (c->alias && c->alias != 'h') {
-                       phpdbg_writeln("command", "alias=\"%c\" name=\"%s\" tip=\"%s\"", " %c     %-20s  %s", c->alias, c->name, c->tip);
+                       phpdbg_writeln(" %c     %-20s  %s", c->alias, c->name, c->tip);
                        if (c->subs) {
                                len = 20 - 1 - c->name_len;
                                for(c_sub = c->subs; c_sub->alias; c_sub++) {
                                        if (c_sub->alias) {
-                                               phpdbg_writeln("subcommand", "parent_alias=\"%c\" alias=\"%c\" parent=\"%s\" name=\"%-*s\" tip=\"%s\"", " %c %c   %s %-*s  %s",
-                                                       c->alias, c_sub->alias, c->name, len, c_sub->name, c_sub->tip);
+                                               phpdbg_writeln(" %c %c   %s %-*s  %s",
+                                                       c->alias, c_sub->alias, (char *)c->name, len, c_sub->name, c_sub->tip);
                                        }
                                }
                        }
                }
        }
 
-       phpdbg_xml("</helpcommands>");
-
        /* Print out aliases for help as this one comes last, with the added text on how aliases are used */
        get_command("h", 1, &c, phpdbg_prompt_commands TSRMLS_CC);
-       phpdbg_writeln("aliasinfo", "alias=\"%c\" name=\"%s\" tip=\"%s\"", " %c     %-20s  %s\n", c->alias, c->name, c->tip);
-
-       phpdbg_xml("<helpaliases>");
+       phpdbg_writeln(" %c     %-20s  %s\n", c->alias, c->name, c->tip);
 
        len = 20 - 1 - c->name_len;
        for(c_sub = c->subs; c_sub->alias; c_sub++) {
                if (c_sub->alias) {
-                       phpdbg_writeln("alias", "parent_alias=\"%c\" alias=\"%c\" parent=\"%s\" name=\"%-*s\" tip=\"%s\"", " %c %c   %s %-*s  %s",
+                       phpdbg_writeln(" %c %c   %s %-*s  %s",
                                c->alias, c_sub->alias, c->name, len, c_sub->name, c_sub->tip);
                }
        }
 
-       phpdbg_xml("</helpaliases>");
-
        pretty_print(get_help("aliases!" TSRMLS_CC) TSRMLS_CC);
        return SUCCESS;
 } /* }}} */
@@ -320,7 +307,7 @@ PHPDBG_HELP(aliases) /* {{{ */
  * Also note the convention that help text not directly referenceable as a help param
  * has a key ending in !
  */
-#define CR "\n" 
+#define CR "\n"
 phpdbg_help_text_t phpdbg_help_text[] = {
 
 /******************************** General Help Topics ********************************/
@@ -375,7 +362,7 @@ phpdbg_help_text_t phpdbg_help_text[] = {
 "  **-c**      **-c**/my/php.ini       Set php.ini file to load" CR
 "  **-d**      **-d**memory_limit=4G   Set a php.ini directive" CR
 "  **-n**                          Disable default php.ini" CR
-"  **-q**                          Suppress welcome banner" CR
+"  **-q**                          Supress welcome banner" CR
 "  **-v**                          Enable oplog output" CR
 "  **-s**                          Enable stepping" CR
 "  **-b**                          Disable colour" CR
@@ -388,9 +375,6 @@ phpdbg_help_text_t phpdbg_help_text[] = {
 "  **-S**      **-S**cli               Override SAPI name, careful!" CR
 "  **-l**      **-l**4000              Setup remote console ports" CR
 "  **-a**      **-a**192.168.0.3       Setup remote console bind address" CR
-#if PHPDBG_IN_DEV
-"  **-x**                          Enable xml output (instead of normal text output)" CR
-#endif
 "  **-V**                          Print version number" CR
 "  **--**      **--** arg1 arg2        Use to delimit phpdbg arguments and php $argv; append any $argv "
 "argument after it" CR CR
@@ -402,7 +386,9 @@ phpdbg_help_text_t phpdbg_help_text[] = {
 "bind address using the **-a** option. If **-a** is specied without an argument, then phpdbg "
 "will bind to all available interfaces.  You should be aware of the security implications of "
 "doing this, so measures should be taken to secure this service if bound to a publicly accessible "
-"interface/port."
+"interface/port." CR CR
+
+"Specify both stdin and stdout with -lstdin/stdout; by default stdout is stdin * 2."
 },
 
 {"phpdbginit", CR
@@ -559,7 +545,7 @@ phpdbg_help_text_t phpdbg_help_text[] = {
 
 "    $P break ZEND_ADD" CR
 "    $P b ZEND_ADD" CR
-"    Break on any occurrence of the opcode ZEND_ADD" CR CR
+"    Break on any occurence of the opcode ZEND_ADD" CR CR
 
 "    $P break del 2" CR
 "    $P b ~ 2" CR
@@ -656,16 +642,14 @@ phpdbg_help_text_t phpdbg_help_text[] = {
 "Specific info commands are show below:" CR CR
 
 "  **Target**   **Alias**  **Purpose**" CR
-"  **break**      **b**      show current breakpoints" CR
-"  **files**      **F**      show included files" CR
-"  **classes**    **c**      show loaded classes" CR
-"  **funcs**      **f**      show loaded functions" CR
-"  **error**      **e**      show last error" CR
-"  **constants**  **d**      show user-defined constants" CR
-"  **vars**       **v**      show active variables" CR
-"  **globals**    **g**      show superglobal variables" CR
-"  **literal**    **l**      show active literal constants" CR
-"  **memory**     **m**      show memory manager stats"
+"  **break**    **b**      show current breakpoints" CR
+"  **files**    **F**      show included files" CR
+"  **classes**  **c**      show loaded classes" CR
+"  **funcs**    **f**      show loaded classes" CR
+"  **error**    **e**      show last error" CR
+"  **vars**     **v**      show active variables" CR
+"  **literal**  **l**      show active literal constants" CR
+"  **memory**   **m**      show memory manager stats"
 },
 
 // ******** same issue about breakpoints in called frames
index 4a433fda6cf2ea124521868263411bd60808e989..16a1e771e3719b519638656c42e32b4429179932 100644 (file)
@@ -35,9 +35,9 @@ PHPDBG_HELP(aliases);
 extern const phpdbg_command_t phpdbg_help_commands[];
 
 #define phpdbg_help_header() \
-       phpdbg_notice("version", "version=\"%s\"", "Welcome to phpdbg, the interactive PHP debugger, v%s", PHPDBG_VERSION);
+       phpdbg_notice("Welcome to phpdbg, the interactive PHP debugger, v%s", PHPDBG_VERSION);
 #define phpdbg_help_footer() \
-       phpdbg_notice("issues", "url=\"%s\"", "Please report bugs to <%s>", PHPDBG_ISSUES);
+       phpdbg_notice("Please report bugs to <%s>", PHPDBG_ISSUES);
 
 typedef struct _phpdbg_help_text_t {
        char *key;
index 4774fa5a9e7817b9eefbfb9b02926f4ae4d8d85b..97f88bfa1ec59437c6829dfb0f28323195a36df2 100644 (file)
 
 ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
 
-#define PHPDBG_INFO_COMMAND_D(f, h, a, m, l, s, flags) \
-       PHPDBG_COMMAND_D_EXP(f, h, a, m, l, s, &phpdbg_prompt_commands[14], flags)
+#define PHPDBG_INFO_COMMAND_D(f, h, a, m, l, s) \
+       PHPDBG_COMMAND_D_EXP(f, h, a, m, l, s, &phpdbg_prompt_commands[14])
 
 const phpdbg_command_t phpdbg_info_commands[] = {
-       PHPDBG_INFO_COMMAND_D(break,     "show breakpoints",              'b', info_break,     NULL, 0, PHPDBG_ASYNC_SAFE),
-       PHPDBG_INFO_COMMAND_D(files,     "show included files",           'F', info_files,     NULL, 0, PHPDBG_ASYNC_SAFE),
-       PHPDBG_INFO_COMMAND_D(classes,   "show loaded classes",           'c', info_classes,   NULL, 0, PHPDBG_ASYNC_SAFE),
-       PHPDBG_INFO_COMMAND_D(funcs,     "show loaded classes",           'f', info_funcs,     NULL, 0, PHPDBG_ASYNC_SAFE),
-       PHPDBG_INFO_COMMAND_D(error,     "show last error",               'e', info_error,     NULL, 0, PHPDBG_ASYNC_SAFE),
-       PHPDBG_INFO_COMMAND_D(constants, "show user defined constants",   'd', info_constants, NULL, 0, PHPDBG_ASYNC_SAFE),
-       PHPDBG_INFO_COMMAND_D(vars,      "show active variables",         'v', info_vars,      NULL, 0, PHPDBG_ASYNC_SAFE),
-       PHPDBG_INFO_COMMAND_D(globals,   "show superglobals",             'g', info_globals,   NULL, 0, PHPDBG_ASYNC_SAFE),
-       PHPDBG_INFO_COMMAND_D(literal,   "show active literal constants", 'l', info_literal,   NULL, 0, PHPDBG_ASYNC_SAFE),
-       PHPDBG_INFO_COMMAND_D(memory,    "show memory manager stats",     'm', info_memory,    NULL, 0, PHPDBG_ASYNC_SAFE),
+       PHPDBG_INFO_COMMAND_D(break,    "show breakpoints",              'b', info_break,   NULL, 0),
+       PHPDBG_INFO_COMMAND_D(files,    "show included files",           'F', info_files,   NULL, 0),
+       PHPDBG_INFO_COMMAND_D(classes,  "show loaded classes",           'c', info_classes, NULL, 0),
+       PHPDBG_INFO_COMMAND_D(funcs,    "show loaded classes",           'f', info_funcs,   NULL, 0),
+       PHPDBG_INFO_COMMAND_D(error,    "show last error",               'e', info_error,   NULL, 0),
+       PHPDBG_INFO_COMMAND_D(vars,     "show active variables",         'v', info_vars,    NULL, 0),
+       PHPDBG_INFO_COMMAND_D(literal,  "show active literal constants", 'l', info_literal, NULL, 0),
+       PHPDBG_INFO_COMMAND_D(memory,   "show memory manager stats",     'm', info_memory,  NULL, 0),
        PHPDBG_END_COMMAND
 };
 
@@ -64,21 +62,15 @@ PHPDBG_INFO(files) /* {{{ */
        HashPosition pos;
        char *fname;
 
-       phpdbg_try_access {
-               phpdbg_notice("includedfilecount", "num=\"%d\"", "Included files: %d", zend_hash_num_elements(&EG(included_files)));
-       } phpdbg_catch_access {
-               phpdbg_error("signalsegv", "", "Could not fetch included file count, invalid data source");
-       } phpdbg_end_try_access();
-
-       phpdbg_try_access {
-               zend_hash_internal_pointer_reset_ex(&EG(included_files), &pos);
-               while (zend_hash_get_current_key_ex(&EG(included_files), &fname, NULL, NULL, 0, &pos) == HASH_KEY_IS_STRING) {
-                       phpdbg_writeln("includedfile", "name=\"%s\"", "File: %s", fname);
-                       zend_hash_move_forward_ex(&EG(included_files), &pos);
-               }
-       } phpdbg_catch_access {
-               phpdbg_error("signalsegv", "", "Could not fetch file name, invalid data source, aborting included file listing");
-       } phpdbg_end_try_access();
+       phpdbg_notice("Included files: %d",
+               zend_hash_num_elements(&EG(included_files)));
+
+       zend_hash_internal_pointer_reset_ex(&EG(included_files), &pos);
+       while (zend_hash_get_current_key_ex(&EG(included_files), &fname,
+               NULL, NULL, 0, &pos) == HASH_KEY_IS_STRING) {
+               phpdbg_writeln("File: %s", fname);
+               zend_hash_move_forward_ex(&EG(included_files), &pos);
+       }
 
        return SUCCESS;
 } /* }}} */
@@ -86,98 +78,23 @@ PHPDBG_INFO(files) /* {{{ */
 PHPDBG_INFO(error) /* {{{ */
 {
        if (PG(last_error_message)) {
-               phpdbg_try_access {
-                       phpdbg_writeln("lasterror", "error=\"%s\" file=\"%s\" line=\"%d\"", "Last error: %s at %s line %d", PG(last_error_message), PG(last_error_file), PG(last_error_lineno));
-               } phpdbg_catch_access {
-                       phpdbg_notice("lasterror", "error=\"\"", "No error found!");
-               } phpdbg_end_try_access();
+               phpdbg_writeln("Last error: %s at %s line %d",
+                       PG(last_error_message), PG(last_error_file), PG(last_error_lineno));
        } else {
-               phpdbg_notice("lasterror", "error=\"\"", "No error found!");
+               phpdbg_notice("No error found!");
        }
        return SUCCESS;
 } /* }}} */
 
-PHPDBG_INFO(constants) /* {{{ */
+PHPDBG_INFO(vars) /* {{{ */
 {
-       HashPosition pos;
-       HashTable consts;
-       zend_constant *data;
-
-       zend_hash_init(&consts, 8, NULL, NULL, 0);
-
-       if (EG(zend_constants)) {
-               phpdbg_try_access {
-                       zend_hash_internal_pointer_reset_ex(EG(zend_constants), &pos);
-                       while (zend_hash_get_current_data_ex(EG(zend_constants), (void **) &data, &pos) == SUCCESS) {
-                               if (data->module_number == PHP_USER_CONSTANT) {
-                                       zend_hash_update(&consts, data->name, data->name_len, (void **) &data, sizeof(zend_constant *), NULL);
-                               }
-                               zend_hash_move_forward_ex(EG(zend_constants), &pos);
-                       }
-               } phpdbg_catch_access {
-                       phpdbg_error("signalsegv", "", "Cannot fetch all the constants, invalid data source");
-               } phpdbg_end_try_access();
-       }
-
-       phpdbg_notice("constantinfo", "num=\"%d\"", "User-defined constants (%d)", zend_hash_num_elements(&consts));
-
-       if (zend_hash_num_elements(&consts)) {
-               phpdbg_out("Address            Refs    Type      Constant\n");
-               for (zend_hash_internal_pointer_reset_ex(&consts, &pos);
-                    zend_hash_get_current_data_ex(&consts, (void **) &data, &pos) == SUCCESS;
-                    zend_hash_move_forward_ex(&consts, &pos)) {
-                       data = *(zend_constant **) data;
-
-#define VARIABLEINFO(attrs, msg, ...) phpdbg_writeln("constant", "address=\"%p\" refcount=\"%d\" type=\"%s\" name=\"%.*s\" " attrs, "%-18p %-7d %-9s %.*s" msg, &data->value, Z_REFCOUNT(data->value), zend_zval_type_name(&data->value), data->name_len - 1, data->name, ##__VA_ARGS__)
-
-                       switch (Z_TYPE(data->value)) {
-                               case IS_STRING:
-                                       phpdbg_try_access {
-                                               VARIABLEINFO("length=\"%d\" value=\"%.*s\"", "\nstring (%d) \"%.*s%s\"", Z_STRLEN(data->value), Z_STRLEN(data->value) < 255 ? Z_STRLEN(data->value) : 255, Z_STRVAL(data->value), Z_STRLEN(data->value) > 255 ? "..." : "");
-                                       } phpdbg_catch_access {
-                                               VARIABLEINFO("", "");
-                                       } phpdbg_end_try_access();
-                                       break;
-                               case IS_BOOL:
-                                       VARIABLEINFO("value=\"%s\"", "\nbool (%s)", Z_LVAL(data->value) ? "true" : "false");
-                                       break;
-                               case IS_LONG:
-                                       VARIABLEINFO("value=\"%ld\"", "\nint (%ld)", Z_LVAL(data->value));
-                                       break;
-                               case IS_DOUBLE:
-                                       VARIABLEINFO("value=\"%lf\"", "\ndouble (%lf)", Z_DVAL(data->value));
-                                       break;
-                               default:
-                                       VARIABLEINFO("", "");
-
-#undef VARIABLEINFO
-                       }
-               }
-       }
-
-       return SUCCESS;
-} /* }}} */
-
-static int phpdbg_arm_auto_global(zend_auto_global *auto_global TSRMLS_DC) {
-       if (auto_global->armed) {
-               if (PHPDBG_G(flags) & PHPDBG_IN_SIGNAL_HANDLER) {
-                       phpdbg_notice("variableinfo", "unreachable=\"%.*s\"", "Cannot show information about superglobal variable %.*s", auto_global->name_len, auto_global->name);
-               } else {
-                       auto_global->armed = auto_global->auto_global_callback(auto_global->name, auto_global->name_len TSRMLS_CC);
-               }
-       }
-
-       return 0;
-}
-
-static int phpdbg_print_symbols(zend_bool show_globals TSRMLS_DC) {
-       HashTable vars, *symtable;
+       HashTable vars;
        HashPosition pos;
        char *var;
        zval **data;
 
        if (!EG(active_op_array)) {
-               phpdbg_error("inactive", "type=\"op_array\"", "No active op array!");
+               phpdbg_error("No active op array!");
                return SUCCESS;
        }
 
@@ -185,112 +102,100 @@ static int phpdbg_print_symbols(zend_bool show_globals TSRMLS_DC) {
                zend_rebuild_symbol_table(TSRMLS_C);
 
                if (!EG(active_symbol_table)) {
-                       phpdbg_error("inactive", "type=\"symbol_table\"", "No active symbol table!");
+                       phpdbg_error("No active symbol table!");
                        return SUCCESS;
                }
        }
 
-
-       if (show_globals) {
-               /* that array should only be manipulated during init, so safe for async access during execution */
-               zend_hash_apply(CG(auto_globals), (apply_func_t) phpdbg_arm_auto_global TSRMLS_CC);
-               symtable = &EG(symbol_table);
-       } else {
-               symtable = EG(active_symbol_table);
-       }
-
        zend_hash_init(&vars, 8, NULL, NULL, 0);
 
-       phpdbg_try_access {
-               zend_hash_internal_pointer_reset_ex(symtable, &pos);
-               while (zend_hash_get_current_key_ex(symtable, &var, NULL, NULL, 0, &pos) == HASH_KEY_IS_STRING) {
-                       zend_hash_get_current_data_ex(symtable, (void **)&data, &pos);
-                       if (zend_is_auto_global(var, strlen(var) TSRMLS_CC) ^ !show_globals) {
-                               zend_hash_update(&vars, var, strlen(var)+1, (void**)data, sizeof(zval*), NULL);
-                       }
-                       zend_hash_move_forward_ex(symtable, &pos);
+       zend_hash_internal_pointer_reset_ex(EG(active_symbol_table), &pos);
+       while (zend_hash_get_current_key_ex(EG(active_symbol_table), &var,
+               NULL, NULL, 0, &pos) == HASH_KEY_IS_STRING) {
+               zend_hash_get_current_data_ex(EG(active_symbol_table), (void **)&data, &pos);
+               if (*var != '_') {
+                       zend_hash_update(
+                               &vars, var, strlen(var)+1, (void**)data, sizeof(zval*), NULL);
                }
-       } phpdbg_catch_access {
-               phpdbg_error("signalsegv", "", "Cannot fetch all data from the symbol table, invalid data source");
-       } phpdbg_end_try_access();
+               zend_hash_move_forward_ex(EG(active_symbol_table), &pos);
+       }
 
-       if (show_globals) {
-               phpdbg_notice("variableinfo", "num=\"%d\"", "Superglobal variables (%d)", zend_hash_num_elements(&vars));
-       } else {
+       {
                zend_op_array *ops = EG(active_op_array);
-
+               
                if (ops->function_name) {
                        if (ops->scope) {
-                               phpdbg_notice("variableinfo", "method=\"%s::%s\" num=\"%d\"", "Variables in %s::%s() (%d)", ops->scope->name, ops->function_name, zend_hash_num_elements(&vars));
+                               phpdbg_notice(
+                               "Variables in %s::%s() (%d)", ops->scope->name, ops->function_name, zend_hash_num_elements(&vars));
                        } else {
-                               phpdbg_notice("variableinfo", "function=\"%s\" num=\"%d\"", "Variables in %s() (%d)", ops->function_name, zend_hash_num_elements(&vars));
+                               phpdbg_notice(
+                                       "Variables in %s() (%d)", ops->function_name, zend_hash_num_elements(&vars));
                        }
                } else {
                        if (ops->filename) {
-                               phpdbg_notice("variableinfo", "file=\"%s\" num=\"%d\"", "Variables in %s (%d)", ops->filename, zend_hash_num_elements(&vars));
+                               phpdbg_notice(
+                               "Variables in %s (%d)", ops->filename, zend_hash_num_elements(&vars));
                        } else {
-                               phpdbg_notice("variableinfo", "opline=\"%p\" num=\"%d\"", "Variables @ %p (%d)", ops, zend_hash_num_elements(&vars));
+                               phpdbg_notice(
+                                       "Variables @ %p (%d)", ops, zend_hash_num_elements(&vars));
                        }
                }
        }
 
        if (zend_hash_num_elements(&vars)) {
-               phpdbg_out("Address            Refs    Type      Variable\n");
+               phpdbg_writeln("Address\t\tRefs\tType\t\tVariable");
                for (zend_hash_internal_pointer_reset_ex(&vars, &pos);
-                    zend_hash_get_current_data_ex(&vars, (void**) &data, &pos) == SUCCESS;
-                    zend_hash_move_forward_ex(&vars, &pos)) {
+                       zend_hash_get_current_data_ex(&vars, (void**) &data, &pos) == SUCCESS;
+                       zend_hash_move_forward_ex(&vars, &pos)) {
                        char *var;
-                       zend_bool invalid_data = 1;
 
                        zend_hash_get_current_key_ex(&vars, &var, NULL, NULL, 0, &pos);
 
-                       phpdbg_try_access {
-                               if (!(invalid_data = !*data)) {
-#define VARIABLEINFO(attrs, msg, ...) phpdbg_writeln("variable", "address=\"%p\" refcount=\"%d\" type=\"%s\" refstatus=\"%s\" name=\"%s\" " attrs, "%-18p %-7d %-9s %s$%s" msg, *data, Z_REFCOUNT_PP(data), zend_zval_type_name(*data), Z_ISREF_PP(data) ? "&": "", var, ##__VA_ARGS__)
-
-                                       switch (Z_TYPE_PP(data)) {
-                                               case IS_RESOURCE:
-                                                       phpdbg_try_access {
-                                                               int type;
-                                                               VARIABLEINFO("type=\"%s\"", "\n|-------(typeof)------> (%s)\n", zend_list_find(Z_RESVAL_PP(data), &type) ? zend_rsrc_list_get_rsrc_type(type TSRMLS_CC) : "unknown");
-                                                       } phpdbg_catch_access {
-                                                               VARIABLEINFO("type=\"unknown\"", "\n|-------(typeof)------> (unknown)\n");
-                                                       } phpdbg_end_try_access();
-                                                       break;
-                                               case IS_OBJECT:
-                                                       phpdbg_try_access {
-                                                               VARIABLEINFO("instanceof=\"%s\"", "\n|-----(instanceof)----> (%s)\n", Z_OBJCE_PP(data)->name);
-                                                       } phpdbg_catch_access {
-                                                               VARIABLEINFO("instanceof=\"%s\"", "\n|-----(instanceof)----> (unknown)\n");
-                                                       } phpdbg_end_try_access();
-                                                       break;
-                                               case IS_STRING:
-                                                       phpdbg_try_access {
-                                                               VARIABLEINFO("length=\"%d\" value=\"%.*s\"", "\nstring (%d) \"%.*s%s\"", Z_STRLEN_PP(data), Z_STRLEN_PP(data) < 255 ? Z_STRLEN_PP(data) : 255, Z_STRVAL_PP(data), Z_STRLEN_PP(data) > 255 ? "..." : "");
-                                                       } phpdbg_catch_access {
-                                                               VARIABLEINFO("", "");
-                                                       } phpdbg_end_try_access();
-                                                       break;
-                                               case IS_BOOL:
-                                                       VARIABLEINFO("value=\"%s\"", "\nbool (%s)", Z_LVAL_PP(data) ? "true" : "false");
-                                                       break;
-                                               case IS_LONG:
-                                                       VARIABLEINFO("value=\"%ld\"", "\nint (%ld)", Z_LVAL_PP(data));
-                                                       break;
-                                               case IS_DOUBLE:
-                                                       VARIABLEINFO("value=\"%lf\"", "\ndouble (%lf)", Z_DVAL_PP(data));
-                                                       break;
-                                               default:
-                                                       VARIABLEINFO("", "");
-                                       }
+                       if (*data) {
+                               phpdbg_write(
+                               "%p\t%d\t",
+                                       *data,
+                                       Z_REFCOUNT_PP(data));
+
+                               switch (Z_TYPE_PP(data)) {
+                                       case IS_STRING:         phpdbg_write("(string)\t");     break;
+                                       case IS_LONG:           phpdbg_write("(integer)\t");    break;
+                                       case IS_DOUBLE:         phpdbg_write("(float)\t");              break;
+                                       case IS_RESOURCE:       phpdbg_write("(resource)\t");   break;
+                                       case IS_ARRAY:          phpdbg_write("(array)\t");              break;
+                                       case IS_OBJECT:         phpdbg_write("(object)\t");     break;
+                                       case IS_NULL:           phpdbg_write("(null)\t");               break;
                                }
 
-#undef VARIABLEINFO
-                       } phpdbg_end_try_access();
-
-                       if (invalid_data) {
-                               phpdbg_writeln("variable", "name=\"%s\"", "n/a\tn/a\tn/a\t$%s", var);
+                               if (Z_TYPE_PP(data) == IS_RESOURCE) {
+                                       int type;
+
+                                       phpdbg_writeln(
+                                               "%s$%s", Z_ISREF_PP(data) ? "&": "", var);
+                                       if (zend_list_find(Z_RESVAL_PP(data), &type)) {
+                                               phpdbg_write(
+                                                       "|-------(typeof)------> (%s)",
+                                                       zend_rsrc_list_get_rsrc_type(type TSRMLS_CC));
+                                       } else {
+                                               phpdbg_write(
+                                                       "|-------(typeof)------> (unknown)");
+                                       }
+                                       phpdbg_writeln(EMPTY);
+                               } else if (Z_TYPE_PP(data) == IS_OBJECT) {
+                                       phpdbg_writeln(
+                                               "%s$%s", Z_ISREF_PP(data) ? "&": "", var);
+                                       phpdbg_write(
+                                               "|-----(instanceof)----> (%s)", Z_OBJCE_PP(data)->name);
+                                       phpdbg_writeln(EMPTY);
+                               } else {
+                                       phpdbg_write(
+                                               "%s$%s", Z_ISREF_PP(data) ? "&": "", var);
+                               }
+                       } else {
+                               phpdbg_write(
+                                       "n/a\tn/a\tn/a\t$%s", var);
                        }
+                       phpdbg_writeln(EMPTY);
                }
        }
 
@@ -299,47 +204,42 @@ static int phpdbg_print_symbols(zend_bool show_globals TSRMLS_DC) {
        return SUCCESS;
 } /* }}} */
 
-PHPDBG_INFO(vars) /* {{{ */
-{
-       return phpdbg_print_symbols(0 TSRMLS_CC);
-}
-
-PHPDBG_INFO(globals) /* {{{ */
-{
-       return phpdbg_print_symbols(1 TSRMLS_CC);
-}
-
 PHPDBG_INFO(literal) /* {{{ */
 {
-       /* literals are assumed to not be manipulated during executing of their op_array and as such async safe */
        if ((EG(in_execution) && EG(active_op_array)) || PHPDBG_G(ops)) {
                zend_op_array *ops = EG(active_op_array) ? EG(active_op_array) : PHPDBG_G(ops);
                int literal = 0, count = ops->last_literal-1;
 
                if (ops->function_name) {
                        if (ops->scope) {
-                               phpdbg_notice("literalinfo", "method=\"%s::%s\" num=\"%d\"", "Literal Constants in %s::%s() (%d)", ops->scope->name, ops->function_name, count);
+                               phpdbg_notice(
+                               "Literal Constants in %s::%s() (%d)", ops->scope->name, ops->function_name, count);
                        } else {
-                               phpdbg_notice("literalinfo", "function=\"%s\" num=\"%d\"", "Literal Constants in %s() (%d)", ops->function_name, count);
+                               phpdbg_notice(
+                                       "Literal Constants in %s() (%d)", ops->function_name, count);
                        }
                } else {
                        if (ops->filename) {
-                               phpdbg_notice("literalinfo", "file=\"%s\" num=\"%d\"", "Literal Constants in %s (%d)", ops->filename, count);
+                               phpdbg_notice(
+                               "Literal Constants in %s (%d)", ops->filename, count);
                        } else {
-                               phpdbg_notice("literalinfo", "opline=\"%p\" num=\"%d\"", "Literal Constants @ %p (%d)", ops, count);
+                               phpdbg_notice(
+                                       "Literal Constants @ %p (%d)", ops, count);
                        }
                }
 
                while (literal < ops->last_literal) {
                        if (Z_TYPE(ops->literals[literal].constant) != IS_NULL) {
-                               phpdbg_write("literal", "id=\"%u\"", "|-------- C%u -------> [", literal);
-                               zend_print_zval(&ops->literals[literal].constant, 0);
-                               phpdbg_out("]\n");
+                               phpdbg_write("|-------- C%u -------> [", literal);
+                               zend_print_zval(
+                                       &ops->literals[literal].constant, 0);
+                               phpdbg_write("]");
+                               phpdbg_writeln(EMPTY);
                        }
                        literal++;
                }
        } else {
-               phpdbg_error("inactive", "type=\"execution\"", "Not executing!");
+               phpdbg_error("Not executing!");
        }
 
        return SUCCESS;
@@ -347,40 +247,28 @@ PHPDBG_INFO(literal) /* {{{ */
 
 PHPDBG_INFO(memory) /* {{{ */
 {
-       size_t used, real, peak_used, peak_real;
-       zend_mm_heap *heap;
-       zend_bool is_mm;
-
-       if (PHPDBG_G(flags) & PHPDBG_IN_SIGNAL_HANDLER) {
-               heap = zend_mm_set_heap(phpdbg_original_heap_sigsafe_mem(TSRMLS_C) TSRMLS_CC);
-       }
-       if ((is_mm = is_zend_mm(TSRMLS_C))) {
-               used = zend_memory_usage(0 TSRMLS_CC);
-               real = zend_memory_usage(1 TSRMLS_CC);
-               peak_used = zend_memory_peak_usage(0 TSRMLS_CC);
-               peak_real = zend_memory_peak_usage(1 TSRMLS_CC);
-       }
-       if (PHPDBG_G(flags) & PHPDBG_IN_SIGNAL_HANDLER) {
-               zend_mm_set_heap(heap TSRMLS_CC);
-       }
-
-       if (is_mm) {
-               phpdbg_notice("meminfo", "", "Memory Manager Information");
-               phpdbg_notice("current", "", "Current");
-               phpdbg_writeln("used", "mem=\"%.3f\"", "|-------> Used:\t%.3f kB", (float) (used / 1024));
-               phpdbg_writeln("real", "mem=\"%.3f\"", "|-------> Real:\t%.3f kB", (float) (real / 1024));
-               phpdbg_notice("peak", "", "Peak");
-               phpdbg_writeln("used", "mem=\"%.3f\"", "|-------> Used:\t%.3f kB", (float) (peak_used / 1024));
-               phpdbg_writeln("real", "mem=\"%.3f\"", "|-------> Real:\t%.3f kB", (float) (peak_real / 1024));
+       if (is_zend_mm(TSRMLS_C)) {
+               phpdbg_notice("Memory Manager Information");
+               phpdbg_notice("Current");
+               phpdbg_writeln("|-------> Used:\t%.3f kB", 
+                       (float) (zend_memory_usage(0 TSRMLS_CC)/1024));
+               phpdbg_writeln("|-------> Real:\t%.3f kB", 
+                       (float) (zend_memory_usage(1 TSRMLS_CC)/1024));
+               phpdbg_notice("Peak");
+               phpdbg_writeln("|-------> Used:\t%.3f kB", 
+                       (float) (zend_memory_peak_usage(0 TSRMLS_CC)/1024));
+               phpdbg_writeln("|-------> Real:\t%.3f kB", 
+                       (float) (zend_memory_peak_usage(1 TSRMLS_CC)/1024));
        } else {
-               phpdbg_error("inactive", "type=\"memory_manager\"", "Memory Manager Disabled!");
+               phpdbg_error("Memory Manager Disabled!");
        }
        return SUCCESS;
 } /* }}} */
 
 static inline void phpdbg_print_class_name(zend_class_entry **ce TSRMLS_DC) /* {{{ */
 {
-       phpdbg_writeln("class", "type=\"%s\" flags=\"%s\" name=\"%s\" methodcount=\"%d\"", "%s %s %s (%d)",
+       phpdbg_write(
+               "%s %s %s (%d)",
                ((*ce)->type == ZEND_USER_CLASS) ?
                        "User" : "Internal",
                ((*ce)->ce_flags & ZEND_ACC_INTERFACE) ?
@@ -399,44 +287,44 @@ PHPDBG_INFO(classes) /* {{{ */
 
        zend_hash_init(&classes, 8, NULL, NULL, 0);
 
-       phpdbg_try_access {
-               for (zend_hash_internal_pointer_reset_ex(EG(class_table), &position);
-                    zend_hash_get_current_data_ex(EG(class_table), (void**)&ce, &position) == SUCCESS;
-                    zend_hash_move_forward_ex(EG(class_table), &position)) {
-                       if ((*ce)->type == ZEND_USER_CLASS) {
-                               zend_hash_next_index_insert(&classes, ce, sizeof(ce), NULL);
-                       }
+       for (zend_hash_internal_pointer_reset_ex(EG(class_table), &position);
+               zend_hash_get_current_data_ex(EG(class_table), (void**)&ce, &position) == SUCCESS;
+               zend_hash_move_forward_ex(EG(class_table), &position)) {
+
+               if ((*ce)->type == ZEND_USER_CLASS) {
+                       zend_hash_next_index_insert(
+                               &classes, ce, sizeof(ce), NULL);
                }
-       } phpdbg_catch_access {
-               phpdbg_notice("signalsegv", "", "Not all classes could be fetched, possibly invalid data source");
-       } phpdbg_end_try_access();
+       }
 
-       phpdbg_notice("classinfo", "num=\"%d\"", "User Classes (%d)", zend_hash_num_elements(&classes));
+       phpdbg_notice("User Classes (%d)",
+               zend_hash_num_elements(&classes));
 
-       /* once added, assume that classes are stable... until shutdown. */
        for (zend_hash_internal_pointer_reset_ex(&classes, &position);
-            zend_hash_get_current_data_ex(&classes, (void**)&ce, &position) == SUCCESS;
-            zend_hash_move_forward_ex(&classes, &position)) {
+               zend_hash_get_current_data_ex(&classes, (void**)&ce, &position) == SUCCESS;
+               zend_hash_move_forward_ex(&classes, &position)) {
 
                phpdbg_print_class_name(ce TSRMLS_CC);
+               phpdbg_writeln(EMPTY);
 
                if ((*ce)->parent) {
-                       zend_class_entry *pce;
-
-                       phpdbg_xml("<parents %r>");
-                       pce = (*ce)->parent;
+                       zend_class_entry *pce = (*ce)->parent;
                        do {
-                               phpdbg_out("|-------- ");
+                               phpdbg_write("|-------- ");
                                phpdbg_print_class_name(&pce TSRMLS_CC);
+                               phpdbg_writeln(EMPTY);
                        } while ((pce = pce->parent));
-                       phpdbg_xml("</parents>");
                }
 
                if ((*ce)->info.user.filename) {
-                       phpdbg_writeln("classsource", "file=\"%s\" line=\"%u\"", "|---- in %s on line %u", (*ce)->info.user.filename, (*ce)->info.user.line_start);
+                       phpdbg_writeln(
+                               "|---- in %s on line %u",
+                               (*ce)->info.user.filename,
+                               (*ce)->info.user.line_start);
                } else {
-                       phpdbg_writeln("classsource", "", "|---- no source code");
+                       phpdbg_writeln("|---- no source code");
                }
+               phpdbg_writeln(EMPTY);
        }
 
        zend_hash_destroy(&classes);
@@ -452,34 +340,29 @@ PHPDBG_INFO(funcs) /* {{{ */
 
        zend_hash_init(&functions, 8, NULL, NULL, 0);
 
-       phpdbg_try_access {
-               for (zend_hash_internal_pointer_reset_ex(EG(function_table), &position);
-                    zend_hash_get_current_data_ex(EG(function_table), (void**)&zf, &position) == SUCCESS;
-                    zend_hash_move_forward_ex(EG(function_table), &position)) {
-                       if (zf->type == ZEND_USER_FUNCTION) {
-                               zend_hash_next_index_insert(&functions, (void**) &zf, sizeof(zend_function), NULL);
-                       }
+       for (zend_hash_internal_pointer_reset_ex(EG(function_table), &position);
+               zend_hash_get_current_data_ex(EG(function_table), (void**)&zf, &position) == SUCCESS;
+               zend_hash_move_forward_ex(EG(function_table), &position)) {
+
+               if (zf->type == ZEND_USER_FUNCTION) {
+                       zend_hash_next_index_insert(
+                               &functions, (void**) &zf, sizeof(zend_function), NULL);
                }
-       } phpdbg_catch_access {
-               phpdbg_notice("signalsegv", "", "Not all functions could be fetched, possibly invalid data source");
-       } phpdbg_end_try_access();
+       }
 
-       phpdbg_notice("functioninfo", "num=\"%d\"", "User Functions (%d)", zend_hash_num_elements(&functions));
+       phpdbg_notice("User Functions (%d)",
+               zend_hash_num_elements(&functions));
 
        for (zend_hash_internal_pointer_reset_ex(&functions, &position);
                zend_hash_get_current_data_ex(&functions, (void**)&pzf, &position) == SUCCESS;
                zend_hash_move_forward_ex(&functions, &position)) {
                zend_op_array *op_array = &((*pzf)->op_array);
 
-               phpdbg_write("function", "name=\"%s\"", "|-------- %s", op_array->function_name ? op_array->function_name : "{main}");
-
-               if (op_array->filename) {
-                       phpdbg_writeln("functionsource", "file=\"%s\" line=\"%d\"", " in %s on line %d",
-                               op_array->filename,
-                               op_array->line_start);
-               } else {
-                       phpdbg_writeln("functionsource", "", " (no source code)");
-               }
+               phpdbg_writeln(
+                       "|-------- %s in %s on line %d",
+                       op_array->function_name ? op_array->function_name : "{main}",
+                       op_array->filename ? op_array->filename : "(no source code)",
+                       op_array->line_start);
        }
 
        zend_hash_destroy(&functions);
index aac9fa3ab3ba38dc8e3ec345476ce37953bcbb9a..c36e6bebd65f6996260334abee2f9755efc3493d 100644 (file)
@@ -30,9 +30,7 @@ PHPDBG_INFO(break);
 PHPDBG_INFO(classes);
 PHPDBG_INFO(funcs);
 PHPDBG_INFO(error);
-PHPDBG_INFO(constants);
 PHPDBG_INFO(vars);
-PHPDBG_INFO(globals);
 PHPDBG_INFO(literal);
 PHPDBG_INFO(memory);
 
diff --git a/sapi/phpdbg/phpdbg_io.c b/sapi/phpdbg/phpdbg_io.c
deleted file mode 100644 (file)
index a2a5c59..0000000
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
-   +----------------------------------------------------------------------+
-   | PHP Version 5                                                        |
-   +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2014 The PHP Group                                |
-   +----------------------------------------------------------------------+
-   | This source file is subject to version 3.01 of the PHP license,      |
-   | that is bundled with this package in the file LICENSE, and is        |
-   | available through the world-wide-web at the following url:           |
-   | http://www.php.net/license/3_01.txt                                  |
-   | If you did not receive a copy of the PHP license and are unable to   |
-   | obtain it through the world-wide-web, please send a note to          |
-   | license@php.net so we can mail you a copy immediately.               |
-   +----------------------------------------------------------------------+
-   | Authors: Anatol Belski <ab@php.net>                                  |
-   +----------------------------------------------------------------------+
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "phpdbg_io.h"
-
-#ifdef PHP_WIN32
-#undef UNICODE
-#include "win32/inet.h"
-#include <winsock2.h>
-#include <windows.h>
-#include <Ws2tcpip.h>
-#include "win32/sockets.h"
-
-#else
-
-#if HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#include <sys/socket.h>
-#include <netinet/in.h>
-#if HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#include <netdb.h>
-#include <fcntl.h>
-#include <poll.h>
-#endif
-
-ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
-
-/* is easy to generalize ... but not needed for now */
-PHPDBG_API int phpdbg_consume_stdin_line(char *buf TSRMLS_DC) {
-       int bytes = PHPDBG_G(input_buflen), len = 0;
-
-       if (PHPDBG_G(input_buflen)) {
-               memcpy(buf, PHPDBG_G(input_buffer), bytes);
-       }
-
-       PHPDBG_G(last_was_newline) = 1;
-
-       do {
-               int i;
-               if (bytes <= 0) { 
-                       continue;
-               }
-
-               for (i = len; i < len + bytes; i++) {
-                       if (buf[i] == '\x03') {
-                               if (i != len + bytes - 1) {
-                                       memmove(buf + i, buf + i + 1, len + bytes - i - 1);
-                               }
-                               len--;
-                               i--;
-                               continue;
-                       }
-                       if (buf[i] == '\n') {
-                               PHPDBG_G(input_buflen) = len + bytes - 1 - i;
-                               if (PHPDBG_G(input_buflen)) {
-                                       memcpy(PHPDBG_G(input_buffer), buf + i + 1, PHPDBG_G(input_buflen));
-                               }
-                               if (i != PHPDBG_MAX_CMD - 1) {
-                                       buf[i + 1] = 0;
-                               }
-                               return i;
-                       }
-               }
-
-               len += bytes;
-       } while ((bytes = phpdbg_mixed_read(PHPDBG_G(io)[PHPDBG_STDIN].fd, buf + len, PHPDBG_MAX_CMD - len, -1 TSRMLS_CC)) > 0);
-
-       if (bytes <= 0) {
-               PHPDBG_G(flags) |= PHPDBG_IS_QUITTING | PHPDBG_IS_DISCONNECTED;
-               zend_bailout();
-               return 0;
-       }
-
-       return bytes;
-}
-
-PHPDBG_API int phpdbg_consume_bytes(int sock, char *ptr, int len, int tmo TSRMLS_DC) {
-       int got_now, i = len, j;
-       char *p = ptr;
-#ifndef PHP_WIN32
-       struct pollfd pfd;
-
-       if (tmo < 0) goto recv_once;
-       pfd.fd = sock;
-       pfd.events = POLLIN;
-
-       j = poll(&pfd, 1, tmo);
-
-       if (j == 0) {
-#else
-       struct fd_set readfds;
-       struct timeval ttmo;
-
-       if (tmo < 0) goto recv_once;
-       FD_ZERO(&readfds);
-       FD_SET(sock, &readfds);
-
-       ttmo.tv_sec = 0;
-       ttmo.tv_usec = tmo*1000;
-
-       j = select(0, &readfds, NULL, NULL, &ttmo);
-
-       if (j <= 0) {
-#endif
-               return -1;
-       }
-
-recv_once:
-       while(i > 0) {
-               if (tmo < 0) {
-                       /* There's something to read. Read what's available and proceed
-                       disregarding whether len could be exhausted or not.*/
-                       int can_read = recv(sock, p, i, MSG_PEEK);
-#ifndef _WIN32
-                       if (can_read == -1 && errno == EINTR) {
-                               continue;
-                       }
-#endif
-                       i = can_read;
-               }
-
-#ifdef _WIN32
-               got_now = recv(sock, p, i, 0);
-#else
-               do {
-                       got_now = recv(sock, p, i, 0);
-               } while (got_now == -1 && errno == EINTR);
-#endif
-
-               if (got_now == -1) {
-                       write(PHPDBG_G(io)[PHPDBG_STDERR].fd, ZEND_STRL("Read operation timed out!\n"));
-                       return -1;
-               }
-               i -= got_now;
-               p += got_now;
-       }
-
-       return p - ptr;
-}
-
-PHPDBG_API int phpdbg_send_bytes(int sock, const char *ptr, int len) {
-       int sent, i = len;
-       const char *p = ptr;
-/* XXX poll/select needed here? */
-       while(i > 0) {
-               sent = send(sock, p, i, 0);
-               if (sent == -1) {
-                       return -1;
-               }
-               i -= sent;
-               p += sent;
-       }
-
-       return len;
-}
-
-
-PHPDBG_API int phpdbg_mixed_read(int sock, char *ptr, int len, int tmo TSRMLS_DC) {
-       if (PHPDBG_G(flags) & PHPDBG_IS_REMOTE) {
-               return phpdbg_consume_bytes(sock, ptr, len, tmo TSRMLS_CC);
-       }
-
-       return read(sock, ptr, len);
-}
-
-
-PHPDBG_API int phpdbg_mixed_write(int sock, const char *ptr, int len TSRMLS_DC) {
-       if (PHPDBG_G(flags) & PHPDBG_IS_REMOTE) {
-               return phpdbg_send_bytes(sock, ptr, len);
-       }
-
-       return write(sock, ptr, len);
-}
-
-
-PHPDBG_API int phpdbg_open_socket(const char *interface, unsigned short port TSRMLS_DC) {
-       struct addrinfo res;
-       int fd = phpdbg_create_listenable_socket(interface, port, &res TSRMLS_CC);
-
-       if (fd == -1) {
-               return -1;
-       }
-
-       if (bind(fd, res.ai_addr, res.ai_addrlen) == -1) {
-               phpdbg_close_socket(fd);
-               return -4;
-       }
-
-       listen(fd, 5);
-
-       return fd;
-}
-
-
-PHPDBG_API int phpdbg_create_listenable_socket(const char *addr, unsigned short port, struct addrinfo *addr_res TSRMLS_DC) {
-       int sock = -1, rc;
-       int reuse = 1;
-       struct in6_addr serveraddr;
-       struct addrinfo hints, *res = NULL;
-       char port_buf[8];
-       int8_t any_addr = *addr == '*';
-
-       do {
-               memset(&hints, 0, sizeof hints);
-               if (any_addr) {
-                       hints.ai_flags = AI_PASSIVE;
-               } else {
-                       hints.ai_flags = AI_NUMERICSERV;
-               }
-               hints.ai_family = AF_UNSPEC;
-               hints.ai_socktype = SOCK_STREAM;
-
-               rc = inet_pton(AF_INET, addr, &serveraddr);
-               if (1 == rc) {
-                       hints.ai_family = AF_INET;
-                       if (!any_addr) {
-                               hints.ai_flags |= AI_NUMERICHOST;
-                       }
-               } else {
-                       rc = inet_pton(AF_INET6, addr, &serveraddr);
-                       if (1 == rc) {
-                               hints.ai_family = AF_INET6;
-                               if (!any_addr) {
-                                       hints.ai_flags |= AI_NUMERICHOST;
-                               }
-                       } else {
-                               /* XXX get host by name ??? */
-                       }
-               }
-
-               snprintf(port_buf, 7, "%u", port);
-               if (!any_addr) {
-                       rc = getaddrinfo(addr, port_buf, &hints, &res);
-               } else {
-                       rc = getaddrinfo(NULL, port_buf, &hints, &res);
-               }
-
-               if (0 != rc) {
-#ifndef PHP_WIN32
-                       if (rc == EAI_SYSTEM) {
-                               char buf[128];
-                               int wrote;
-
-                               wrote = snprintf(buf, 128, "Could not translate address '%s'", addr);
-                               buf[wrote] = '\0';
-                               write(PHPDBG_G(io)[PHPDBG_STDERR].fd, buf, strlen(buf));
-
-                               return sock;
-                       } else {
-#endif
-                               char buf[256];
-                               int wrote;
-
-                               wrote = snprintf(buf, 256, "Host '%s' not found. %s", addr, estrdup(gai_strerror(rc)));
-                               buf[wrote] = '\0';
-                               write(PHPDBG_G(io)[PHPDBG_STDERR].fd, buf, strlen(buf));
-
-                               return sock;
-#ifndef PHP_WIN32
-                       }
-#endif
-                       return sock;
-               }
-
-               if((sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) == -1) {
-                       char buf[128];
-                       int wrote;
-
-                       wrote = sprintf(buf, "Unable to create socket");
-                       buf[wrote] = '\0';
-                       write(PHPDBG_G(io)[PHPDBG_STDERR].fd, buf, strlen(buf));
-
-                       return sock;
-               } 
-
-               if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char*) &reuse, sizeof(reuse)) == -1) {
-                       phpdbg_close_socket(sock);
-                       return sock;
-               }
-
-
-       } while (0);
-
-       *addr_res = *res;
-
-       return sock;
-}
-
-PHPDBG_API void phpdbg_close_socket(int sock) {
-       if (socket >= 0) {
-#ifdef _WIN32
-               closesocket(sock);
-#else
-               shutdown(sock, SHUT_RDWR);
-               close(sock);
-#endif
-       }
-}
-
diff --git a/sapi/phpdbg/phpdbg_io.h b/sapi/phpdbg/phpdbg_io.h
deleted file mode 100644 (file)
index a5659e8..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-   +----------------------------------------------------------------------+
-   | PHP Version 5                                                        |
-   +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2014 The PHP Group                                |
-   +----------------------------------------------------------------------+
-   | This source file is subject to version 3.01 of the PHP license,      |
-   | that is bundled with this package in the file LICENSE, and is        |
-   | available through the world-wide-web at the following url:           |
-   | http://www.php.net/license/3_01.txt                                  |
-   | If you did not receive a copy of the PHP license and are unable to   |
-   | obtain it through the world-wide-web, please send a note to          |
-   | license@php.net so we can mail you a copy immediately.               |
-   +----------------------------------------------------------------------+
-   | Authors: Anatol Belski <ab@php.net>                                  |
-   +----------------------------------------------------------------------+
-*/
-
-#ifndef PHPDBG_IO_H
-#define PHPDBG_IO_H
-
-#include "phpdbg.h"
-
-PHPDBG_API int phpdbg_consume_stdin_line(char *buf TSRMLS_DC);
-
-PHPDBG_API int phpdbg_consume_bytes(int sock, char *ptr, int len, int tmo TSRMLS_DC);
-PHPDBG_API int phpdbg_send_bytes(int sock, const char *ptr, int len);
-PHPDBG_API int phpdbg_mixed_read(int sock, char *ptr, int len, int tmo TSRMLS_DC);
-PHPDBG_API int phpdbg_mixed_write(int sock, const char *ptr, int len TSRMLS_DC);
-
-PHPDBG_API int phpdbg_create_listenable_socket(const char *addr, unsigned short port, struct addrinfo *res TSRMLS_DC);
-PHPDBG_API int phpdbg_open_socket(const char *interface, unsigned short port TSRMLS_DC);
-PHPDBG_API void phpdbg_close_socket(int sock);
-
-#endif /* PHPDBG_IO_H */
-
index 90f3a449daa079907d509723e0c4ee4f5e35d2ab..3092dc396dd6136064bcab96f16847c1ce179a5b 100644 (file)
@@ -1,5 +1,5 @@
 /* Generated by re2c 0.13.5 */
-#line 1 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 1 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
 /*
  * phpdbg_lexer.l
  */
@@ -23,9 +23,8 @@
 #define YYFILL(n)
 
 #define NORMAL 0
-#define PRE_RAW 1
-#define RAW 2
-#define INITIAL 3
+#define RAW 1
+#define INITIAL 2
 
 ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
 
@@ -45,18 +44,14 @@ restart:
        LEX(text) = YYCURSOR;
 
 
-#line 49 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 48 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
-       if (YYGETCONDITION() < 2) {
-               if (YYGETCONDITION() < 1) {
-                       goto yyc_NORMAL;
-               } else {
-                       goto yyc_PRE_RAW;
-               }
+       if (YYGETCONDITION() < 1) {
+               goto yyc_NORMAL;
        } else {
-               if (YYGETCONDITION() < 3) {
+               if (YYGETCONDITION() < 2) {
                        goto yyc_RAW;
                } else {
                        goto yyc_INITIAL;
@@ -67,10 +62,10 @@ yyc_INITIAL:
        {
                static const unsigned char yybm[] = {
                          0,   0,   0,   0,   0,   0,   0,   0, 
-                         0, 192,  96,   0,   0, 192,   0,   0, 
+                         0, 128, 128,   0,   0, 128,   0,   0, 
                          0,   0,   0,   0,   0,   0,   0,   0, 
                          0,   0,   0,   0,   0,   0,   0,   0, 
-                       192,   0,   0,   0,   0,   0,   0,   0, 
+                       128,   0,   0,   0,   0,   0,   0,   0, 
                          0,   0,   0,   0,   0,   0,   0,   0, 
                          0,   0,   0,   0,   0,   0,   0,   0, 
                          0,   0,   0,   0,   0,   0,   0,   0, 
@@ -103,1417 +98,1046 @@ yyc_INITIAL:
                YYDEBUG(0, *YYCURSOR);
                YYFILL(4);
                yych = *YYCURSOR;
-               if (yybm[0+yych] & 32) {
-                       goto yy4;
-               }
-               if (yych <= 'E') {
-                       if (yych <= '\f') {
-                               if (yych <= 0x00) goto yy7;
-                               if (yych != '\t') goto yy12;
+               if (yych <= 'D') {
+                       if (yych <= '\n') {
+                               if (yych <= 0x00) goto yy6;
+                               if (yych <= 0x08) goto yy11;
+                               if (yych >= '\n') goto yy4;
                        } else {
-                               if (yych <= 0x1F) {
-                                       if (yych >= 0x0E) goto yy12;
+                               if (yych <= '\r') {
+                                       if (yych <= '\f') goto yy11;
                                } else {
-                                       if (yych <= ' ') goto yy2;
-                                       if (yych <= 'D') goto yy12;
-                                       goto yy8;
+                                       if (yych != ' ') goto yy11;
                                }
                        }
                } else {
                        if (yych <= 'd') {
-                               if (yych <= 'Q') goto yy12;
-                               if (yych <= 'R') goto yy11;
-                               if (yych <= 'S') goto yy9;
-                               goto yy12;
+                               if (yych <= 'Q') {
+                                       if (yych <= 'E') goto yy7;
+                                       goto yy11;
+                               } else {
+                                       if (yych <= 'R') goto yy10;
+                                       if (yych <= 'S') goto yy8;
+                                       goto yy11;
+                               }
                        } else {
                                if (yych <= 'q') {
-                                       if (yych <= 'e') goto yy8;
-                                       goto yy12;
+                                       if (yych <= 'e') goto yy7;
+                                       goto yy11;
                                } else {
-                                       if (yych <= 'r') goto yy10;
-                                       if (yych <= 's') goto yy9;
-                                       goto yy12;
+                                       if (yych <= 'r') goto yy9;
+                                       if (yych <= 's') goto yy8;
+                                       goto yy11;
                                }
                        }
                }
-yy2:
                YYDEBUG(2, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) <= '\f') {
-                       if (yych <= 0x00) goto yy29;
                        if (yych <= 0x08) goto yy3;
-                       if (yych <= '\n') goto yy29;
+                       if (yych <= '\n') goto yy26;
                } else {
-                       if (yych <= '\r') goto yy29;
-                       if (yych == ' ') goto yy29;
+                       if (yych <= '\r') goto yy26;
+                       if (yych == ' ') goto yy26;
                }
 yy3:
                YYDEBUG(3, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 176 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 161 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        YYSETCONDITION(NORMAL);
 
        YYCURSOR = LEX(text);
        goto restart;
 }
-#line 161 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 154 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
 yy4:
                YYDEBUG(4, *YYCURSOR);
                ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
-               YYDEBUG(5, *YYCURSOR);
-               if (yybm[0+yych] & 128) {
-                       goto yy28;
+               if ((yych = *YYCURSOR) <= '\f') {
+                       if (yych <= 0x08) goto yy5;
+                       if (yych <= '\n') goto yy26;
+               } else {
+                       if (yych <= '\r') goto yy26;
+                       if (yych == ' ') goto yy26;
                }
-               if (yych <= 0x00) goto yy27;
-               if (yych == '\n') goto yy4;
-yy6:
-               YYDEBUG(6, *YYCURSOR);
+yy5:
+               YYDEBUG(5, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 69 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 68 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        return 0;
 }
-#line 180 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 172 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
+yy6:
+               YYDEBUG(6, *YYCURSOR);
+               yych = *++YYCURSOR;
+               goto yy3;
 yy7:
                YYDEBUG(7, *YYCURSOR);
-               yych = *++YYCURSOR;
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if (yych == 'V') goto yy22;
+               if (yych == 'v') goto yy22;
                goto yy3;
 yy8:
                YYDEBUG(8, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'V') goto yy23;
-               if (yych == 'v') goto yy23;
+               if (yych == 'H') goto yy18;
+               if (yych == 'h') goto yy18;
                goto yy3;
 yy9:
                YYDEBUG(9, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'H') goto yy19;
-               if (yych == 'h') goto yy19;
+               if (yybm[0+yych] & 128) {
+                       goto yy15;
+               }
+               if (yych == 'U') goto yy12;
+               if (yych == 'u') goto yy12;
                goto yy3;
 yy10:
                YYDEBUG(10, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yybm[0+yych] & 64) {
-                       goto yy16;
-               }
-               if (yych == 'U') goto yy13;
-               if (yych == 'u') goto yy13;
+               if (yych == 'U') goto yy12;
+               if (yych == 'u') goto yy12;
                goto yy3;
 yy11:
                YYDEBUG(11, *YYCURSOR);
-               yyaccept = 0;
-               yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'U') goto yy13;
-               if (yych == 'u') goto yy13;
+               yych = *++YYCURSOR;
                goto yy3;
 yy12:
                YYDEBUG(12, *YYCURSOR);
                yych = *++YYCURSOR;
-               goto yy3;
+               if (yych == 'N') goto yy14;
+               if (yych == 'n') goto yy14;
 yy13:
                YYDEBUG(13, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'N') goto yy15;
-               if (yych == 'n') goto yy15;
-yy14:
-               YYDEBUG(14, *YYCURSOR);
                YYCURSOR = YYMARKER;
                goto yy3;
-yy15:
-               YYDEBUG(15, *YYCURSOR);
+yy14:
+               YYDEBUG(14, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yybm[0+yych] & 64) {
-                       goto yy16;
+               if (yybm[0+yych] & 128) {
+                       goto yy15;
                }
-               goto yy14;
-yy16:
-               YYDEBUG(16, *YYCURSOR);
+               goto yy13;
+yy15:
+               YYDEBUG(15, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(17, *YYCURSOR);
-               if (yybm[0+yych] & 64) {
-                       goto yy16;
+               YYDEBUG(16, *YYCURSOR);
+               if (yybm[0+yych] & 128) {
+                       goto yy15;
                }
-               YYDEBUG(18, *YYCURSOR);
+               YYDEBUG(17, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 163 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 155 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
-       YYSETCONDITION(PRE_RAW);
+       YYSETCONDITION(RAW);
        phpdbg_init_param(yylval, EMPTY_PARAM);
        return T_RUN;
 }
-#line 253 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy19:
-               YYDEBUG(19, *YYCURSOR);
+#line 245 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
+yy18:
+               YYDEBUG(18, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= '\f') {
-                       if (yych <= 0x08) goto yy14;
-                       if (yych >= '\v') goto yy14;
+                       if (yych <= 0x08) goto yy13;
+                       if (yych >= '\v') goto yy13;
                } else {
-                       if (yych <= '\r') goto yy20;
-                       if (yych != ' ') goto yy14;
+                       if (yych <= '\r') goto yy19;
+                       if (yych != ' ') goto yy13;
                }
-yy20:
-               YYDEBUG(20, *YYCURSOR);
+yy19:
+               YYDEBUG(19, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(21, *YYCURSOR);
+               YYDEBUG(20, *YYCURSOR);
                if (yych <= '\f') {
-                       if (yych <= 0x08) goto yy22;
-                       if (yych <= '\n') goto yy20;
+                       if (yych <= 0x08) goto yy21;
+                       if (yych <= '\n') goto yy19;
                } else {
-                       if (yych <= '\r') goto yy20;
-                       if (yych == ' ') goto yy20;
+                       if (yych <= '\r') goto yy19;
+                       if (yych == ' ') goto yy19;
                }
-yy22:
-               YYDEBUG(22, *YYCURSOR);
+yy21:
+               YYDEBUG(21, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 158 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 150 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
-       YYSETCONDITION(PRE_RAW);
+       YYSETCONDITION(RAW);
        phpdbg_init_param(yylval, EMPTY_PARAM);
        return T_SHELL;
 }
-#line 286 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy23:
-               YYDEBUG(23, *YYCURSOR);
+#line 278 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
+yy22:
+               YYDEBUG(22, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= '\f') {
-                       if (yych <= 0x08) goto yy14;
-                       if (yych >= '\v') goto yy14;
+                       if (yych <= 0x08) goto yy13;
+                       if (yych >= '\v') goto yy13;
                } else {
-                       if (yych <= '\r') goto yy24;
-                       if (yych != ' ') goto yy14;
+                       if (yych <= '\r') goto yy23;
+                       if (yych != ' ') goto yy13;
                }
-yy24:
-               YYDEBUG(24, *YYCURSOR);
+yy23:
+               YYDEBUG(23, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(25, *YYCURSOR);
+               YYDEBUG(24, *YYCURSOR);
                if (yych <= '\f') {
-                       if (yych <= 0x08) goto yy26;
-                       if (yych <= '\n') goto yy24;
+                       if (yych <= 0x08) goto yy25;
+                       if (yych <= '\n') goto yy23;
                } else {
-                       if (yych <= '\r') goto yy24;
-                       if (yych == ' ') goto yy24;
+                       if (yych <= '\r') goto yy23;
+                       if (yych == ' ') goto yy23;
                }
-yy26:
-               YYDEBUG(26, *YYCURSOR);
+yy25:
+               YYDEBUG(25, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 153 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 145 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
-       YYSETCONDITION(PRE_RAW);
+       YYSETCONDITION(RAW);
        phpdbg_init_param(yylval, EMPTY_PARAM);
        return T_EVAL;
 }
-#line 319 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy27:
-               YYDEBUG(27, *YYCURSOR);
-               yych = *++YYCURSOR;
-               goto yy6;
-yy28:
-               YYDEBUG(28, *YYCURSOR);
+#line 311 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
+yy26:
+               YYDEBUG(26, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-yy29:
-               YYDEBUG(29, *YYCURSOR);
-               if (yybm[0+yych] & 128) {
-                       goto yy28;
+               YYDEBUG(27, *YYCURSOR);
+               if (yych <= '\f') {
+                       if (yych <= 0x08) goto yy28;
+                       if (yych <= '\n') goto yy26;
+               } else {
+                       if (yych <= '\r') goto yy26;
+                       if (yych == ' ') goto yy26;
                }
-               if (yych <= 0x00) goto yy27;
-               if (yych == '\n') goto yy4;
-               YYDEBUG(30, *YYCURSOR);
+yy28:
+               YYDEBUG(28, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 147 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 139 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        /* ignore whitespace */
 
        goto restart;
 }
-#line 344 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 334 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
        }
 /* *********************************** */
 yyc_NORMAL:
        {
                static const unsigned char yybm[] = {
-                         0,   8,   8,   8,   8,   8,   8,   8
-                         8,  66,  68,   8,   8,  66,   8,   8
-                         8,   8,   8,   8,   8,   8,   8,   8
-                         8,   8,   8,   8,   8,   8,   8,   8
-                        66,   8,   8,   0,   8,   8,   8,   8
-                         8,   8,   8,   8,   8,   8,  24,   8
-                       152, 152, 152, 152, 152, 152, 152, 152
-                       152, 152,   0,   8,   8,   8,   8,   8
-                         8, 168, 168, 168, 168, 168, 168,  40, 
-                        40,  40,  40,  40,  40,  40,  40,  40, 
-                        40,  40,  40,  40,  40,  40,  40,  40, 
-                        40,  40,  40,   8,   8,   8,   8,   8
-                         8, 168, 168, 168, 168, 168, 168,  40, 
-                        40,  40,  40,  40,  40,  40,  40,  40, 
-                        40,  40,  40,  40,  40,  40,  40,  40, 
-                        40,  40,  40,   8,   8,   8,   8,   8
-                         8,   8,   8,   8,   8,   8,   8,   8
-                         8,   8,   8,   8,   8,   8,   8,   8
-                         8,   8,   8,   8,   8,   8,   8,   8
-                         8,   8,   8,   8,   8,   8,   8,   8
-                         8,   8,   8,   8,   8,   8,   8,   8
-                         8,   8,   8,   8,   8,   8,   8,   8
-                         8,   8,   8,   8,   8,   8,   8,   8
-                         8,   8,   8,   8,   8,   8,   8,   8
-                         8,   8,   8,   8,   8,   8,   8,   8
-                         8,   8,   8,   8,   8,   8,   8,   8
-                         8,   8,   8,   8,   8,   8,   8,   8
-                         8,   8,   8,   8,   8,   8,   8,   8
-                         8,   8,   8,   8,   8,   8,   8,   8
-                         8,   8,   8,   8,   8,   8,   8,   8
-                         8,   8,   8,   8,   8,   8,   8,   8
-                         8,   8,   8,   8,   8,   8,   8,   8
+                         0,  16,  16,  16,  16,  16,  16,  16
+                        16,   8,   8,  16,  16,   8,  16,  16
+                        16,  16,  16,  16,  16,  16,  16,  16
+                        16,  16,  16,  16,  16,  16,  16,  16
+                         8,  16,  16,   0,  16,  16,  16,  16
+                        16,  16,  16,  16,  16,  16,  48,  16
+                       176, 176, 176, 176, 176, 176, 176, 176
+                       176, 176,   0,  16,  16,  16,  16,  16
+                        16, 208, 208, 208, 208, 208, 208,  80, 
+                        80,  80,  80,  80,  80,  80,  80,  80, 
+                        80,  80,  80,  80,  80,  80,  80,  80, 
+                        80,  80,  80,  16,  16,  16,  16,  16
+                        16, 208, 208, 208, 208, 208, 208,  80, 
+                        80,  80,  80,  80,  80,  80,  80,  80, 
+                        80,  80,  80,  80,  80,  80,  80,  80, 
+                        80,  80,  80,  16,  16,  16,  16,  16
+                        16,  16,  16,  16,  16,  16,  16,  16
+                        16,  16,  16,  16,  16,  16,  16,  16
+                        16,  16,  16,  16,  16,  16,  16,  16
+                        16,  16,  16,  16,  16,  16,  16,  16
+                        16,  16,  16,  16,  16,  16,  16,  16
+                        16,  16,  16,  16,  16,  16,  16,  16
+                        16,  16,  16,  16,  16,  16,  16,  16
+                        16,  16,  16,  16,  16,  16,  16,  16
+                        16,  16,  16,  16,  16,  16,  16,  16
+                        16,  16,  16,  16,  16,  16,  16,  16
+                        16,  16,  16,  16,  16,  16,  16,  16
+                        16,  16,  16,  16,  16,  16,  16,  16
+                        16,  16,  16,  16,  16,  16,  16,  16
+                        16,  16,  16,  16,  16,  16,  16,  16
+                        16,  16,  16,  16,  16,  16,  16,  16
+                        16,  16,  16,  16,  16,  16,  16,  16
                };
-               YYDEBUG(31, *YYCURSOR);
+               YYDEBUG(29, *YYCURSOR);
                YYFILL(11);
                yych = *YYCURSOR;
-               if (yybm[0+yych] & 2) {
-                       goto yy33;
-               }
-               if (yych <= 'N') {
-                       if (yych <= '0') {
-                               if (yych <= '#') {
-                                       if (yych <= '\t') {
-                                               if (yych <= 0x00) goto yy39;
-                                               goto yy43;
-                                       } else {
-                                               if (yych <= '\n') goto yy36;
-                                               if (yych <= '"') goto yy43;
-                                               goto yy58;
-                                       }
-                               } else {
-                                       if (yych <= '-') {
-                                               if (yych <= ',') goto yy43;
-                                               goto yy40;
-                                       } else {
-                                               if (yych <= '.') goto yy45;
-                                               if (yych <= '/') goto yy43;
-                                               goto yy48;
-                                       }
-                               }
-                       } else {
-                               if (yych <= 'E') {
-                                       if (yych <= ':') {
-                                               if (yych <= '9') goto yy45;
-                                               goto yy60;
-                                       } else {
-                                               if (yych <= 'C') goto yy43;
-                                               if (yych <= 'D') goto yy49;
-                                               goto yy50;
-                                       }
-                               } else {
-                                       if (yych <= 'H') {
-                                               if (yych <= 'F') goto yy51;
-                                               goto yy43;
-                                       } else {
-                                               if (yych <= 'I') goto yy42;
-                                               if (yych <= 'M') goto yy43;
-                                               goto yy52;
-                                       }
-                               }
-                       }
-               } else {
-                       if (yych <= 'f') {
-                               if (yych <= 'Y') {
-                                       if (yych <= 'S') {
-                                               if (yych <= 'O') goto yy53;
-                                               goto yy43;
-                                       } else {
-                                               if (yych <= 'T') goto yy54;
-                                               if (yych <= 'X') goto yy43;
-                                               goto yy55;
-                                       }
-                               } else {
-                                       if (yych <= 'c') {
-                                               if (yych <= 'Z') goto yy56;
-                                               goto yy43;
-                                       } else {
-                                               if (yych <= 'd') goto yy49;
-                                               if (yych <= 'e') goto yy50;
-                                               goto yy51;
-                                       }
-                               }
-                       } else {
-                               if (yych <= 'o') {
-                                       if (yych <= 'i') {
-                                               if (yych <= 'h') goto yy43;
-                                               goto yy42;
-                                       } else {
-                                               if (yych <= 'm') goto yy43;
-                                               if (yych <= 'n') goto yy52;
-                                               goto yy53;
-                                       }
-                               } else {
-                                       if (yych <= 'x') {
-                                               if (yych == 't') goto yy54;
-                                               goto yy43;
-                                       } else {
-                                               if (yych <= 'y') goto yy55;
-                                               if (yych <= 'z') goto yy57;
-                                               goto yy43;
-                                       }
-                               }
-                       }
+               YYDEBUG(-1, yych);
+               switch (yych) {
+               case 0x00:      goto yy36;
+               case '\t':
+               case '\r':
+               case ' ':       goto yy31;
+               case '\n':      goto yy34;
+               case '#':       goto yy55;
+               case '-':       goto yy41;
+               case '.':
+               case '1':
+               case '2':
+               case '3':
+               case '4':
+               case '5':
+               case '6':
+               case '7':
+               case '8':
+               case '9':       goto yy42;
+               case '0':       goto yy45;
+               case ':':       goto yy57;
+               case 'D':
+               case 'd':       goto yy46;
+               case 'E':
+               case 'e':       goto yy47;
+               case 'F':
+               case 'f':       goto yy48;
+               case 'I':
+               case 'i':       goto yy37;
+               case 'N':
+               case 'n':       goto yy49;
+               case 'O':
+               case 'o':       goto yy50;
+               case 'T':
+               case 't':       goto yy51;
+               case 'Y':
+               case 'y':       goto yy52;
+               case 'Z':       goto yy53;
+               case 'z':       goto yy54;
+               default:        goto yy39;
                }
-yy33:
-               YYDEBUG(33, *YYCURSOR);
+yy31:
+               YYDEBUG(31, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(34, *YYCURSOR);
-               if (yybm[0+yych] & 2) {
-                       goto yy33;
+               YYDEBUG(32, *YYCURSOR);
+               if (yybm[0+yych] & 8) {
+                       goto yy31;
                }
-               if (yych <= 0x00) goto yy39;
-               if (yych == '\n') goto yy36;
-               YYDEBUG(35, *YYCURSOR);
+               YYDEBUG(33, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 147 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 139 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        /* ignore whitespace */
 
        goto restart;
 }
-#line 493 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy36:
-               YYDEBUG(36, *YYCURSOR);
+#line 434 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
+yy34:
+               YYDEBUG(34, *YYCURSOR);
                ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
-               YYDEBUG(37, *YYCURSOR);
-               if (yybm[0+yych] & 2) {
-                       goto yy33;
+               if (yybm[0+(yych = *YYCURSOR)] & 8) {
+                       goto yy31;
                }
-               if (yych <= 0x00) goto yy39;
-               if (yych == '\n') goto yy36;
-yy38:
-               YYDEBUG(38, *YYCURSOR);
+yy35:
+               YYDEBUG(35, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 69 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 68 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        return 0;
 }
-#line 512 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy39:
-               YYDEBUG(39, *YYCURSOR);
+#line 448 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
+yy36:
+               YYDEBUG(36, *YYCURSOR);
                yych = *++YYCURSOR;
-               goto yy38;
-yy40:
-               YYDEBUG(40, *YYCURSOR);
+               goto yy35;
+yy37:
+               YYDEBUG(37, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yybm[0+yych] & 16) {
-                       goto yy45;
-               }
-               if (yych == 'r') goto yy113;
-               goto yy44;
-yy41:
-               YYDEBUG(41, *YYCURSOR);
+               if (yych == 'F') goto yy106;
+               if (yych == 'f') goto yy106;
+               goto yy40;
+yy38:
+               YYDEBUG(38, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 133 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 125 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        phpdbg_init_param(yylval, STR_PARAM);
        yylval->str = zend_strndup(yytext, yyleng);
        yylval->len = yyleng;
        return T_ID; 
 }
-#line 536 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy42:
-               YYDEBUG(42, *YYCURSOR);
-               yyaccept = 0;
-               yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'F') goto yy109;
-               if (yych == 'f') goto yy109;
-               goto yy44;
-yy43:
-               YYDEBUG(43, *YYCURSOR);
+#line 470 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
+yy39:
+               YYDEBUG(39, *YYCURSOR);
                yyaccept = 0;
                YYMARKER = ++YYCURSOR;
                YYFILL(3);
                yych = *YYCURSOR;
-yy44:
-               YYDEBUG(44, *YYCURSOR);
-               if (yybm[0+yych] & 8) {
-                       goto yy43;
+yy40:
+               YYDEBUG(40, *YYCURSOR);
+               if (yybm[0+yych] & 16) {
+                       goto yy39;
                }
-               if (yych <= '9') goto yy41;
-               goto yy65;
-yy45:
-               YYDEBUG(45, *YYCURSOR);
+               if (yych <= '9') goto yy38;
+               goto yy62;
+yy41:
+               YYDEBUG(41, *YYCURSOR);
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if (yybm[0+yych] & 32) {
+                       goto yy42;
+               }
+               goto yy40;
+yy42:
+               YYDEBUG(42, *YYCURSOR);
                yyaccept = 1;
                YYMARKER = ++YYCURSOR;
                YYFILL(3);
                yych = *YYCURSOR;
-               YYDEBUG(46, *YYCURSOR);
-               if (yybm[0+yych] & 16) {
-                       goto yy45;
+               YYDEBUG(43, *YYCURSOR);
+               if (yybm[0+yych] & 32) {
+                       goto yy42;
                }
                if (yych <= 0x1F) {
                        if (yych <= '\n') {
-                               if (yych <= 0x00) goto yy47;
-                               if (yych <= 0x08) goto yy43;
+                               if (yych <= 0x00) goto yy44;
+                               if (yych <= 0x08) goto yy39;
                        } else {
-                               if (yych != '\r') goto yy43;
+                               if (yych != '\r') goto yy39;
                        }
                } else {
                        if (yych <= '#') {
-                               if (yych <= ' ') goto yy47;
-                               if (yych <= '"') goto yy43;
+                               if (yych <= ' ') goto yy44;
+                               if (yych <= '"') goto yy39;
                        } else {
-                               if (yych == ':') goto yy65;
-                               goto yy43;
+                               if (yych == ':') goto yy62;
+                               goto yy39;
                        }
                }
-yy47:
-               YYDEBUG(47, *YYCURSOR);
+yy44:
+               YYDEBUG(44, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 114 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 106 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        phpdbg_init_param(yylval, NUMERIC_PARAM);
        yylval->num = atoi(yytext);
        return T_DIGITS;
 }
-#line 592 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy48:
-               YYDEBUG(48, *YYCURSOR);
+#line 527 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
+yy45:
+               YYDEBUG(45, *YYCURSOR);
                yyaccept = 1;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yybm[0+yych] & 16) {
-                       goto yy45;
+               if (yybm[0+yych] & 32) {
+                       goto yy42;
                }
                if (yych <= 0x1F) {
                        if (yych <= '\n') {
-                               if (yych <= 0x00) goto yy47;
-                               if (yych <= 0x08) goto yy44;
-                               goto yy47;
-                       } else {
-                               if (yych == '\r') goto yy47;
+                               if (yych <= 0x00) goto yy44;
+                               if (yych <= 0x08) goto yy40;
                                goto yy44;
+                       } else {
+                               if (yych == '\r') goto yy44;
+                               goto yy40;
                        }
                } else {
                        if (yych <= '#') {
-                               if (yych <= ' ') goto yy47;
-                               if (yych <= '"') goto yy44;
-                               goto yy47;
-                       } else {
-                               if (yych == 'x') goto yy105;
+                               if (yych <= ' ') goto yy44;
+                               if (yych <= '"') goto yy40;
                                goto yy44;
+                       } else {
+                               if (yych == 'x') goto yy102;
+                               goto yy40;
                        }
                }
+yy46:
+               YYDEBUG(46, *YYCURSOR);
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if (yych == 'I') goto yy96;
+               if (yych == 'i') goto yy96;
+               goto yy40;
+yy47:
+               YYDEBUG(47, *YYCURSOR);
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if (yych == 'N') goto yy91;
+               if (yych == 'n') goto yy91;
+               goto yy40;
+yy48:
+               YYDEBUG(48, *YYCURSOR);
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if (yych == 'A') goto yy88;
+               if (yych == 'a') goto yy88;
+               goto yy40;
 yy49:
                YYDEBUG(49, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'I') goto yy99;
-               if (yych == 'i') goto yy99;
-               goto yy44;
+               if (yych == 'O') goto yy84;
+               if (yych == 'o') goto yy84;
+               goto yy40;
 yy50:
                YYDEBUG(50, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'N') goto yy94;
-               if (yych == 'n') goto yy94;
-               goto yy44;
+               if (yych <= 'N') {
+                       if (yych == 'F') goto yy83;
+                       if (yych <= 'M') goto yy40;
+                       goto yy77;
+               } else {
+                       if (yych <= 'f') {
+                               if (yych <= 'e') goto yy40;
+                               goto yy83;
+                       } else {
+                               if (yych == 'n') goto yy77;
+                               goto yy40;
+                       }
+               }
 yy51:
                YYDEBUG(51, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'A') goto yy91;
-               if (yych == 'a') goto yy91;
-               goto yy44;
+               if (yych == 'R') goto yy81;
+               if (yych == 'r') goto yy81;
+               goto yy40;
 yy52:
                YYDEBUG(52, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'O') goto yy87;
-               if (yych == 'o') goto yy87;
-               goto yy44;
+               if (yych == 'E') goto yy76;
+               if (yych == 'e') goto yy76;
+               goto yy40;
 yy53:
                YYDEBUG(53, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych <= 'N') {
-                       if (yych == 'F') goto yy86;
-                       if (yych <= 'M') goto yy44;
-                       goto yy80;
-               } else {
-                       if (yych <= 'f') {
-                               if (yych <= 'e') goto yy44;
-                               goto yy86;
-                       } else {
-                               if (yych == 'n') goto yy80;
-                               goto yy44;
-                       }
-               }
+               if (yych == 'E') goto yy73;
+               goto yy40;
 yy54:
                YYDEBUG(54, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'R') goto yy84;
-               if (yych == 'r') goto yy84;
-               goto yy44;
+               if (yych == 'e') goto yy61;
+               goto yy40;
 yy55:
                YYDEBUG(55, *YYCURSOR);
-               yyaccept = 0;
-               yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'E') goto yy79;
-               if (yych == 'e') goto yy79;
-               goto yy44;
-yy56:
-               YYDEBUG(56, *YYCURSOR);
-               yyaccept = 0;
-               yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'E') goto yy76;
-               goto yy44;
-yy57:
-               YYDEBUG(57, *YYCURSOR);
-               yyaccept = 0;
-               yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'e') goto yy64;
-               goto yy44;
-yy58:
-               YYDEBUG(58, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(59, *YYCURSOR);
+               YYDEBUG(56, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 92 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 84 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        return T_POUND;
 }
-#line 699 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy60:
-               YYDEBUG(60, *YYCURSOR);
+#line 634 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
+yy57:
+               YYDEBUG(57, *YYCURSOR);
                ++YYCURSOR;
-               if ((yych = *YYCURSOR) == ':') goto yy62;
-               YYDEBUG(61, *YYCURSOR);
+               if ((yych = *YYCURSOR) == ':') goto yy59;
+               YYDEBUG(58, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 98 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 90 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        return T_COLON;
 }
-#line 710 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy62:
-               YYDEBUG(62, *YYCURSOR);
+#line 645 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
+yy59:
+               YYDEBUG(59, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(63, *YYCURSOR);
+               YYDEBUG(60, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 95 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 87 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        return T_DCOLON;
 }
-#line 720 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy64:
-               YYDEBUG(64, *YYCURSOR);
+#line 655 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
+yy61:
+               YYDEBUG(61, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'n') goto yy70;
-               goto yy44;
-yy65:
-               YYDEBUG(65, *YYCURSOR);
+               if (yych == 'n') goto yy67;
+               goto yy40;
+yy62:
+               YYDEBUG(62, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '/') goto yy67;
-yy66:
-               YYDEBUG(66, *YYCURSOR);
+               if (yych == '/') goto yy64;
+yy63:
+               YYDEBUG(63, *YYCURSOR);
                YYCURSOR = YYMARKER;
-               if (yyaccept <= 2) {
-                       if (yyaccept <= 1) {
-                               if (yyaccept <= 0) {
-                                       goto yy41;
-                               } else {
-                                       goto yy47;
-                               }
+               if (yyaccept <= 1) {
+                       if (yyaccept <= 0) {
+                               goto yy38;
                        } else {
-                               goto yy75;
+                               goto yy44;
                        }
                } else {
-                       if (yyaccept <= 3) {
-                               goto yy108;
+                       if (yyaccept <= 2) {
+                               goto yy72;
                        } else {
-                               goto yy119;
+                               goto yy105;
                        }
                }
-yy67:
-               YYDEBUG(67, *YYCURSOR);
+yy64:
+               YYDEBUG(64, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych != '/') goto yy66;
-               YYDEBUG(68, *YYCURSOR);
+               if (yych != '/') goto yy63;
+               YYDEBUG(65, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(69, *YYCURSOR);
+               YYDEBUG(66, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 86 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 78 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        phpdbg_init_param(yylval, STR_PARAM);
        yylval->str = zend_strndup(yytext, yyleng);
        yylval->len = yyleng;
        return T_PROTO;
 }
-#line 766 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy70:
-               YYDEBUG(70, *YYCURSOR);
+#line 697 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
+yy67:
+               YYDEBUG(67, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych != 'd') goto yy44;
-               YYDEBUG(71, *YYCURSOR);
+               if (yych != 'd') goto yy40;
+               YYDEBUG(68, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych != '_') goto yy44;
-yy72:
-               YYDEBUG(72, *YYCURSOR);
+               if (yych != '_') goto yy40;
+yy69:
+               YYDEBUG(69, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yybm[0+yych] & 32) {
-                       goto yy73;
+               if (yybm[0+yych] & 64) {
+                       goto yy70;
                }
-               goto yy44;
-yy73:
-               YYDEBUG(73, *YYCURSOR);
-               yyaccept = 2;
+               goto yy40;
+yy70:
+               YYDEBUG(70, *YYCURSOR);
+               yyaccept = 2;
                YYMARKER = ++YYCURSOR;
                YYFILL(3);
                yych = *YYCURSOR;
-               YYDEBUG(74, *YYCURSOR);
-               if (yybm[0+yych] & 32) {
-                       goto yy73;
+               YYDEBUG(71, *YYCURSOR);
+               if (yybm[0+yych] & 64) {
+                       goto yy70;
                }
                if (yych <= 0x1F) {
                        if (yych <= '\n') {
-                               if (yych <= 0x00) goto yy75;
-                               if (yych <= 0x08) goto yy43;
+                               if (yych <= 0x00) goto yy72;
+                               if (yych <= 0x08) goto yy39;
                        } else {
-                               if (yych != '\r') goto yy43;
+                               if (yych != '\r') goto yy39;
                        }
                } else {
                        if (yych <= '#') {
-                               if (yych <= ' ') goto yy75;
-                               if (yych <= '"') goto yy43;
+                               if (yych <= ' ') goto yy72;
+                               if (yych <= '"') goto yy39;
                        } else {
-                               if (yych == ':') goto yy65;
-                               goto yy43;
+                               if (yych == ':') goto yy62;
+                               goto yy39;
                        }
                }
-yy75:
-               YYDEBUG(75, *YYCURSOR);
+yy72:
+               YYDEBUG(72, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 126 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 118 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        phpdbg_init_param(yylval, OP_PARAM);
        yylval->str = zend_strndup(yytext, yyleng);
        yylval->len = yyleng;
        return T_OPCODE;
 }
-#line 820 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy76:
-               YYDEBUG(76, *YYCURSOR);
+#line 751 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
+yy73:
+               YYDEBUG(73, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych != 'N') goto yy44;
-               YYDEBUG(77, *YYCURSOR);
+               if (yych != 'N') goto yy40;
+               YYDEBUG(74, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych != 'D') goto yy44;
-               YYDEBUG(78, *YYCURSOR);
+               if (yych != 'D') goto yy40;
+               YYDEBUG(75, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == '_') goto yy72;
-               goto yy44;
-yy79:
-               YYDEBUG(79, *YYCURSOR);
+               if (yych == '_') goto yy69;
+               goto yy40;
+yy76:
+               YYDEBUG(76, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'S') goto yy80;
-               if (yych != 's') goto yy44;
-yy80:
-               YYDEBUG(80, *YYCURSOR);
+               if (yych == 'S') goto yy77;
+               if (yych != 's') goto yy40;
+yy77:
+               YYDEBUG(77, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yybm[0+yych] & 64) {
-                       goto yy81;
+               if (yych <= '\f') {
+                       if (yych <= 0x08) goto yy40;
+                       if (yych >= '\v') goto yy40;
+               } else {
+                       if (yych <= '\r') goto yy78;
+                       if (yych != ' ') goto yy40;
                }
-               goto yy44;
-yy81:
-               YYDEBUG(81, *YYCURSOR);
+yy78:
+               YYDEBUG(78, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(82, *YYCURSOR);
-               if (yybm[0+yych] & 64) {
-                       goto yy81;
+               YYDEBUG(79, *YYCURSOR);
+               if (yych <= '\f') {
+                       if (yych <= 0x08) goto yy80;
+                       if (yych <= '\n') goto yy78;
+               } else {
+                       if (yych <= '\r') goto yy78;
+                       if (yych == ' ') goto yy78;
                }
-               YYDEBUG(83, *YYCURSOR);
+yy80:
+               YYDEBUG(80, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 102 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 94 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        phpdbg_init_param(yylval, NUMERIC_PARAM);
        yylval->num = 1;                
        return T_TRUTHY;
 }
-#line 866 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy84:
-               YYDEBUG(84, *YYCURSOR);
+#line 805 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
+yy81:
+               YYDEBUG(81, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'U') goto yy85;
-               if (yych != 'u') goto yy44;
-yy85:
-               YYDEBUG(85, *YYCURSOR);
+               if (yych == 'U') goto yy82;
+               if (yych != 'u') goto yy40;
+yy82:
+               YYDEBUG(82, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'E') goto yy80;
-               if (yych == 'e') goto yy80;
-               goto yy44;
-yy86:
-               YYDEBUG(86, *YYCURSOR);
+               if (yych == 'E') goto yy77;
+               if (yych == 'e') goto yy77;
+               goto yy40;
+yy83:
+               YYDEBUG(83, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'F') goto yy87;
-               if (yych != 'f') goto yy44;
-yy87:
-               YYDEBUG(87, *YYCURSOR);
+               if (yych == 'F') goto yy84;
+               if (yych != 'f') goto yy40;
+yy84:
+               YYDEBUG(84, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yych <= '\f') {
-                       if (yych <= 0x08) goto yy44;
-                       if (yych >= '\v') goto yy44;
+                       if (yych <= 0x08) goto yy40;
+                       if (yych >= '\v') goto yy40;
                } else {
-                       if (yych <= '\r') goto yy88;
-                       if (yych != ' ') goto yy44;
+                       if (yych <= '\r') goto yy85;
+                       if (yych != ' ') goto yy40;
                }
-yy88:
-               YYDEBUG(88, *YYCURSOR);
+yy85:
+               YYDEBUG(85, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(89, *YYCURSOR);
+               YYDEBUG(86, *YYCURSOR);
                if (yych <= '\f') {
-                       if (yych <= 0x08) goto yy90;
-                       if (yych <= '\n') goto yy88;
+                       if (yych <= 0x08) goto yy87;
+                       if (yych <= '\n') goto yy85;
                } else {
-                       if (yych <= '\r') goto yy88;
-                       if (yych == ' ') goto yy88;
+                       if (yych <= '\r') goto yy85;
+                       if (yych == ' ') goto yy85;
                }
-yy90:
-               YYDEBUG(90, *YYCURSOR);
+yy87:
+               YYDEBUG(87, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 108 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 100 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        phpdbg_init_param(yylval, NUMERIC_PARAM);
        yylval->num = 0;
        return T_FALSY;
 }
-#line 919 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 858 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
+yy88:
+               YYDEBUG(88, *YYCURSOR);
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if (yych == 'L') goto yy89;
+               if (yych != 'l') goto yy40;
+yy89:
+               YYDEBUG(89, *YYCURSOR);
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if (yych == 'S') goto yy90;
+               if (yych != 's') goto yy40;
+yy90:
+               YYDEBUG(90, *YYCURSOR);
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if (yych == 'E') goto yy84;
+               if (yych == 'e') goto yy84;
+               goto yy40;
 yy91:
                YYDEBUG(91, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'L') goto yy92;
-               if (yych != 'l') goto yy44;
+               if (yych == 'A') goto yy92;
+               if (yych != 'a') goto yy40;
 yy92:
                YYDEBUG(92, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'S') goto yy93;
-               if (yych != 's') goto yy44;
+               if (yych == 'B') goto yy93;
+               if (yych != 'b') goto yy40;
 yy93:
                YYDEBUG(93, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'E') goto yy87;
-               if (yych == 'e') goto yy87;
-               goto yy44;
+               if (yych == 'L') goto yy94;
+               if (yych != 'l') goto yy40;
 yy94:
                YYDEBUG(94, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'A') goto yy95;
-               if (yych != 'a') goto yy44;
+               if (yych == 'E') goto yy95;
+               if (yych != 'e') goto yy40;
 yy95:
                YYDEBUG(95, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'B') goto yy96;
-               if (yych != 'b') goto yy44;
+               if (yych == 'D') goto yy77;
+               if (yych == 'd') goto yy77;
+               goto yy40;
 yy96:
                YYDEBUG(96, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'L') goto yy97;
-               if (yych != 'l') goto yy44;
+               if (yych == 'S') goto yy97;
+               if (yych != 's') goto yy40;
 yy97:
                YYDEBUG(97, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'E') goto yy98;
-               if (yych != 'e') goto yy44;
+               if (yych == 'A') goto yy98;
+               if (yych != 'a') goto yy40;
 yy98:
                YYDEBUG(98, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'D') goto yy80;
-               if (yych == 'd') goto yy80;
-               goto yy44;
+               if (yych == 'B') goto yy99;
+               if (yych != 'b') goto yy40;
 yy99:
                YYDEBUG(99, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'S') goto yy100;
-               if (yych != 's') goto yy44;
+               if (yych == 'L') goto yy100;
+               if (yych != 'l') goto yy40;
 yy100:
                YYDEBUG(100, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'A') goto yy101;
-               if (yych != 'a') goto yy44;
+               if (yych == 'E') goto yy101;
+               if (yych != 'e') goto yy40;
 yy101:
                YYDEBUG(101, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'B') goto yy102;
-               if (yych != 'b') goto yy44;
+               if (yych == 'D') goto yy84;
+               if (yych == 'd') goto yy84;
+               goto yy40;
 yy102:
                YYDEBUG(102, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'L') goto yy103;
-               if (yych != 'l') goto yy44;
-yy103:
-               YYDEBUG(103, *YYCURSOR);
-               yyaccept = 0;
-               yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'E') goto yy104;
-               if (yych != 'e') goto yy44;
-yy104:
-               YYDEBUG(104, *YYCURSOR);
-               yyaccept = 0;
-               yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'D') goto yy87;
-               if (yych == 'd') goto yy87;
-               goto yy44;
-yy105:
-               YYDEBUG(105, *YYCURSOR);
-               yyaccept = 0;
-               yych = *(YYMARKER = ++YYCURSOR);
                if (yybm[0+yych] & 128) {
-                       goto yy106;
+                       goto yy103;
                }
-               goto yy44;
-yy106:
-               YYDEBUG(106, *YYCURSOR);
+               goto yy40;
+yy103:
+               YYDEBUG(103, *YYCURSOR);
                yyaccept = 3;
                YYMARKER = ++YYCURSOR;
                YYFILL(3);
                yych = *YYCURSOR;
-               YYDEBUG(107, *YYCURSOR);
+               YYDEBUG(104, *YYCURSOR);
                if (yybm[0+yych] & 128) {
-                       goto yy106;
+                       goto yy103;
                }
                if (yych <= 0x1F) {
                        if (yych <= '\n') {
-                               if (yych <= 0x00) goto yy108;
-                               if (yych <= 0x08) goto yy43;
+                               if (yych <= 0x00) goto yy105;
+                               if (yych <= 0x08) goto yy39;
                        } else {
-                               if (yych != '\r') goto yy43;
+                               if (yych != '\r') goto yy39;
                        }
                } else {
                        if (yych <= '#') {
-                               if (yych <= ' ') goto yy108;
-                               if (yych <= '"') goto yy43;
+                               if (yych <= ' ') goto yy105;
+                               if (yych <= '"') goto yy39;
                        } else {
-                               if (yych == ':') goto yy65;
-                               goto yy43;
+                               if (yych == ':') goto yy62;
+                               goto yy39;
                        }
                }
-yy108:
-               YYDEBUG(108, *YYCURSOR);
+yy105:
+               YYDEBUG(105, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 120 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 112 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        phpdbg_init_param(yylval, ADDR_PARAM);
        yylval->addr = strtoul(yytext, 0, 16);
        return T_ADDR;
 }
-#line 1050 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy109:
-               YYDEBUG(109, *YYCURSOR);
+#line 989 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
+yy106:
+               YYDEBUG(106, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yych <= '\f') {
-                       if (yych <= 0x08) goto yy44;
-                       if (yych >= '\v') goto yy44;
+                       if (yych <= 0x08) goto yy40;
+                       if (yych >= '\v') goto yy40;
                } else {
-                       if (yych <= '\r') goto yy110;
-                       if (yych != ' ') goto yy44;
+                       if (yych <= '\r') goto yy107;
+                       if (yych != ' ') goto yy40;
                }
-yy110:
-               YYDEBUG(110, *YYCURSOR);
+yy107:
+               YYDEBUG(107, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(111, *YYCURSOR);
+               YYDEBUG(108, *YYCURSOR);
                if (yych <= '\f') {
-                       if (yych <= 0x08) goto yy112;
-                       if (yych <= '\n') goto yy110;
+                       if (yych <= 0x08) goto yy109;
+                       if (yych <= '\n') goto yy107;
                } else {
-                       if (yych <= '\r') goto yy110;
-                       if (yych == ' ') goto yy110;
+                       if (yych <= '\r') goto yy107;
+                       if (yych == ' ') goto yy107;
                }
-yy112:
-               YYDEBUG(112, *YYCURSOR);
+yy109:
+               YYDEBUG(109, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 80 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 72 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        YYSETCONDITION(RAW);
        phpdbg_init_param(yylval, EMPTY_PARAM);
        return T_IF;
 }
-#line 1084 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy113:
-               YYDEBUG(113, *YYCURSOR);
-               yyaccept = 0;
-               yych = *(YYMARKER = ++YYCURSOR);
-               if (yych <= ' ') {
-                       if (yych <= '\f') {
-                               if (yych <= 0x08) goto yy44;
-                               if (yych >= '\v') goto yy44;
-                       } else {
-                               if (yych <= '\r') goto yy114;
-                               if (yych <= 0x1F) goto yy44;
-                       }
-               } else {
-                       if (yych <= '.') {
-                               if (yych <= ',') goto yy44;
-                               if (yych <= '-') goto yy116;
-                               goto yy117;
-                       } else {
-                               if (yych <= '/') goto yy44;
-                               if (yych <= '9') goto yy117;
-                               goto yy44;
-                       }
-               }
-yy114:
-               YYDEBUG(114, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(2);
-               yych = *YYCURSOR;
-               YYDEBUG(115, *YYCURSOR);
-               if (yych <= ' ') {
-                       if (yych <= '\f') {
-                               if (yych <= 0x08) goto yy66;
-                               if (yych <= '\n') goto yy114;
-                               goto yy66;
-                       } else {
-                               if (yych <= '\r') goto yy114;
-                               if (yych <= 0x1F) goto yy66;
-                               goto yy114;
-                       }
-               } else {
-                       if (yych <= '.') {
-                               if (yych <= ',') goto yy66;
-                               if (yych <= '-') goto yy120;
-                               goto yy121;
-                       } else {
-                               if (yych <= '/') goto yy66;
-                               if (yych <= '9') goto yy121;
-                               goto yy66;
-                       }
-               }
-yy116:
-               YYDEBUG(116, *YYCURSOR);
-               yyaccept = 0;
-               yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == '.') goto yy117;
-               if (yych <= '/') goto yy44;
-               if (yych >= ':') goto yy44;
-yy117:
-               YYDEBUG(117, *YYCURSOR);
-               yyaccept = 4;
-               YYMARKER = ++YYCURSOR;
-               YYFILL(3);
-               yych = *YYCURSOR;
-               YYDEBUG(118, *YYCURSOR);
-               if (yych <= ' ') {
-                       if (yych <= '\n') {
-                               if (yych <= 0x00) goto yy119;
-                               if (yych <= 0x08) goto yy43;
-                       } else {
-                               if (yych == '\r') goto yy119;
-                               if (yych <= 0x1F) goto yy43;
-                       }
-               } else {
-                       if (yych <= '.') {
-                               if (yych == '#') goto yy119;
-                               if (yych <= '-') goto yy43;
-                               goto yy117;
-                       } else {
-                               if (yych <= '/') goto yy43;
-                               if (yych <= '9') goto yy117;
-                               if (yych <= ':') goto yy65;
-                               goto yy43;
-                       }
-               }
-yy119:
-               YYDEBUG(119, *YYCURSOR);
-               yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 73 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
-               {
-       char *text = yytext + 2;
-       while (*++text < '0');
-       yylval->num = atoi(text);
-       return T_REQ_ID;
-}
-#line 1179 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy120:
-               YYDEBUG(120, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '.') goto yy121;
-               if (yych <= '/') goto yy66;
-               if (yych >= ':') goto yy66;
-yy121:
-               YYDEBUG(121, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
-               YYDEBUG(122, *YYCURSOR);
-               if (yych == '.') goto yy121;
-               if (yych <= '/') goto yy119;
-               if (yych <= '9') goto yy121;
-               goto yy119;
+#line 1023 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
        }
 /* *********************************** */
-yyc_PRE_RAW:
+yyc_RAW:
        {
                static const unsigned char yybm[] = {
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0, 160,  48,   0,   0, 160,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                       160,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,  64,   0, 
+                         0,  64,  64,  64,  64,  64,  64,  64, 
+                        64, 224, 128,  64,  64, 224,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                       224,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
+                        64,  64,  64,  64,  64,  64,  64,  64, 
                         64,  64,  64,  64,  64,  64,  64,  64, 
-                        64,  64,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
                };
-               YYDEBUG(123, *YYCURSOR);
-               YYFILL(2);
-               yych = *YYCURSOR;
-               if (yybm[0+yych] & 16) {
-                       goto yy127;
-               }
-               if (yych <= '\r') {
-                       if (yych <= 0x08) {
-                               if (yych <= 0x00) goto yy130;
-                               goto yy132;
-                       } else {
-                               if (yych <= '\t') goto yy125;
-                               if (yych <= '\f') goto yy132;
-                       }
-               } else {
-                       if (yych <= ' ') {
-                               if (yych <= 0x1F) goto yy132;
-                       } else {
-                               if (yych == '-') goto yy131;
-                               goto yy132;
-                       }
-               }
-yy125:
-               YYDEBUG(125, *YYCURSOR);
-               ++YYCURSOR;
-               if ((yych = *YYCURSOR) <= '\f') {
-                       if (yych <= 0x00) goto yy142;
-                       if (yych <= 0x08) goto yy126;
-                       if (yych <= '\n') goto yy142;
-               } else {
-                       if (yych <= '\r') goto yy142;
-                       if (yych == ' ') goto yy142;
-               }
-yy126:
-               YYDEBUG(126, *YYCURSOR);
-               yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 169 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
-               {
-       YYSETCONDITION(RAW);
-
-       YYCURSOR = LEX(text);
-       goto restart;
-}
-#line 1277 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy127:
-               YYDEBUG(127, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
-               YYDEBUG(128, *YYCURSOR);
-               if (yybm[0+yych] & 128) {
-                       goto yy141;
-               }
-               if (yych <= 0x00) goto yy140;
-               if (yych == '\n') goto yy127;
-yy129:
-               YYDEBUG(129, *YYCURSOR);
-               yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 69 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
-               {
-       return 0;
-}
-#line 1296 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy130:
-               YYDEBUG(130, *YYCURSOR);
-               yych = *++YYCURSOR;
-               goto yy126;
-yy131:
-               YYDEBUG(131, *YYCURSOR);
-               yyaccept = 0;
-               yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == 'r') goto yy133;
-               goto yy126;
-yy132:
-               YYDEBUG(132, *YYCURSOR);
-               yych = *++YYCURSOR;
-               goto yy126;
-yy133:
-               YYDEBUG(133, *YYCURSOR);
-               ++YYCURSOR;
+               YYDEBUG(110, *YYCURSOR);
                YYFILL(2);
                yych = *YYCURSOR;
-               YYDEBUG(134, *YYCURSOR);
                if (yybm[0+yych] & 32) {
-                       goto yy133;
-               }
-               if (yych <= '.') {
-                       if (yych <= ',') goto yy135;
-                       if (yych <= '-') goto yy136;
-                       goto yy137;
-               } else {
-                       if (yych <= '/') goto yy135;
-                       if (yych <= '9') goto yy137;
-               }
-yy135:
-               YYDEBUG(135, *YYCURSOR);
-               YYCURSOR = YYMARKER;
-               goto yy126;
-yy136:
-               YYDEBUG(136, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yybm[0+yych] & 64) {
-                       goto yy137;
+                       goto yy112;
                }
-               goto yy135;
-yy137:
-               YYDEBUG(137, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
-               YYDEBUG(138, *YYCURSOR);
-               if (yybm[0+yych] & 64) {
-                       goto yy137;
-               }
-               YYDEBUG(139, *YYCURSOR);
-               yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 73 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
-               {
-       char *text = yytext + 2;
-       while (*++text < '0');
-       yylval->num = atoi(text);
-       return T_REQ_ID;
-}
-#line 1357 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy140:
-               YYDEBUG(140, *YYCURSOR);
-               yych = *++YYCURSOR;
-               goto yy129;
-yy141:
-               YYDEBUG(141, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
-yy142:
-               YYDEBUG(142, *YYCURSOR);
-               if (yybm[0+yych] & 128) {
-                       goto yy141;
-               }
-               if (yych <= 0x00) goto yy140;
-               if (yych == '\n') goto yy127;
-               YYDEBUG(143, *YYCURSOR);
-               yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 147 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
-               {
-       /* ignore whitespace */
-
-       goto restart;
-}
-#line 1382 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-       }
-/* *********************************** */
-yyc_RAW:
-       {
-               static const unsigned char yybm[] = {
-                         0, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 160,  64, 128, 128, 160, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       160, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-               };
-               YYDEBUG(144, *YYCURSOR);
-               YYFILL(1);
-               yych = *YYCURSOR;
-               if (yybm[0+yych] & 32) {
-                       goto yy146;
-               }
-               if (yych <= 0x00) goto yy152;
-               if (yych == '\n') goto yy149;
-               goto yy153;
-yy146:
-               YYDEBUG(146, *YYCURSOR);
+               if (yych <= 0x00) goto yy117;
+               if (yych == '\n') goto yy115;
+               goto yy118;
+yy112:
+               YYDEBUG(112, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(147, *YYCURSOR);
+               YYDEBUG(113, *YYCURSOR);
                if (yybm[0+yych] & 32) {
-                       goto yy146;
+                       goto yy112;
                }
-               if (yych <= 0x00) goto yy152;
-               if (yych == '\n') goto yy149;
-               goto yy153;
-yy148:
-               YYDEBUG(148, *YYCURSOR);
+               if (yych <= 0x00) goto yy114;
+               if (yych == '\n') goto yy120;
+               goto yy118;
+yy114:
+               YYDEBUG(114, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 140 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 132 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        phpdbg_init_param(yylval, STR_PARAM);
        yylval->str = zend_strndup(yytext, yyleng);
        yylval->len = yyleng;
        return T_INPUT;
 }
-#line 1452 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy149:
-               YYDEBUG(149, *YYCURSOR);
+#line 1093 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
+yy115:
+               YYDEBUG(115, *YYCURSOR);
                ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
-               YYDEBUG(150, *YYCURSOR);
-               if (yybm[0+yych] & 64) {
-                       goto yy149;
-               }
-               if (yych <= '\f') {
-                       if (yych <= 0x00) goto yy152;
-                       if (yych == '\t') goto yy155;
-               } else {
-                       if (yych <= '\r') goto yy155;
-                       if (yych == ' ') goto yy155;
+               if (yybm[0+(yych = *YYCURSOR)] & 128) {
+                       goto yy120;
                }
-yy151:
-               YYDEBUG(151, *YYCURSOR);
+yy116:
+               YYDEBUG(116, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 69 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 68 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        return 0;
 }
-#line 1476 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy152:
-               YYDEBUG(152, *YYCURSOR);
+#line 1107 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
+yy117:
+               YYDEBUG(117, *YYCURSOR);
                yych = *++YYCURSOR;
-               goto yy151;
-yy153:
-               YYDEBUG(153, *YYCURSOR);
+               goto yy116;
+yy118:
+               YYDEBUG(118, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(154, *YYCURSOR);
-               if (yybm[0+yych] & 128) {
-                       goto yy153;
+               YYDEBUG(119, *YYCURSOR);
+               if (yybm[0+yych] & 64) {
+                       goto yy118;
                }
-               goto yy148;
-yy155:
-               YYDEBUG(155, *YYCURSOR);
+               goto yy114;
+yy120:
+               YYDEBUG(120, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(156, *YYCURSOR);
-               if (yybm[0+yych] & 64) {
-                       goto yy149;
-               }
-               if (yych <= '\f') {
-                       if (yych <= 0x00) goto yy152;
-                       if (yych == '\t') goto yy155;
-               } else {
-                       if (yych <= '\r') goto yy155;
-                       if (yych == ' ') goto yy155;
+               YYDEBUG(121, *YYCURSOR);
+               if (yybm[0+yych] & 128) {
+                       goto yy120;
                }
-               YYDEBUG(157, *YYCURSOR);
+               YYDEBUG(122, *YYCURSOR);
                yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 147 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 139 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
                {
        /* ignore whitespace */
 
        goto restart;
 }
-#line 1515 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 1139 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c"
        }
 }
-#line 183 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 168 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l"
 
 }
index 0c27fc22acedecbe499de7085919ed9491784b39..7b3ce38c4723b010557ec6634071975f9862793b 100644 (file)
@@ -21,9 +21,8 @@
 #define YYFILL(n)
 
 #define NORMAL 0
-#define PRE_RAW 1
-#define RAW 2
-#define INITIAL 3
+#define RAW 1
+#define INITIAL 2
 
 ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
 
@@ -66,17 +65,10 @@ INPUT       [^\n\000]+
 
 <!*> := yyleng = (size_t) YYCURSOR - (size_t) yytext;
 
-<*>{WS}?[\n\000] {
+<*>[\n\000] {
        return 0;
 }
 
-<PRE_RAW, NORMAL>[-][r]{WS}?{DIGITS} {
-       char *text = yytext + 2;
-       while (*++text < '0');
-       yylval->num = atoi(text);
-       return T_REQ_ID;
-}
-
 <NORMAL>{T_IF}{WS} {
        YYSETCONDITION(RAW);
        phpdbg_init_param(yylval, EMPTY_PARAM);
@@ -151,28 +143,21 @@ INPUT       [^\n\000]+
 }
 
 <INITIAL>{T_EVAL}{WS} {
-       YYSETCONDITION(PRE_RAW);
+       YYSETCONDITION(RAW);
        phpdbg_init_param(yylval, EMPTY_PARAM);
        return T_EVAL;
 }
 <INITIAL>{T_SHELL}{WS} {
-       YYSETCONDITION(PRE_RAW);
+       YYSETCONDITION(RAW);
        phpdbg_init_param(yylval, EMPTY_PARAM);
        return T_SHELL;
 }
 <INITIAL>({T_RUN}|{T_RUN_SHORT}){WS} {
-       YYSETCONDITION(PRE_RAW);
+       YYSETCONDITION(RAW);
        phpdbg_init_param(yylval, EMPTY_PARAM);
        return T_RUN;
 }
 
-<PRE_RAW>. {
-       YYSETCONDITION(RAW);
-
-       YYCURSOR = LEX(text);
-       goto restart;
-}
-
 <INITIAL>. {
        YYSETCONDITION(NORMAL);
 
index 8ab4c8922a8463474232b8ee43e20683edb76f37..e8db4e605c73f62e0bc96e107f5ee5a4337f47ec 100644 (file)
 
 ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
 
-#define PHPDBG_LIST_COMMAND_D(f, h, a, m, l, s, flags) \
-       PHPDBG_COMMAND_D_EXP(f, h, a, m, l, s, &phpdbg_prompt_commands[13], flags)
+#define PHPDBG_LIST_COMMAND_D(f, h, a, m, l, s) \
+       PHPDBG_COMMAND_D_EXP(f, h, a, m, l, s, &phpdbg_prompt_commands[13])
 
 const phpdbg_command_t phpdbg_list_commands[] = {
-       PHPDBG_LIST_COMMAND_D(lines,     "lists the specified lines",    'l', list_lines,  NULL, "l", PHPDBG_ASYNC_SAFE),
-       PHPDBG_LIST_COMMAND_D(class,     "lists the specified class",    'c', list_class,  NULL, "s", PHPDBG_ASYNC_SAFE),
-       PHPDBG_LIST_COMMAND_D(method,    "lists the specified method",   'm', list_method, NULL, "m", PHPDBG_ASYNC_SAFE),
-       PHPDBG_LIST_COMMAND_D(func,      "lists the specified function", 'f', list_func,   NULL, "s", PHPDBG_ASYNC_SAFE),
+       PHPDBG_LIST_COMMAND_D(lines,     "lists the specified lines",    'l', list_lines,  NULL, "l"),
+       PHPDBG_LIST_COMMAND_D(class,     "lists the specified class",    'c', list_class,  NULL, "s"),
+       PHPDBG_LIST_COMMAND_D(method,    "lists the specified method",   'm', list_method, NULL, "m"),
+       PHPDBG_LIST_COMMAND_D(func,      "lists the specified function", 'f', list_func,   NULL, "s"),
        PHPDBG_END_COMMAND
 };
 
 PHPDBG_LIST(lines) /* {{{ */
 {
        if (!PHPDBG_G(exec) && !zend_is_executing(TSRMLS_C)) {
-               phpdbg_error("inactive", "type=\"execution\"", "Not executing, and execution context not set");
+               phpdbg_error("Not executing, and execution context not set");
                return SUCCESS;
        }
 
@@ -59,7 +59,7 @@ PHPDBG_LIST(lines) /* {{{ */
                                (param->num < 0 ? param->num : 0) + zend_get_executed_lineno(TSRMLS_C),
                                0 TSRMLS_CC);
                        break;
-
+                       
                case FILE_PARAM:
                        phpdbg_list_file(param->file.name, param->file.line, 0, 0 TSRMLS_CC);
                        break;
@@ -81,19 +81,19 @@ PHPDBG_LIST(method) /* {{{ */
 {
        zend_class_entry **ce;
 
-       if (phpdbg_safe_class_lookup(param->method.class, strlen(param->method.class), &ce TSRMLS_CC) == SUCCESS) {
+       if (zend_lookup_class(param->method.class, strlen(param->method.class), &ce TSRMLS_CC) == SUCCESS) {
                zend_function *function;
                char *lcname = zend_str_tolower_dup(param->method.name, strlen(param->method.name));
 
                if (zend_hash_find(&(*ce)->function_table, lcname, strlen(lcname)+1, (void**) &function) == SUCCESS) {
                        phpdbg_list_function(function TSRMLS_CC);
                } else {
-                       phpdbg_error("list", "type=\"notfound\" method=\"%s::%s\"", "Could not find %s::%s", param->method.class, param->method.name);
+                       phpdbg_error("Could not find %s::%s", param->method.class, param->method.name);
                }
 
                efree(lcname);
        } else {
-               phpdbg_error("list", "type=\"notfound\" class=\"%s\"", "Could not find the class %s", param->method.class);
+               phpdbg_error("Could not find the class %s", param->method.class);
        }
 
        return SUCCESS;
@@ -103,7 +103,7 @@ PHPDBG_LIST(class) /* {{{ */
 {
        zend_class_entry **ce;
 
-       if (phpdbg_safe_class_lookup(param->str, param->len, &ce TSRMLS_CC) == SUCCESS) {
+       if (zend_lookup_class(param->str, param->len, &ce TSRMLS_CC) == SUCCESS) {
                if ((*ce)->type == ZEND_USER_CLASS) {
                        if ((*ce)->info.user.filename) {
                                phpdbg_list_file(
@@ -112,67 +112,71 @@ PHPDBG_LIST(class) /* {{{ */
                                        (*ce)->info.user.line_start, 0 TSRMLS_CC
                                );
                        } else {
-                               phpdbg_error("list", "type=\"nosource\" class=\"%s\"", "The source of the requested class (%s) cannot be found", (*ce)->name);
+                               phpdbg_error("The source of the requested class (%s) cannot be found", (*ce)->name);
                        }
                } else {
-                       phpdbg_error("list", "type=\"internalclass\" class=\"%s\"", "The class requested (%s) is not user defined", (*ce)->name);
+                       phpdbg_error("The class requested (%s) is not user defined", (*ce)->name);
                }
        } else {
-               phpdbg_error("list", "type=\"notfound\" class=\"%s\"", "The requested class (%s) could not be found", param->str);
+               phpdbg_error("The requested class (%s) could not be found", param->str);
        }
 
        return SUCCESS;
 } /* }}} */
 
-void phpdbg_list_file(const char *filename, uint count, int offset, uint highlight TSRMLS_DC) /* {{{ */
+void phpdbg_list_file(const char *filename, long count, long offset, int highlight TSRMLS_DC) /* {{{ */
 {
-       uint line, lastline;
-       phpdbg_file_source **data;
-       char resolved_path_buf[MAXPATHLEN];
-
-       if (VCWD_REALPATH(filename, resolved_path_buf)) {
-               filename = resolved_path_buf;
+       struct stat st;
+       char *opened = NULL;
+       char buffer[8096] = {0,};
+       long line = 0;
+
+       php_stream *stream = NULL;
+       
+       if (VCWD_STAT(filename, &st) == FAILURE) {
+               phpdbg_error("Failed to stat file %s", filename);
+               return;
        }
 
-       if (zend_hash_find(&PHPDBG_G(file_sources), filename, strlen(filename), (void **) &data) == FAILURE) {
-               phpdbg_error("list", "type=\"unknownfile\"", "Could not find information about included file...");
+       stream = php_stream_open_wrapper(filename, "rb", USE_PATH, &opened);
+       
+       if (!stream) {
+               phpdbg_error("Failed to open file %s to list", filename);
                return;
        }
-
+       
        if (offset < 0) {
                count += offset;
                offset = 0;
        }
+       
+       while (php_stream_gets(stream, buffer, sizeof(buffer)) != NULL) {
+               long linelen = strlen(buffer);
 
-       lastline = offset + count;
-
-       if (lastline > (*data)->lines) {
-               lastline = (*data)->lines;
-       }
-
-       phpdbg_xml("<list %r file=\"%s\">", filename);
-
-       for (line = offset; line < lastline;) {
-               uint linestart = (*data)->line[line++];
-               uint linelen = (*data)->line[line] - linestart;
-               char *buffer = (*data)->buf + linestart;
-
-               if (!highlight) {
-                       phpdbg_write("line", "line=\"%u\" code=\"%.*s\"", " %05u: %.*s", line, linelen, buffer);
-               } else {
-                       if (highlight != line) {
-                               phpdbg_write("line", "line=\"%u\" code=\"%.*s\"", " %05u: %.*s", line, linelen, buffer);
+               ++line;
+               
+               if (offset <= line) {
+                       if (!highlight) {
+                               phpdbg_write("%05ld: %s", line, buffer);
                        } else {
-                               phpdbg_write("line", "line=\"%u\" code=\"%.*s\" current=\"current\"", ">%05u: %.*s", line, linelen, buffer);
+                               if (highlight != line) {
+                                       phpdbg_write(" %05ld: %s", line, buffer);
+                               } else {
+                                       phpdbg_write(">%05ld: %s", line, buffer);
+                               }
+                       }
+
+                       if (buffer[linelen - 1] != '\n') {
+                               phpdbg_write("\n");
                        }
                }
 
-               if (*(buffer + linelen - 1) != '\n' || !linelen) {
-                       phpdbg_out("\n");
+               if (count > 0 && count + offset - 1 < line) {
+                       break;
                }
        }
-
-       phpdbg_xml("</list>");
+       
+       php_stream_close(stream);
 } /* }}} */
 
 void phpdbg_list_function(const zend_function *fbc TSRMLS_DC) /* {{{ */
@@ -180,13 +184,14 @@ void phpdbg_list_function(const zend_function *fbc TSRMLS_DC) /* {{{ */
        const zend_op_array *ops;
 
        if (fbc->type != ZEND_USER_FUNCTION) {
-               phpdbg_error("list", "type=\"internalfunction\" function=\"%s\"", "The function requested (%s) is not user defined", fbc->common.function_name);
+               phpdbg_error("The function requested (%s) is not user defined", fbc->common.function_name);
                return;
        }
 
-       ops = (zend_op_array *)fbc;
+       ops = (zend_op_array*)fbc;
 
-       phpdbg_list_file(ops->filename, ops->line_end - ops->line_start + 1, ops->line_start, 0 TSRMLS_CC);
+       phpdbg_list_file(ops->filename,
+               ops->line_end - ops->line_start + 1, ops->line_start, 0 TSRMLS_CC);
 } /* }}} */
 
 void phpdbg_list_function_byname(const char *str, size_t len TSRMLS_DC) /* {{{ */
@@ -204,11 +209,11 @@ void phpdbg_list_function_byname(const char *str, size_t len TSRMLS_DC) /* {{{ *
 
                        func_table = &EG(scope)->function_table;
                } else {
-                       phpdbg_error("inactive", "type=\"noclasses\"", "No active class");
+                       phpdbg_error("No active class");
                        return;
                }
        } else if (!EG(function_table)) {
-               phpdbg_error("inactive", "type=\"function_table\"", "No function table loaded");
+               phpdbg_error("No function table loaded");
                return;
        } else {
                func_table = EG(function_table);
@@ -217,92 +222,12 @@ void phpdbg_list_function_byname(const char *str, size_t len TSRMLS_DC) /* {{{ *
        /* use lowercase names, case insensitive */
        func_name = zend_str_tolower_dup(func_name, func_name_len);
 
-       phpdbg_try_access {
-               if (zend_hash_find(func_table, func_name, func_name_len+1, (void**)&fbc) == SUCCESS) {
-                       phpdbg_list_function(fbc TSRMLS_CC);
-               } else {
-                       phpdbg_error("list", "type=\"nofunction\" function=\"%s\"", "Function %s not found", func_name);
-               }
-       } phpdbg_catch_access {
-               phpdbg_error("signalsegv", "function=\"%s\"", "Could not list function %s, invalid data source", func_name);
-       } phpdbg_end_try_access();
+       if (zend_hash_find(func_table, func_name, func_name_len+1, (void**)&fbc) == SUCCESS) {
+               phpdbg_list_function(fbc TSRMLS_CC);
+       } else {
+               phpdbg_error("Function %s not found", func_name);
+       }
 
        efree(func_name);
 } /* }}} */
 
-zend_op_array *phpdbg_compile_file(zend_file_handle *file, int type TSRMLS_DC) {
-       phpdbg_file_source data, *dataptr;
-       zend_file_handle fake = {0};
-       zend_op_array *ret;
-       char *filename = (char *)(file->opened_path ? file->opened_path : file->filename);
-       uint line;
-       char *bufptr, *endptr;
-       char resolved_path_buf[MAXPATHLEN];
-
-       zend_stream_fixup(file, &data.buf, &data.len TSRMLS_CC);
-
-       data.filename = filename;
-       data.line[0] = 0;
-
-       if (file->handle.stream.mmap.old_closer) {
-               /* do not unmap */
-               file->handle.stream.closer = file->handle.stream.mmap.old_closer;
-       }
-
-#if HAVE_MMAP
-       if (file->handle.stream.mmap.map) {
-               data.map = file->handle.stream.mmap.map;
-       }
-#endif
-
-       fake.type = ZEND_HANDLE_MAPPED;
-       fake.handle.stream.mmap.buf = data.buf;
-       fake.handle.stream.mmap.len = data.len;
-       fake.free_filename = 0;
-       fake.opened_path = file->opened_path;
-       fake.filename = filename;
-       fake.opened_path = file->opened_path;
-
-       *(dataptr = emalloc(sizeof(phpdbg_file_source) + sizeof(uint) * data.len)) = data;
-       if (VCWD_REALPATH(filename, resolved_path_buf)) {
-               filename = resolved_path_buf;
-       }
-       zend_hash_add(&PHPDBG_G(file_sources), filename, strlen(filename), &dataptr, sizeof(phpdbg_file_source *), NULL);
-
-       for (line = 0, bufptr = data.buf - 1, endptr = data.buf + data.len; ++bufptr < endptr;) {
-               if (*bufptr == '\n') {
-                       dataptr->line[++line] = (uint)(bufptr - data.buf) + 1;
-               }
-       }
-       dataptr->lines = ++line;
-       dataptr->line[line] = endptr - data.buf;
-       dataptr = erealloc(dataptr, sizeof(phpdbg_file_source) + sizeof(uint) * line);
-
-       phpdbg_resolve_pending_file_break(filename TSRMLS_CC);
-
-       ret = PHPDBG_G(compile_file)(&fake, type TSRMLS_CC);
-
-       fake.opened_path = NULL;
-       zend_file_handle_dtor(&fake TSRMLS_CC);
-
-       return ret;
-}
-
-void phpdbg_free_file_source(phpdbg_file_source *data) {
-#if HAVE_MMAP
-       if (data->map) {
-               munmap(data->map, data->len + ZEND_MMAP_AHEAD);
-       } else
-#endif
-       if (data->buf) {
-               efree(data->buf);
-       }
-
-       efree(data);
-}
-
-void phpdbg_init_list(TSRMLS_D) {
-       PHPDBG_G(compile_file) = zend_compile_file;
-       zend_hash_init(&PHPDBG_G(file_sources), 1, NULL, (dtor_func_t) phpdbg_free_file_source, 0);
-       zend_compile_file = phpdbg_compile_file;
-}
index c88328bfeaf7335d623607314d418d228d4e523f..14905f65673b7123fa9ef1d2c33710ec127d0976 100644 (file)
@@ -34,21 +34,8 @@ PHPDBG_LIST(func);
 
 void phpdbg_list_function_byname(const char *, size_t TSRMLS_DC);
 void phpdbg_list_function(const zend_function* TSRMLS_DC);
-void phpdbg_list_file(const char*, uint, int, uint TSRMLS_DC);
+void phpdbg_list_file(const char*, long, long, int TSRMLS_DC);
 
 extern const phpdbg_command_t phpdbg_list_commands[];
 
-void phpdbg_init_list(TSRMLS_D);
-
-typedef struct {
-       char *filename;
-       char *buf;
-       size_t len;
-#if HAVE_MMAP
-       void *map;
-#endif
-       uint lines;
-       uint line[1];
-} phpdbg_file_source;
-
 #endif /* PHPDBG_LIST_H */
index 331718accc2405d6297e9ef905fe19bd282ba66e..6b13625fc1417a4e0d8639c6edcdccb736d709ed 100644 (file)
@@ -92,7 +92,8 @@ char *phpdbg_decode_opline(zend_op_array *ops, zend_op *op, HashTable *vars TSRM
 
        case ZEND_JMPZNZ:
                        decode[1] = phpdbg_decode_op(ops, &op->op1, op->op1_type, vars TSRMLS_CC);
-                       asprintf(&decode[2], "J%u or J%lu", op->op2.opline_num, op->extended_value);
+                       asprintf(
+                               &decode[2], "J%u or J%lu", op->op2.opline_num, op->extended_value);
                goto result;
 
        case ZEND_JMPZ:
@@ -102,9 +103,13 @@ char *phpdbg_decode_opline(zend_op_array *ops, zend_op *op, HashTable *vars TSRM
 
 #ifdef ZEND_JMP_SET
        case ZEND_JMP_SET:
+#endif
+#ifdef ZEND_JMP_SET_VAR
+       case ZEND_JMP_SET_VAR:
 #endif
                decode[1] = phpdbg_decode_op(ops, &op->op1, op->op1_type, vars TSRMLS_CC);
-               asprintf(&decode[2], "J%ld", op->op2.jmp_addr - ops->opcodes);
+               asprintf(
+                       &decode[2], "J%ld", op->op2.jmp_addr - ops->opcodes);
        goto result;
 
        case ZEND_RECV_INIT:
@@ -116,7 +121,8 @@ char *phpdbg_decode_opline(zend_op_array *ops, zend_op *op, HashTable *vars TSRM
 result:
                        decode[3] = phpdbg_decode_op(ops, &op->result, op->result_type, vars TSRMLS_CC);
 format:
-                       asprintf(&decode[0],
+                       asprintf(
+                               &decode[0],
                                "%-20s %-20s %-20s",
                                decode[1] ? decode[1] : "",
                                decode[2] ? decode[2] : "",
@@ -147,7 +153,7 @@ void phpdbg_print_opline_ex(zend_execute_data *execute_data, HashTable *vars, ze
 
                if (ignore_flags || (!(PHPDBG_G(flags) & PHPDBG_IS_QUIET) || (PHPDBG_G(flags) & PHPDBG_IS_STEPPING))) {
                        /* output line info */
-                       phpdbg_notice("opline", "line=\"%u\" opline=\"%p\" opcode=\"%s\" op=\"%s\" file=\"%s\"", "L%-5u %16p %-30s %s %s",
+                       phpdbg_notice("L%-5u %16p %-30s %s %s",
                           opline->lineno,
                           opline,
                           phpdbg_decode_opcode(opline->opcode),
@@ -156,7 +162,7 @@ void phpdbg_print_opline_ex(zend_execute_data *execute_data, HashTable *vars, ze
                }
 
                if (!ignore_flags && PHPDBG_G(oplog)) {
-                       phpdbg_log_ex(fileno(PHPDBG_G(oplog)), "L%-5u %16p %-30s %s %s",
+                       phpdbg_log_ex(PHPDBG_G(oplog), "L%-5u %16p %-30s %s %s",
                                opline->lineno,
                                opline,
                                phpdbg_decode_opcode(opline->opcode),
@@ -327,6 +333,12 @@ const char *phpdbg_decode_opcode(zend_uchar opcode) /* {{{ */
 #ifdef ZEND_SEPARATE
                CASE(ZEND_SEPARATE);
 #endif
+#ifdef ZEND_QM_ASSIGN_VAR
+               CASE(ZEND_QM_ASSIGN_VAR);
+#endif
+#ifdef ZEND_JMP_SET_VAR
+               CASE(ZEND_JMP_SET_VAR);
+#endif
 #ifdef ZEND_DISCARD_EXCEPTION
                CASE(ZEND_DISCARD_EXCEPTION);
 #endif
diff --git a/sapi/phpdbg/phpdbg_out.c b/sapi/phpdbg/phpdbg_out.c
deleted file mode 100644 (file)
index 7e1dc7b..0000000
+++ /dev/null
@@ -1,1323 +0,0 @@
-/*
-   +----------------------------------------------------------------------+
-   | PHP Version 5                                                        |
-   +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2014 The PHP Group                                |
-   +----------------------------------------------------------------------+
-   | This source file is subject to version 3.01 of the PHP license,      |
-   | that is bundled with this package in the file LICENSE, and is        |
-   | available through the world-wide-web at the following url:           |
-   | http://www.php.net/license/3_01.txt                                  |
-   | If you did not receive a copy of the PHP license and are unable to   |
-   | obtain it through the world-wide-web, please send a note to          |
-   | license@php.net so we can mail you a copy immediately.               |
-   +----------------------------------------------------------------------+
-   | Authors: Felipe Pena <felipe@php.net>                                |
-   | Authors: Joe Watkins <joe.watkins@live.co.uk>                        |
-   | Authors: Bob Weinand <bwoebi@php.net>                                |
-   +----------------------------------------------------------------------+
-*/
-
-#include "zend.h"
-#include "php.h"
-#include "spprintf.h"
-#include "phpdbg.h"
-#include "phpdbg_io.h"
-#include "phpdbg_eol.h"
-#include "ext/standard/html.h"
-
-#ifdef _WIN32
-#      include "win32/time.h"
-#endif
-
-ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
-
-/* copied from php-src/main/snprintf.c and slightly modified */
-/*
- * NUM_BUF_SIZE is the size of the buffer used for arithmetic conversions
- *
- * XXX: this is a magic number; do not decrease it
- * Emax = 1023
- * NDIG = 320
- * NUM_BUF_SIZE >= strlen("-") + Emax + strlrn(".") + NDIG + strlen("E+1023") + 1;
- */
-#define NUM_BUF_SIZE        2048
-
-/*
- * Descriptor for buffer area
- */
-struct buf_area {
-       char *buf_end;
-       char *nextb; /* pointer to next byte to read/write   */
-};
-
-typedef struct buf_area buffy;
-
-/*
- * The INS_CHAR macro inserts a character in the buffer and writes
- * the buffer back to disk if necessary
- * It uses the char pointers sp and bep:
- *      sp points to the next available character in the buffer
- *      bep points to the end-of-buffer+1
- * While using this macro, note that the nextb pointer is NOT updated.
- *
- * NOTE: Evaluation of the c argument should not have any side-effects
- */
-#define INS_CHAR(c, sp, bep, cc) \
-       {                            \
-               if (sp < bep)            \
-               {                        \
-                       *sp++ = c;           \
-               }                        \
-               cc++;                    \
-       }
-
-#define NUM( c )                       ( c - '0' )
-
-#define STR_TO_DEC( str, num )         \
-    num = NUM( *str++ ) ;              \
-    while ( isdigit((int)*str ) )              \
-    {                                  \
-       num *= 10 ;                     \
-       num += NUM( *str++ ) ;          \
-    }
-
-/*
- * This macro does zero padding so that the precision
- * requirement is satisfied. The padding is done by
- * adding '0's to the left of the string that is going
- * to be printed.
- */
-#define FIX_PRECISION( adjust, precision, s, s_len )   \
-    if ( adjust )                                      \
-       while ( s_len < precision )                     \
-       {                                               \
-           *--s = '0' ;                                \
-           s_len++ ;                                   \
-       }
-
-/*
- * Macro that does padding. The padding is done by printing
- * the character ch.
- */
-#define PAD( width, len, ch )  do              \
-       {                                       \
-           INS_CHAR( ch, sp, bep, cc ) ;       \
-           width-- ;                           \
-       }                                       \
-       while ( width > len )
-
-/*
- * Prefix the character ch to the string str
- * Increase length
- * Set the has_prefix flag
- */
-#define PREFIX( str, length, ch )       *--str = ch ; length++ ; has_prefix = YES
-
-
-#ifdef HAVE_LOCALE_H
-#include <locale.h>
-#define LCONV_DECIMAL_POINT (*lconv->decimal_point)
-#else
-#define LCONV_DECIMAL_POINT '.'
-#endif
-#define NUL '\0'
-#define S_NULL "(null)"
-#define S_NULL_LEN 6
-#define FLOAT_DIGITS 6
-
-/*
- * Do format conversion placing the output in buffer
- */
-static int format_converter(register buffy *odp, const char *fmt, zend_bool escape_xml, va_list ap TSRMLS_DC) {
-       char *sp;
-       char *bep;
-       int cc = 0;
-       int i;
-
-       char *s = NULL, *free_s = NULL;
-       int s_len, free_zcopy;
-       zval *zvp, zcopy;
-
-       int min_width = 0;
-       int precision = 0;
-       enum {
-               LEFT, RIGHT
-       } adjust;
-       char pad_char;
-       char prefix_char;
-
-       double fp_num;
-       wide_int i_num = (wide_int) 0;
-       u_wide_int ui_num;
-
-       char num_buf[NUM_BUF_SIZE];
-       char char_buf[2];                       /* for printing %% and %<unknown> */
-
-#ifdef HAVE_LOCALE_H
-       struct lconv *lconv = NULL;
-#endif
-
-       /*
-        * Flag variables
-        */
-       length_modifier_e modifier;
-       boolean_e alternate_form;
-       boolean_e print_sign;
-       boolean_e print_blank;
-       boolean_e adjust_precision;
-       boolean_e adjust_width;
-       bool_int is_negative;
-
-       sp = odp->nextb;
-       bep = odp->buf_end;
-
-       while (*fmt) {
-               if (*fmt != '%') {
-                       INS_CHAR(*fmt, sp, bep, cc);
-               } else {
-                       /*
-                        * Default variable settings
-                        */
-                       adjust = RIGHT;
-                       alternate_form = print_sign = print_blank = NO;
-                       pad_char = ' ';
-                       prefix_char = NUL;
-                       free_zcopy = 0;
-
-                       fmt++;
-
-                       /*
-                        * Try to avoid checking for flags, width or precision
-                        */
-                       if (isascii((int)*fmt) && !islower((int)*fmt)) {
-                               /*
-                                * Recognize flags: -, #, BLANK, +
-                                */
-                               for (;; fmt++) {
-                                       if (*fmt == '-')
-                                               adjust = LEFT;
-                                       else if (*fmt == '+')
-                                               print_sign = YES;
-                                       else if (*fmt == '#')
-                                               alternate_form = YES;
-                                       else if (*fmt == ' ')
-                                               print_blank = YES;
-                                       else if (*fmt == '0')
-                                               pad_char = '0';
-                                       else
-                                               break;
-                               }
-
-                               /*
-                                * Check if a width was specified
-                                */
-                               if (isdigit((int)*fmt)) {
-                                       STR_TO_DEC(fmt, min_width);
-                                       adjust_width = YES;
-                               } else if (*fmt == '*') {
-                                       min_width = va_arg(ap, int);
-                                       fmt++;
-                                       adjust_width = YES;
-                                       if (min_width < 0) {
-                                               adjust = LEFT;
-                                               min_width = -min_width;
-                                       }
-                               } else
-                                       adjust_width = NO;
-
-                               /*
-                                * Check if a precision was specified
-                                */
-                               if (*fmt == '.') {
-                                       adjust_precision = YES;
-                                       fmt++;
-                                       if (isdigit((int)*fmt)) {
-                                               STR_TO_DEC(fmt, precision);
-                                       } else if (*fmt == '*') {
-                                               precision = va_arg(ap, int);
-                                               fmt++;
-                                               if (precision < 0)
-                                                       precision = 0;
-                                       } else
-                                               precision = 0;
-
-                                       if (precision > FORMAT_CONV_MAX_PRECISION && *fmt != 's' && *fmt != 'v' && *fmt != 'b') {
-                                               precision = FORMAT_CONV_MAX_PRECISION;
-                                       }
-                               } else
-                                       adjust_precision = NO;
-                       } else
-                               adjust_precision = adjust_width = NO;
-
-                       /*
-                        * Modifier check
-                        */
-                       switch (*fmt) {
-                               case 'L':
-                                       fmt++;
-                                       modifier = LM_LONG_DOUBLE;
-                                       break;
-                               case 'I':
-                                       fmt++;
-#if SIZEOF_LONG_LONG
-                                       if (*fmt == '6' && *(fmt+1) == '4') {
-                                               fmt += 2;
-                                               modifier = LM_LONG_LONG;
-                                       } else
-#endif
-                                               if (*fmt == '3' && *(fmt+1) == '2') {
-                                                       fmt += 2;
-                                                       modifier = LM_LONG;
-                                               } else {
-#ifdef _WIN64
-                                                       modifier = LM_LONG_LONG;
-#else
-                                                       modifier = LM_LONG;
-#endif
-                                               }
-                                       break;
-                               case 'l':
-                                       fmt++;
-#if SIZEOF_LONG_LONG
-                                       if (*fmt == 'l') {
-                                               fmt++;
-                                               modifier = LM_LONG_LONG;
-                                       } else
-#endif
-                                               modifier = LM_LONG;
-                                       break;
-                                       case 'z':
-                                       fmt++;
-                                       modifier = LM_SIZE_T;
-                                       break;
-                               case 'j':
-                                       fmt++;
-#if SIZEOF_INTMAX_T
-                                       modifier = LM_INTMAX_T;
-#else
-                                       modifier = LM_SIZE_T;
-#endif
-                                       break;
-                               case 't':
-                                       fmt++;
-#if SIZEOF_PTRDIFF_T
-                                       modifier = LM_PTRDIFF_T;
-#else
-                                       modifier = LM_SIZE_T;
-#endif
-                                       break;
-                               case 'h':
-                                       fmt++;
-                                       if (*fmt == 'h') {
-                                               fmt++;
-                                       }
-                                       /* these are promoted to int, so no break */
-                               default:
-                                       modifier = LM_STD;
-                                       break;
-                       }
-
-                       /*
-                        * Argument extraction and printing.
-                        * First we determine the argument type.
-                        * Then, we convert the argument to a string.
-                        * On exit from the switch, s points to the string that
-                        * must be printed, s_len has the length of the string
-                        * The precision requirements, if any, are reflected in s_len.
-                        *
-                        * NOTE: pad_char may be set to '0' because of the 0 flag.
-                        *   It is reset to ' ' by non-numeric formats
-                        */
-                       switch (*fmt) {
-                               case 'Z':
-                                       zvp = (zval*) va_arg(ap, zval*);
-                                       zend_make_printable_zval(zvp, &zcopy, &free_zcopy);
-                                       if (free_zcopy) {
-                                               zvp = &zcopy;
-                                       }
-                                       s_len = Z_STRLEN_P(zvp);
-                                       s = Z_STRVAL_P(zvp);
-                                       if (adjust_precision && precision < s_len) {
-                                               s_len = precision;
-                                       }
-                                       break;
-                               case 'u':
-                                       switch(modifier) {
-                                               default:
-                                                       i_num = (wide_int) va_arg(ap, unsigned int);
-                                                       break;
-                                               case LM_LONG_DOUBLE:
-                                                       goto fmt_error;
-                                               case LM_LONG:
-                                                       i_num = (wide_int) va_arg(ap, unsigned long int);
-                                                       break;
-                                               case LM_SIZE_T:
-                                                       i_num = (wide_int) va_arg(ap, size_t);
-                                                       break;
-#if SIZEOF_LONG_LONG
-                                               case LM_LONG_LONG:
-                                                       i_num = (wide_int) va_arg(ap, u_wide_int);
-                                                       break;
-#endif
-#if SIZEOF_INTMAX_T
-                                               case LM_INTMAX_T:
-                                                       i_num = (wide_int) va_arg(ap, uintmax_t);
-                                                       break;
-#endif
-#if SIZEOF_PTRDIFF_T
-                                               case LM_PTRDIFF_T:
-                                                       i_num = (wide_int) va_arg(ap, ptrdiff_t);
-                                                       break;
-#endif
-                                       }
-                                       /*
-                                        * The rest also applies to other integer formats, so fall
-                                        * into that case.
-                                        */
-                               case 'd':
-                               case 'i':
-                                       /*
-                                        * Get the arg if we haven't already.
-                                        */
-                                       if ((*fmt) != 'u') {
-                                               switch(modifier) {
-                                                       default:
-                                                               i_num = (wide_int) va_arg(ap, int);
-                                                               break;
-                                                       case LM_LONG_DOUBLE:
-                                                               goto fmt_error;
-                                                       case LM_LONG:
-                                                               i_num = (wide_int) va_arg(ap, long int);
-                                                               break;
-                                                       case LM_SIZE_T:
-#if SIZEOF_SSIZE_T
-                                                               i_num = (wide_int) va_arg(ap, ssize_t);
-#else
-                                                               i_num = (wide_int) va_arg(ap, size_t);
-#endif
-                                                               break;
-#if SIZEOF_LONG_LONG
-                                                       case LM_LONG_LONG:
-                                                               i_num = (wide_int) va_arg(ap, wide_int);
-                                                               break;
-#endif
-#if SIZEOF_INTMAX_T
-                                                       case LM_INTMAX_T:
-                                                               i_num = (wide_int) va_arg(ap, intmax_t);
-                                                               break;
-#endif
-#if SIZEOF_PTRDIFF_T
-                                                       case LM_PTRDIFF_T:
-                                                               i_num = (wide_int) va_arg(ap, ptrdiff_t);
-                                                               break;
-#endif
-                                               }
-                                       }
-                                       s = ap_php_conv_10(i_num, (*fmt) == 'u', &is_negative,
-                                                               &num_buf[NUM_BUF_SIZE], &s_len);
-                                       FIX_PRECISION(adjust_precision, precision, s, s_len);
-
-                                       if (*fmt != 'u') {
-                                               if (is_negative) {
-                                                       prefix_char = '-';
-                                               } else if (print_sign) {
-                                                       prefix_char = '+';
-                                               } else if (print_blank) {
-                                                       prefix_char = ' ';
-                                               }
-                                       }
-                                       break;
-
-
-                               case 'o':
-                                       switch(modifier) {
-                                               default:
-                                                       ui_num = (u_wide_int) va_arg(ap, unsigned int);
-                                                       break;
-                                               case LM_LONG_DOUBLE:
-                                                       goto fmt_error;
-                                               case LM_LONG:
-                                                       ui_num = (u_wide_int) va_arg(ap, unsigned long int);
-                                                       break;
-                                               case LM_SIZE_T:
-                                                       ui_num = (u_wide_int) va_arg(ap, size_t);
-                                                       break;
-#if SIZEOF_LONG_LONG
-                                               case LM_LONG_LONG:
-                                                       ui_num = (u_wide_int) va_arg(ap, u_wide_int);
-                                                       break;
-#endif
-#if SIZEOF_INTMAX_T
-                                               case LM_INTMAX_T:
-                                                       ui_num = (u_wide_int) va_arg(ap, uintmax_t);
-                                                       break;
-#endif
-#if SIZEOF_PTRDIFF_T
-                                               case LM_PTRDIFF_T:
-                                                       ui_num = (u_wide_int) va_arg(ap, ptrdiff_t);
-                                                       break;
-#endif
-                                       }
-                                       s = ap_php_conv_p2(ui_num, 3, *fmt, &num_buf[NUM_BUF_SIZE], &s_len);
-                                       FIX_PRECISION(adjust_precision, precision, s, s_len);
-                                       if (alternate_form && *s != '0') {
-                                               *--s = '0';
-                                               s_len++;
-                                       }
-                                       break;
-
-
-                               case 'x':
-                               case 'X':
-                                       switch(modifier) {
-                                               default:
-                                                       ui_num = (u_wide_int) va_arg(ap, unsigned int);
-                                                       break;
-                                               case LM_LONG_DOUBLE:
-                                                       goto fmt_error;
-                                               case LM_LONG:
-                                                       ui_num = (u_wide_int) va_arg(ap, unsigned long int);
-                                                       break;
-                                               case LM_SIZE_T:
-                                                       ui_num = (u_wide_int) va_arg(ap, size_t);
-                                                       break;
-#if SIZEOF_LONG_LONG
-                                               case LM_LONG_LONG:
-                                                       ui_num = (u_wide_int) va_arg(ap, u_wide_int);
-                                                       break;
-#endif
-#if SIZEOF_INTMAX_T
-                                               case LM_INTMAX_T:
-                                                       ui_num = (u_wide_int) va_arg(ap, uintmax_t);
-                                                       break;
-#endif
-#if SIZEOF_PTRDIFF_T
-                                               case LM_PTRDIFF_T:
-                                                       ui_num = (u_wide_int) va_arg(ap, ptrdiff_t);
-                                                       break;
-#endif
-                                       }
-                                       s = ap_php_conv_p2(ui_num, 4, *fmt, &num_buf[NUM_BUF_SIZE], &s_len);
-                                       FIX_PRECISION(adjust_precision, precision, s, s_len);
-                                       if (alternate_form && i_num != 0) {
-                                               *--s = *fmt;    /* 'x' or 'X' */
-                                               *--s = '0';
-                                               s_len += 2;
-                                       }
-                                       break;
-
-
-                               case 's':
-                               case 'v':
-                                       s = va_arg(ap, char *);
-                                       if (s != NULL) {
-                                               if (adjust_precision) {
-                                                       s_len = precision;
-                                               } else {
-                                                       s_len = strlen(s);
-                                               }
-
-                                               if (escape_xml) {
-                                                       /* added: support for xml escaping */
-
-                                                       int old_slen = s_len, i = 0;
-                                                       char *old_s = s, *s_ptr;
-                                                       free_s = s_ptr = s = emalloc(old_slen * 6 + 1);
-                                                       do {
-                                                               if (old_s[i] == '&' || old_s[i] == '"' || old_s[i] == '<') {
-                                                                       *s_ptr++ = '&';
-                                                                       switch (old_s[i]) {
-                                                                               case '"':
-                                                                                       s_len += 5;
-                                                                                       *s_ptr++ = 'q';
-                                                                                       *s_ptr++ = 'u';
-                                                                                       *s_ptr++ = 'o';
-                                                                                       *s_ptr++ = 't';
-                                                                                       break;
-                                                                               case '<':
-                                                                                       s_len += 3;
-                                                                                       *s_ptr++ = 'l';
-                                                                                       *s_ptr++ = 't';
-                                                                                       break;
-                                                                               case '&':
-                                                                                       s_len += 4;
-                                                                                       *s_ptr++ = 'a';
-                                                                                       *s_ptr++ = 'm';
-                                                                                       *s_ptr++ = 'p';
-                                                                                       break;
-                                                                       }
-                                                                       *s_ptr++ = ';';
-                                                               } else {
-                                                                       *s_ptr++ = old_s[i];
-                                                               }
-                                                       } while (i++ < old_slen);
-                                               }
-                                       } else {
-                                               s = S_NULL;
-                                               s_len = S_NULL_LEN;
-                                       }
-                                       pad_char = ' ';
-                                       break;
-
-
-                               case 'b':
-                                       if (escape_xml) {
-                                               s = PHPDBG_G(err_buf).xml;
-                                       } else {
-                                               s = PHPDBG_G(err_buf).msg;
-                                       }
-
-                                       if (s != NULL) {
-                                               if (escape_xml) {
-                                                       s_len = PHPDBG_G(err_buf).xmllen;
-                                               } else {
-                                                       s_len = PHPDBG_G(err_buf).msglen;
-                                               }
-
-                                               if (adjust_precision && precision != s_len) {
-                                                       s_len = precision;
-                                               }
-                                       } else {
-                                               s = "";
-                                               s_len = 0;
-                                       }
-                                       pad_char = ' ';
-                                       break;
-
-
-                               case 'r':
-                                       if (PHPDBG_G(req_id)) {
-                                               s_len = spprintf(&s, 0, "req=\"%lu\"", PHPDBG_G(req_id));
-                                               free_s = s;
-                                       } else {
-                                               s = "";
-                                               s_len = 0;
-                                       }
-                                       break;
-
-
-                               case 'f':
-                               case 'F':
-                               case 'e':
-                               case 'E':
-
-                                       switch(modifier) {
-                                               case LM_LONG_DOUBLE:
-                                                       fp_num = (double) va_arg(ap, long double);
-                                                       break;
-                                               case LM_STD:
-                                                       fp_num = va_arg(ap, double);
-                                                       break;
-                                               default:
-                                                       goto fmt_error;
-                                       }
-
-                                       if (zend_isnan(fp_num)) {
-                                               s = "NAN";
-                                               s_len = 3;
-                                       } else if (zend_isinf(fp_num)) {
-                                               s = "INF";
-                                               s_len = 3;
-                                       } else {
-#ifdef HAVE_LOCALE_H
-                                               if (!lconv) {
-                                                       lconv = localeconv();
-                                               }
-#endif
-                                               s = php_conv_fp((*fmt == 'f')?'F':*fmt, fp_num, alternate_form,
-                                                (adjust_precision == NO) ? FLOAT_DIGITS : precision,
-                                                (*fmt == 'f')?LCONV_DECIMAL_POINT:'.',
-                                                                       &is_negative, &num_buf[1], &s_len);
-                                               if (is_negative)
-                                                       prefix_char = '-';
-                                               else if (print_sign)
-                                                       prefix_char = '+';
-                                               else if (print_blank)
-                                                       prefix_char = ' ';
-                                       }
-                                       break;
-
-
-                               case 'g':
-                               case 'k':
-                               case 'G':
-                               case 'H':
-                                       switch(modifier) {
-                                               case LM_LONG_DOUBLE:
-                                                       fp_num = (double) va_arg(ap, long double);
-                                                       break;
-                                               case LM_STD:
-                                                       fp_num = va_arg(ap, double);
-                                                       break;
-                                               default:
-                                                       goto fmt_error;
-                                       }
-
-                                       if (zend_isnan(fp_num)) {
-                                               s = "NAN";
-                                               s_len = 3;
-                                               break;
-                                       } else if (zend_isinf(fp_num)) {
-                                               if (fp_num > 0) {
-                                                       s = "INF";
-                                                       s_len = 3;
-                                               } else {
-                                                       s = "-INF";
-                                                       s_len = 4;
-                                               }
-                                               break;
-                                       }
-
-                                       if (adjust_precision == NO) {
-                                               precision = FLOAT_DIGITS;
-                                       } else if (precision == 0) {
-                                               precision = 1;
-                                       }
-                                       /*
-                                        * * We use &num_buf[ 1 ], so that we have room for the sign
-                                        */
-#ifdef HAVE_LOCALE_H
-                                       if (!lconv) {
-                                               lconv = localeconv();
-                                       }
-#endif
-                                       s = php_gcvt(fp_num, precision, (*fmt=='H' || *fmt == 'k') ? '.' : LCONV_DECIMAL_POINT, (*fmt == 'G' || *fmt == 'H')?'E':'e', &num_buf[1]);
-                                       if (*s == '-') {
-                                               prefix_char = *s++;
-                                       } else if (print_sign) {
-                                               prefix_char = '+';
-                                       } else if (print_blank) {
-                                               prefix_char = ' ';
-                                       }
-
-                                       s_len = strlen(s);
-
-                                       if (alternate_form && (strchr(s, '.')) == NULL) {
-                                               s[s_len++] = '.';
-                                       }
-                                       break;
-
-
-                               case 'c':
-                                       char_buf[0] = (char) (va_arg(ap, int));
-                                       s = &char_buf[0];
-                                       s_len = 1;
-                                       pad_char = ' ';
-                                       break;
-
-
-                               case '%':
-                                       char_buf[0] = '%';
-                                       s = &char_buf[0];
-                                       s_len = 1;
-                                       pad_char = ' ';
-                                       break;
-
-
-                               case 'n':
-                                       *(va_arg(ap, int *)) = cc;
-                                       goto skip_output;
-
-                                       /*
-                                        * Always extract the argument as a "char *" pointer. We
-                                        * should be using "void *" but there are still machines
-                                        * that don't understand it.
-                                        * If the pointer size is equal to the size of an unsigned
-                                        * integer we convert the pointer to a hex number, otherwise
-                                        * we print "%p" to indicate that we don't handle "%p".
-                                        */
-                               case 'p':
-                                       if (sizeof(char *) <= sizeof(u_wide_int)) {
-                                               ui_num = (u_wide_int)((size_t) va_arg(ap, char *));
-                                               s = ap_php_conv_p2(ui_num, 4, 'x',
-                                                               &num_buf[NUM_BUF_SIZE], &s_len);
-                                               if (ui_num != 0) {
-                                                       *--s = 'x';
-                                                       *--s = '0';
-                                                       s_len += 2;
-                                               }
-                                       } else {
-                                               s = "%p";
-                                               s_len = 2;
-                                       }
-                                       pad_char = ' ';
-                                       break;
-
-
-                               case NUL:
-                                       /*
-                                        * The last character of the format string was %.
-                                        * We ignore it.
-                                        */
-                                       continue;
-
-
-fmt_error:
-                               php_error(E_ERROR, "Illegal length modifier specified '%c' in s[np]printf call", *fmt);
-                                       /*
-                                        * The default case is for unrecognized %'s.
-                                        * We print %<char> to help the user identify what
-                                        * option is not understood.
-                                        * This is also useful in case the user wants to pass
-                                        * the output of format_converter to another function
-                                        * that understands some other %<char> (like syslog).
-                                        * Note that we can't point s inside fmt because the
-                                        * unknown <char> could be preceded by width etc.
-                                        */
-                               default:
-                                       char_buf[0] = '%';
-                                       char_buf[1] = *fmt;
-                                       s = char_buf;
-                                       s_len = 2;
-                                       pad_char = ' ';
-                                       break;
-                       }
-
-                       if (prefix_char != NUL) {
-                               *--s = prefix_char;
-                               s_len++;
-                       }
-                       if (adjust_width && adjust == RIGHT && min_width > s_len) {
-                               if (pad_char == '0' && prefix_char != NUL) {
-                                       INS_CHAR(*s, sp, bep, cc)
-                                               s++;
-                                       s_len--;
-                                       min_width--;
-                               }
-                               PAD(min_width, s_len, pad_char);
-                       }
-                       /*
-                        * Print the string s.
-                        */
-                       for (i = s_len; i != 0; i--) {
-                               INS_CHAR(*s, sp, bep, cc);
-                               s++;
-                       }
-
-                       if (adjust_width && adjust == LEFT && min_width > s_len)
-                               PAD(min_width, s_len, pad_char);
-                       if (free_zcopy) {
-                               zval_dtor(&zcopy);
-                       }
-               }
-skip_output:
-               if (free_s) {
-                       efree(free_s);
-                       free_s = NULL;
-               }
-
-               fmt++;
-       }
-       odp->nextb = sp;
-       return (cc);
-}
-
-static void strx_printv(int *ccp, char *buf, size_t len, const char *format, zend_bool escape_xml, va_list ap TSRMLS_DC) {
-       buffy od;
-       int cc;
-
-       /*
-        * First initialize the descriptor
-        * Notice that if no length is given, we initialize buf_end to the
-        * highest possible address.
-        */
-       if (len == 0) {
-               od.buf_end = (char *) ~0;
-               od.nextb   = (char *) ~0;
-       } else {
-               od.buf_end = &buf[len-1];
-               od.nextb   = buf;
-       }
-
-       /*
-        * Do the conversion
-        */
-       cc = format_converter(&od, format, escape_xml, ap TSRMLS_CC);
-       if (len != 0 && od.nextb <= od.buf_end) {
-               *(od.nextb) = '\0';
-       }
-       if (ccp) {
-               *ccp = cc;
-       }
-}
-
-static int phpdbg_xml_vsnprintf(char *buf, size_t len, const char *format, zend_bool escape_xml, va_list ap TSRMLS_DC) {
-       int cc;
-
-       strx_printv(&cc, buf, len, format, escape_xml, ap TSRMLS_CC);
-       return (cc);
-}
-
-PHPDBG_API int phpdbg_xml_vasprintf(char **buf, const char *format, zend_bool escape_xml, va_list ap TSRMLS_DC) {
-       va_list ap2;
-       int cc;
-
-       va_copy(ap2, ap);
-       cc = phpdbg_xml_vsnprintf(NULL, 0, format, escape_xml, ap2 TSRMLS_CC);
-       va_end(ap2);
-
-       *buf = NULL;
-
-       if (cc >= 0) {
-               if ((*buf = emalloc(++cc)) != NULL) {
-                       if ((cc = phpdbg_xml_vsnprintf(*buf, cc, format, escape_xml, ap TSRMLS_CC)) < 0) {
-                               efree(*buf);
-                               *buf = NULL;
-                       }
-               }
-       }
-
-       return cc;
-}
-/* copy end */
-
-PHPDBG_API int _phpdbg_xml_asprintf(char **buf TSRMLS_DC, const char *format, zend_bool escape_xml, ...) {
-       int ret;
-       va_list va;
-
-       va_start(va, escape_xml);
-       ret = phpdbg_xml_vasprintf(buf, format, escape_xml, va TSRMLS_CC);
-       va_end(va);
-
-       return ret;
-}
-
-PHPDBG_API int _phpdbg_asprintf(char **buf TSRMLS_DC, const char *format, ...) {
-       int ret;
-       va_list va;
-
-       va_start(va, format);
-       ret = phpdbg_xml_vasprintf(buf, format, 0, va TSRMLS_CC);
-       va_end(va);
-
-       return ret;
-}
-
-static int phpdbg_encode_xml(char **buf, char *msg, int msglen, int from, char *to) {
-       int i;
-       int tolen = to ? strlen(to) : 5;
-       char *tmp = *buf = emalloc(msglen * tolen);
-       for (i = 0; i++ < msglen; msg++) {
-               if (*msg == '&') {
-                       memcpy(tmp, ZEND_STRL("&amp;"));
-                       tmp += sizeof("&amp;") - 1;
-               } else if (*msg == '<') {
-                       memcpy(tmp, ZEND_STRL("&lt;"));
-                       tmp += sizeof("&lt;") - 1;
-               } else if (((int) *msg) == from) {
-                       memcpy(tmp, to, tolen);
-                       tmp += tolen;
-               } else {
-                       *tmp++ = *msg;
-               }
-       }
-
-       {
-               int len = tmp - *buf;
-               *buf = erealloc(*buf, len + 1);
-               return len;
-       }
-}
-
-static void phpdbg_encode_ctrl_chars(char **buf, int *buflen) {
-       char *tmp, *tmpptr;
-       int len;
-       int i;
-
-       tmp = tmpptr = emalloc(*buflen * 5);
-
-       for (i = 0; i < *buflen; i++) {
-               if ((*buf)[i] < 0x20) {
-                       *tmpptr++ = '&';
-                       *tmpptr++ = '#';
-                       if ((unsigned int) ((*buf)[i]) > 9) {
-                               *tmpptr++ = ((*buf)[i] / 10) + '0';
-                       }
-                       *tmpptr++ = ((*buf)[i] % 10) + '0';
-                       *tmpptr++ = ';';
-               } else {
-                       *tmpptr++ = (*buf)[i];
-               }
-       }
-
-       len = tmpptr - tmp;
-
-       efree(*buf);
-       *buf = erealloc(tmp, len + 1);
-       *buflen = len;
-}
-
-static int phpdbg_process_print(int fd, int type, const char *tag, const char *msg, int msglen, const char *xml, int xmllen TSRMLS_DC) {
-       char *msgout = NULL, *buf;
-       int msgoutlen, xmloutlen, buflen;
-       const char *severity;
-
-       if ((PHPDBG_G(flags) & PHPDBG_WRITE_XML) && PHPDBG_G(in_script_xml) && PHPDBG_G(in_script_xml) != type) {
-               phpdbg_mixed_write(fd, ZEND_STRL("</stream>") TSRMLS_CC);
-               PHPDBG_G(in_script_xml) = 0;
-       }
-
-       switch (type) {
-               case P_ERROR:
-                       severity = "error";
-                       if (!PHPDBG_G(last_was_newline)) {
-                               if (PHPDBG_G(flags) & PHPDBG_WRITE_XML) {
-                                       phpdbg_mixed_write(fd, ZEND_STRL("<phpdbg>\n" "</phpdbg>") TSRMLS_CC);
-                               } else {
-                                       phpdbg_mixed_write(fd, ZEND_STRL("\n") TSRMLS_CC);
-                               }
-                               PHPDBG_G(last_was_newline) = 1;
-                       }
-                       if (PHPDBG_G(flags) & PHPDBG_IS_COLOURED) {
-                               msgoutlen = phpdbg_asprintf(&msgout, "\033[%sm[%.*s]\033[0m\n", PHPDBG_G(colors)[PHPDBG_COLOR_ERROR]->code, msglen, msg);
-                       } else {
-                               msgoutlen = phpdbg_asprintf(&msgout, "[%.*s]\n", msglen, msg);
-                       }
-                       break;
-
-               case P_NOTICE:
-                       severity = "notice";
-                       if (!PHPDBG_G(last_was_newline)) {
-                               if (PHPDBG_G(flags) & PHPDBG_WRITE_XML) {
-                                       phpdbg_mixed_write(fd, ZEND_STRL("<phpdbg>\n" "</phpdbg>") TSRMLS_CC);
-                               } else {
-                                       phpdbg_mixed_write(fd, ZEND_STRL("\n") TSRMLS_CC);
-                               }
-                               PHPDBG_G(last_was_newline) = 1;
-                       }
-                       if (PHPDBG_G(flags) & PHPDBG_IS_COLOURED) {
-                               msgoutlen = phpdbg_asprintf(&msgout, "\033[%sm[%.*s]\033[0m\n", PHPDBG_G(colors)[PHPDBG_COLOR_NOTICE]->code, msglen, msg);
-                       } else {
-                               msgoutlen = phpdbg_asprintf(&msgout, "[%.*s]\n", msglen, msg);
-                       }
-                       break;
-
-               case P_WRITELN:
-                       severity = "normal";
-                       if (msg) {
-                               msgoutlen = phpdbg_asprintf(&msgout, "%.*s\n", msglen, msg);
-                       } else {
-                               msgoutlen = 1;
-                               msgout = estrdup("\n");
-                       }
-                       PHPDBG_G(last_was_newline) = 1;
-                       break;
-
-               case P_WRITE:
-                       severity = "normal";
-                       if (msg) {
-                               msgout = estrndup(msg, msglen);
-                               msgoutlen = msglen;
-                               PHPDBG_G(last_was_newline) = msg[msglen - 1] == '\n';
-                       } else {
-                               msgoutlen = 0;
-                               msgout = estrdup("");
-                       }
-                       break;
-
-               case P_STDOUT:
-               case P_STDERR:
-                       if (msg) {
-                               PHPDBG_G(last_was_newline) = msg[msglen - 1] == '\n';
-                               if (PHPDBG_G(flags) & PHPDBG_WRITE_XML) {
-                                       if (PHPDBG_G(in_script_xml) != type) {
-                                               char *stream_buf;
-                                               int stream_buflen = phpdbg_asprintf(&stream_buf, "<stream type=\"%s\">", type == P_STDERR ? "stderr" : "stdout");
-                                               phpdbg_mixed_write(fd, stream_buf, stream_buflen TSRMLS_CC);
-                                               efree(stream_buf);
-                                               PHPDBG_G(in_script_xml) = type;
-                                       }
-#if PHP_VERSION_ID >= 50600
-                                       buf = php_escape_html_entities((unsigned char *) msg, msglen, (size_t *) &buflen, 0, ENT_NOQUOTES, PG(internal_encoding) && PG(internal_encoding)[0] ? PG(internal_encoding) : (SG(default_charset) ? SG(default_charset) : "UTF-8") TSRMLS_CC);
-#else
-                                       buf = php_escape_html_entities((unsigned char *) msg, msglen, (size_t *) &buflen, 0, ENT_NOQUOTES, SG(default_charset) ? SG(default_charset) : "UTF-8" TSRMLS_CC);
-#endif
-                                       phpdbg_encode_ctrl_chars(&buf, &buflen);
-                                       phpdbg_mixed_write(fd, buf, buflen TSRMLS_CC);
-                                       efree(buf);
-                               } else {
-                                       phpdbg_mixed_write(fd, msg, msglen TSRMLS_CC);
-                               }
-                               return msglen;
-                       }
-               break;
-
-               /* no formatting on logging output */
-               case P_LOG:
-                       severity = "log";
-                       if (msg) {
-                               struct timeval tp;
-                               if (gettimeofday(&tp, NULL) == SUCCESS) {
-                                       msgoutlen = phpdbg_asprintf(&msgout, "[%ld %.8F]: %.*s\n", tp.tv_sec, tp.tv_usec / 1000000., msglen, msg);
-                               } else {
-                                       msgoutlen = FAILURE;
-                               }
-                       }
-                       break;
-       }
-
-       if (PHPDBG_G(flags) & PHPDBG_WRITE_XML) {
-               char *xmlout;
-
-               if (PHPDBG_G(req_id)) {
-                       char *xmlbuf = NULL;
-                       xmllen = phpdbg_asprintf(&xmlbuf, "req=\"%lu\" %.*s", PHPDBG_G(req_id), xmllen, xml);
-                       xml = xmlbuf;
-               }
-               if (msgout) {
-                       buflen = phpdbg_encode_xml(&buf, msgout, msgoutlen, '"', "&quot;");
-                       xmloutlen = phpdbg_asprintf(&xmlout, "<%s severity=\"%s\" %.*s msgout=\"%.*s\" />", tag, severity, xmllen, xml, buflen, buf);
-
-                       efree(buf);
-               } else {
-                       xmloutlen = phpdbg_asprintf(&xmlout, "<%s severity=\"%s\" %.*s msgout=\"\" />", tag, severity, xmllen, xml);
-               }
-
-               phpdbg_encode_ctrl_chars(&xmlout, &xmloutlen);
-               phpdbg_eol_convert(&xmlout, &xmloutlen TSRMLS_CC);
-               phpdbg_mixed_write(fd, xmlout, xmloutlen TSRMLS_CC);
-               efree(xmlout);
-       } else if (msgout) {
-               phpdbg_eol_convert(&msgout, &msgoutlen TSRMLS_CC);
-               phpdbg_mixed_write(fd, msgout, msgoutlen TSRMLS_CC);
-       }
-
-       if (PHPDBG_G(req_id) && (PHPDBG_G(flags) & PHPDBG_WRITE_XML)) {
-               efree((char *) xml);
-       }
-
-       if (msgout) {
-               efree(msgout);
-       }
-
-       return msgout ? msgoutlen : xmloutlen;
-} /* }}} */
-
-PHPDBG_API int phpdbg_vprint(int type TSRMLS_DC, int fd, const char *tag, const char *xmlfmt, const char *strfmt, va_list args) {
-       char *msg = NULL, *xml = NULL;
-       int msglen = 0, xmllen = 0;
-       int len;
-       va_list argcpy;
-
-       if (strfmt != NULL && strlen(strfmt) > 0L) {
-               va_copy(argcpy, args);
-               msglen = phpdbg_xml_vasprintf(&msg, strfmt, 0, argcpy TSRMLS_CC);
-               va_end(argcpy);
-       }
-
-       if (PHPDBG_G(flags) & PHPDBG_WRITE_XML) {
-               if (xmlfmt != NULL && strlen(xmlfmt) > 0L) {
-                       va_copy(argcpy, args);
-                       xmllen = phpdbg_xml_vasprintf(&xml, xmlfmt, 1, argcpy TSRMLS_CC);
-                       va_end(argcpy);
-               } else {
-                       xml = estrdup("");
-               }
-       }
-
-       if (PHPDBG_G(err_buf).active && type != P_STDOUT && type != P_STDERR) {
-               phpdbg_free_err_buf(TSRMLS_C);
-
-               PHPDBG_G(err_buf).type = type;
-               PHPDBG_G(err_buf).fd = fd;
-               PHPDBG_G(err_buf).tag = estrdup(tag);
-               PHPDBG_G(err_buf).msg = msg;
-               PHPDBG_G(err_buf).msglen = msglen;
-               if (PHPDBG_G(flags) & PHPDBG_WRITE_XML) {
-                       PHPDBG_G(err_buf).xml = xml;
-                       PHPDBG_G(err_buf).xmllen = xmllen;
-               }
-
-               return msglen;
-       }
-
-       len = phpdbg_process_print(fd, type, tag, msg, msglen, xml, xmllen TSRMLS_CC);
-
-       if (msg) {
-               efree(msg);
-       }
-
-       if (xml) {
-               efree(xml);
-       }
-
-       return len;
-}
-
-PHPDBG_API void phpdbg_free_err_buf(TSRMLS_D) {
-       if (PHPDBG_G(err_buf).type == 0) {
-               return;
-       }
-
-       PHPDBG_G(err_buf).type = 0;
-
-       efree(PHPDBG_G(err_buf).tag);
-       efree(PHPDBG_G(err_buf).msg);
-       if (PHPDBG_G(flags) & PHPDBG_WRITE_XML) {
-               efree(PHPDBG_G(err_buf).xml);
-       }
-}
-
-PHPDBG_API void phpdbg_activate_err_buf(zend_bool active TSRMLS_DC) {
-       PHPDBG_G(err_buf).active = active;
-}
-
-PHPDBG_API int phpdbg_output_err_buf(const char *tag, const char *xmlfmt, const char *strfmt TSRMLS_DC, ...) {
-       int len;
-       va_list args;
-       int errbuf_active = PHPDBG_G(err_buf).active;
-
-       if (PHPDBG_G(flags) & PHPDBG_DISCARD_OUTPUT) {
-               return 0;
-       }
-
-       PHPDBG_G(err_buf).active = 0;
-
-#ifdef ZTS
-       va_start(args, tsrm_ls);
-#else
-       va_start(args, strfmt);
-#endif
-       len = phpdbg_vprint(PHPDBG_G(err_buf).type TSRMLS_CC, PHPDBG_G(err_buf).fd, tag ? tag : PHPDBG_G(err_buf).tag, xmlfmt, strfmt, args);
-       va_end(args);
-
-       PHPDBG_G(err_buf).active = errbuf_active;
-       phpdbg_free_err_buf(TSRMLS_C);
-
-       return len;
-}
-
-PHPDBG_API int phpdbg_print(int type TSRMLS_DC, int fd, const char *tag, const char *xmlfmt, const char *strfmt, ...) {
-       va_list args;
-       int len;
-
-       if (PHPDBG_G(flags) & PHPDBG_DISCARD_OUTPUT) {
-               return 0;
-       }
-
-       va_start(args, strfmt);
-       len = phpdbg_vprint(type TSRMLS_CC, fd, tag, xmlfmt, strfmt, args);
-       va_end(args);
-
-       return len;
-}
-
-PHPDBG_API int phpdbg_xml_internal(int fd TSRMLS_DC, const char *fmt, ...) {
-       int len = 0;
-
-       if (PHPDBG_G(flags) & PHPDBG_DISCARD_OUTPUT) {
-               return 0;
-       }
-
-       if (PHPDBG_G(flags) & PHPDBG_WRITE_XML) {
-               va_list args;
-               char *buffer;
-               int buflen;
-
-               va_start(args, fmt);
-               buflen = phpdbg_xml_vasprintf(&buffer, fmt, 1, args TSRMLS_CC);
-               va_end(args);
-
-               phpdbg_encode_ctrl_chars(&buffer, &buflen);
-
-               if (PHPDBG_G(in_script_xml)) {
-                       phpdbg_mixed_write(fd, ZEND_STRL("</stream>") TSRMLS_CC);
-                       PHPDBG_G(in_script_xml) = 0;
-               }
-
-               len = phpdbg_mixed_write(fd, buffer, buflen TSRMLS_CC);
-               efree(buffer);
-       }
-
-       return len;
-}
-
-PHPDBG_API int phpdbg_log_internal(int fd TSRMLS_DC, const char *fmt, ...) {
-       va_list args;
-       char *buffer;
-       int buflen;
-       int len = 0;
-
-       va_start(args, fmt);
-       buflen = phpdbg_xml_vasprintf(&buffer, fmt, 0, args TSRMLS_CC);
-       va_end(args);
-
-       len = phpdbg_mixed_write(fd, buffer, buflen TSRMLS_CC);
-       efree(buffer);
-
-       return len;
-}
-
-PHPDBG_API int phpdbg_out_internal(int fd TSRMLS_DC, const char *fmt, ...) {
-       va_list args;
-       char *buffer;
-       int buflen;
-       int len = 0;
-
-       if (PHPDBG_G(flags) & PHPDBG_DISCARD_OUTPUT) {
-               return 0;
-       }
-
-       va_start(args, fmt);
-       buflen = phpdbg_xml_vasprintf(&buffer, fmt, 0, args TSRMLS_CC);
-       va_end(args);
-
-       if (PHPDBG_G(flags) & PHPDBG_WRITE_XML) {
-               char *msg;
-               int msglen;
-
-               msglen = phpdbg_encode_xml(&msg, buffer, buflen, 256, NULL);
-               phpdbg_encode_ctrl_chars(&msg, &msglen);
-               phpdbg_eol_convert(&msg, &msglen TSRMLS_CC);
-
-               if (PHPDBG_G(in_script_xml)) {
-                       phpdbg_mixed_write(fd, ZEND_STRL("</stream>") TSRMLS_CC);
-                       PHPDBG_G(in_script_xml) = 0;
-               }
-
-               phpdbg_mixed_write(fd, ZEND_STRL("<phpdbg>") TSRMLS_CC);
-               len = phpdbg_mixed_write(fd, msg, msglen TSRMLS_CC);
-               phpdbg_mixed_write(fd, ZEND_STRL("</phpdbg>") TSRMLS_CC);
-       } else {
-               phpdbg_eol_convert(&buffer, &buflen TSRMLS_CC);
-               len = phpdbg_mixed_write(fd, buffer, buflen TSRMLS_CC);
-       }
-
-       return len;
-}
-
-
-PHPDBG_API int phpdbg_rlog_internal(int fd TSRMLS_DC, const char *fmt, ...) { /* {{{ */
-       int rc = 0;
-
-       va_list args;
-       struct timeval tp;
-
-       va_start(args, fmt);
-       if (gettimeofday(&tp, NULL) == SUCCESS) {
-               char friendly[100];
-               char *format = NULL, *buffer = NULL, *outbuf = NULL;
-               const time_t tt = tp.tv_sec;
-
-#ifdef PHP_WIN32
-               strftime(friendly, 100, "%a %b %d %H.%%04d %Y", localtime(&tt));
-#else
-               strftime(friendly, 100, "%a %b %d %T.%%04d %Y", localtime(&tt));
-#endif
-               phpdbg_asprintf(&buffer, friendly, tp.tv_usec/1000);
-               phpdbg_asprintf(&format, "[%s]: %s\n", buffer, fmt);
-               rc = phpdbg_xml_vasprintf(&outbuf, format, 0, args TSRMLS_CC);
-
-               if (outbuf) {
-                       rc = phpdbg_mixed_write(fd, outbuf, rc TSRMLS_CC);
-                       efree(outbuf);
-               }
-
-               efree(format);
-               efree(buffer);
-       }
-       va_end(args);
-
-       return rc;
-} /* }}} */
diff --git a/sapi/phpdbg/phpdbg_out.h b/sapi/phpdbg/phpdbg_out.h
deleted file mode 100644 (file)
index ea25b04..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
-   +----------------------------------------------------------------------+
-   | PHP Version 5                                                        |
-   +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2014 The PHP Group                                |
-   +----------------------------------------------------------------------+
-   | This source file is subject to version 3.01 of the PHP license,      |
-   | that is bundled with this package in the file LICENSE, and is        |
-   | available through the world-wide-web at the following url:           |
-   | http://www.php.net/license/3_01.txt                                  |
-   | If you did not receive a copy of the PHP license and are unable to   |
-   | obtain it through the world-wide-web, please send a note to          |
-   | license@php.net so we can mail you a copy immediately.               |
-   +----------------------------------------------------------------------+
-   | Authors: Felipe Pena <felipe@php.net>                                |
-   | Authors: Joe Watkins <joe.watkins@live.co.uk>                        |
-   | Authors: Bob Weinand <bwoebi@php.net>                                |
-   +----------------------------------------------------------------------+
-*/
-
-#ifndef PHPDBG_OUT_H
-#define PHPDBG_OUT_H
-
-/**
- * Error/notice/formatting helpers
- */
-enum {
-       P_ERROR  = 1,
-       P_NOTICE,
-       P_WRITELN,
-       P_WRITE,
-       P_STDOUT,
-       P_STDERR,
-       P_LOG
-};
-
-#ifdef ZTS
-PHPDBG_API int phpdbg_print(int severity TSRMLS_DC, int fd, const char *tag, const char *xmlfmt, const char *strfmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 6, 7);
-PHPDBG_API int phpdbg_xml_internal(int fd TSRMLS_DC, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 3, 4);
-PHPDBG_API int phpdbg_log_internal(int fd TSRMLS_DC, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 3, 4);
-PHPDBG_API int phpdbg_out_internal(int fd TSRMLS_DC, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 3, 4);
-PHPDBG_API int phpdbg_rlog_internal(int fd TSRMLS_DC, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 3, 4);
-#else
-PHPDBG_API int phpdbg_print(int severity, int fd, const char *tag, const char *xmlfmt, const char *strfmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 5, 6);
-PHPDBG_API int phpdbg_xml_internal(int fd, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 2, 3);
-PHPDBG_API int phpdbg_log_internal(int fd, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 2, 3);
-PHPDBG_API int phpdbg_out_internal(int fd, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 2, 3);
-PHPDBG_API int phpdbg_rlog_internal(int fd, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 2, 3);
-#endif
-
-
-#define phpdbg_error(tag, xmlfmt, strfmt, ...)              phpdbg_print(P_ERROR   TSRMLS_CC, PHPDBG_G(io)[PHPDBG_STDOUT].fd, tag,  xmlfmt, strfmt, ##__VA_ARGS__)
-#define phpdbg_notice(tag, xmlfmt, strfmt, ...)             phpdbg_print(P_NOTICE  TSRMLS_CC, PHPDBG_G(io)[PHPDBG_STDOUT].fd, tag,  xmlfmt, strfmt, ##__VA_ARGS__)
-#define phpdbg_writeln(tag, xmlfmt, strfmt, ...)            phpdbg_print(P_WRITELN TSRMLS_CC, PHPDBG_G(io)[PHPDBG_STDOUT].fd, tag,  xmlfmt, strfmt, ##__VA_ARGS__)
-#define phpdbg_write(tag, xmlfmt, strfmt, ...)              phpdbg_print(P_WRITE   TSRMLS_CC, PHPDBG_G(io)[PHPDBG_STDOUT].fd, tag,  xmlfmt, strfmt, ##__VA_ARGS__)
-#define phpdbg_script(type, fmt, ...)                       phpdbg_print(type      TSRMLS_CC, PHPDBG_G(io)[PHPDBG_STDOUT].fd, NULL, NULL,   fmt,    ##__VA_ARGS__)
-#define phpdbg_log(fmt, ...) phpdbg_log_internal(PHPDBG_G(io)[PHPDBG_STDOUT].fd TSRMLS_CC, fmt, ##__VA_ARGS__)
-#define phpdbg_xml(fmt, ...) phpdbg_xml_internal(PHPDBG_G(io)[PHPDBG_STDOUT].fd TSRMLS_CC, fmt, ##__VA_ARGS__)
-#define phpdbg_out(fmt, ...) phpdbg_out_internal(PHPDBG_G(io)[PHPDBG_STDOUT].fd TSRMLS_CC, fmt, ##__VA_ARGS__)
-
-#define phpdbg_error_ex(out, tag, xmlfmt, strfmt, ...)      phpdbg_print(P_ERROR   TSRMLS_CC, out, tag,  xmlfmt, strfmt, ##__VA_ARGS__)
-#define phpdbg_notice_ex(out, tag, xmlfmt, strfmt, ...)     phpdbg_print(P_NOTICE  TSRMLS_CC, out, tag,  xmlfmt, strfmt, ##__VA_ARGS__)
-#define phpdbg_writeln_ex(out, tag, xmlfmt, strfmt, ...)    phpdbg_print(P_WRITELN TSRMLS_CC, out, tag,  xmlfmt, strfmt, ##__VA_ARGS__)
-#define phpdbg_write_ex(out, tag, xmlfmt, strfmt, ...)      phpdbg_print(P_WRITE   TSRMLS_CC, out, tag,  xmlfmt, strfmt, ##__VA_ARGS__)
-#define phpdbg_script_ex(out, type, fmt, ...)               phpdbg_print(type      TSRMLS_CC, out, NULL, NULL,   fmt,    ##__VA_ARGS__)
-#define phpdbg_log_ex(out, fmt, ...) phpdbg_log_internal(PHPDBG_G(io)[PHPDBG_STDOUT].fd TSRMLS_CC, fmt, ##__VA_ARGS__)
-#define phpdbg_xml_ex(out, fmt, ...) phpdbg_xml_internal(PHPDBG_G(io)[PHPDBG_STDOUT].fd TSRMLS_CC, fmt, ##__VA_ARGS__)
-#define phpdbg_out_ex(out, fmt, ...) phpdbg_out_internal(PHPDBG_G(io)[PHPDBG_STDOUT].fd TSRMLS_CC, fmt, ##__VA_ARGS__)
-
-#define phpdbg_rlog(fd, fmt, ...) phpdbg_rlog_internal(fd TSRMLS_CC, fmt, ##__VA_ARGS__)
-
-#define phpdbg_xml_asprintf(buf, ...) _phpdbg_xml_asprintf(buf TSRMLS_CC, ##__VA_ARGS__)
-PHPDBG_API int _phpdbg_xml_asprintf(char **buf TSRMLS_DC, const char *format, zend_bool escape_xml, ...);
-
-#define phpdbg_asprintf(buf, ...) _phpdbg_asprintf(buf TSRMLS_CC, ##__VA_ARGS__)
-PHPDBG_API int _phpdbg_asprintf(char **buf TSRMLS_DC, const char *format, ...);
-
-
-#if PHPDBG_DEBUG
-#      define phpdbg_debug(fmt, ...) phpdbg_log_ex(PHPDBG_G(io)[PHPDBG_STDERR].fd TSRMLS_CC, fmt, ##__VA_ARGS__)
-#else
-#      define phpdbg_debug(fmt, ...)
-#endif
-
-PHPDBG_API void phpdbg_free_err_buf(TSRMLS_D);
-PHPDBG_API void phpdbg_activate_err_buf(zend_bool active TSRMLS_DC);
-PHPDBG_API int phpdbg_output_err_buf(const char *tag, const char *xmlfmt, const char *strfmt TSRMLS_DC, ...);
-
-
-/* {{{ For separation */
-#define SEPARATE "------------------------------------------------" /* }}} */
-
-#endif /* PHPDBG_OUT_H */
index 433423db8725055b74b66002e6848a065340f665..7d05da659e222286337546c56c8bd85b214eab33 100644 (file)
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 2.7.  */
+/* A Bison parser, made by GNU Bison 2.7.12-4996.  */
 
 /* Bison implementation for Yacc-like parsers in C
    
-      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
+      Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -44,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.7"
+#define YYBISON_VERSION "2.7.12-4996"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -70,7 +70,7 @@
 
 /* Copy the first part of user declarations.  */
 /* Line 371 of yacc.c  */
-#line 1 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+#line 1 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
 
  
 /*
@@ -129,7 +129,7 @@ extern int phpdbg_debug;
 #endif
 /* "%code requires" blocks.  */
 /* Line 387 of yacc.c  */
-#line 31 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+#line 31 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
 
 #include "phpdbg.h"
 #ifndef YY_TYPEDEF_YY_SCANNER_T
@@ -164,8 +164,7 @@ typedef void* yyscan_t;
      T_OPCODE = 272,
      T_ID = 273,
      T_INPUT = 274,
-     T_UNEXPECTED = 275,
-     T_REQ_ID = 276
+     T_UNEXPECTED = 275
    };
 #endif
 /* Tokens.  */
@@ -187,7 +186,6 @@ typedef void* yyscan_t;
 #define T_ID 273
 #define T_INPUT 274
 #define T_UNEXPECTED 275
-#define T_REQ_ID 276
 
 
 
@@ -218,7 +216,7 @@ int phpdbg_parse ();
 /* Copy the second part of user declarations.  */
 
 /* Line 390 of yacc.c  */
-#line 222 "sapi/phpdbg/phpdbg_parser.c"
+#line 220 "sapi/phpdbg/phpdbg_parser.c"
 
 #ifdef short
 # undef short
@@ -279,6 +277,14 @@ typedef short int yytype_int16;
 # endif
 #endif
 
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later.  */
+# if (! defined __GNUC__ || __GNUC__ < 2 \
+      || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
+#  define __attribute__(Spec) /* empty */
+# endif
+#endif
+
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
 # define YYUSE(E) ((void) (E))
@@ -286,6 +292,7 @@ typedef short int yytype_int16;
 # define YYUSE(E) /* empty */
 #endif
 
+
 /* Identity function, used to suppress warnings about constant conditions.  */
 #ifndef lint
 # define YYID(N) (N)
@@ -436,22 +443,22 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  26
+#define YYFINAL  25
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   48
+#define YYLAST   42
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  22
+#define YYNTOKENS  21
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  6
+#define YYNNTS  5
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  28
+#define YYNRULES  25
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  43
+#define YYNSTATES  38
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   276
+#define YYMAXUTOK   275
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -486,7 +493,7 @@ static const yytype_uint8 yytranslate[] =
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21
+      15,    16,    17,    18,    19,    20
 };
 
 #if YYDEBUG
@@ -494,31 +501,30 @@ static const yytype_uint8 yytranslate[] =
    YYRHS.  */
 static const yytype_uint8 yyprhs[] =
 {
-       0,     0,     3,     5,     7,     8,    10,    13,    16,    20,
-      25,    30,    36,    40,    46,    50,    53,    55,    57,    59,
-      61,    63,    65,    67,    69,    70,    74,    78,    81
+       0,     0,     3,     5,     7,     8,    10,    13,    17,    22,
+      27,    33,    37,    43,    47,    50,    52,    54,    56,    58,
+      60,    62,    64,    67,    70,    72
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int8 yyrhs[] =
 {
-      23,     0,    -1,    24,    -1,    27,    -1,    -1,    25,    -1,
-      24,    25,    -1,    24,    26,    -1,    18,    10,    14,    -1,
-      18,    10,    12,    14,    -1,    13,    18,    10,    14,    -1,
-      13,    18,    10,    12,    14,    -1,    18,    11,    18,    -1,
-      18,    11,    18,    12,    14,    -1,    18,    12,    14,    -1,
-       6,    19,    -1,    17,    -1,    16,    -1,    15,    -1,     7,
-      -1,     8,    -1,    14,    -1,    18,    -1,    21,    -1,    -1,
-       3,    26,    19,    -1,     5,    26,    19,    -1,     4,    26,
-      -1,     4,    26,    19,    -1
+      22,     0,    -1,    23,    -1,    25,    -1,    -1,    24,    -1,
+      23,    24,    -1,    18,    10,    14,    -1,    18,    10,    12,
+      14,    -1,    13,    18,    10,    14,    -1,    13,    18,    10,
+      12,    14,    -1,    18,    11,    18,    -1,    18,    11,    18,
+      12,    14,    -1,    18,    12,    14,    -1,     6,    19,    -1,
+      17,    -1,    16,    -1,    15,    -1,     7,    -1,     8,    -1,
+      14,    -1,    18,    -1,     3,    19,    -1,     5,    19,    -1,
+       4,    -1,     4,    19,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint8 yyrline[] =
 {
-       0,    67,    67,    68,    69,    73,    74,    75,    79,    84,
-      89,    99,   109,   114,   120,   126,   131,   132,   133,   134,
-     135,   136,   137,   141,   142,   146,   151,   156,   160
+       0,    66,    66,    67,    68,    72,    73,    77,    82,    87,
+      97,   107,   112,   118,   124,   129,   130,   131,   132,   133,
+     134,   135,   139,   144,   149,   153
 };
 #endif
 
@@ -534,9 +540,8 @@ static const char *const yytname[] =
   "\":: (double colon)\"", "\"# (pound sign)\"", "\"protocol (file://)\"",
   "\"digits (numbers)\"", "\"literal (string)\"", "\"address\"",
   "\"opcode\"", "\"identifier (command or function name)\"",
-  "\"input (input string or data)\"", "\"input\"",
-  "\"request id (-r %d)\"", "$accept", "input", "parameters", "parameter",
-  "req_id", "full_expression", YY_NULL
+  "\"input (input string or data)\"", "\"input\"", "$accept", "input",
+  "parameters", "parameter", "full_expression", YY_NULL
 };
 #endif
 
@@ -547,24 +552,24 @@ static const yytype_uint16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276
+     275
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    22,    23,    23,    23,    24,    24,    24,    25,    25,
-      25,    25,    25,    25,    25,    25,    25,    25,    25,    25,
-      25,    25,    25,    26,    26,    27,    27,    27,    27
+       0,    21,    22,    22,    22,    23,    23,    24,    24,    24,
+      24,    24,    24,    24,    24,    24,    24,    24,    24,    24,
+      24,    24,    25,    25,    25,    25
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
-       0,     2,     1,     1,     0,     1,     2,     2,     3,     4,
-       4,     5,     3,     5,     3,     2,     1,     1,     1,     1,
-       1,     1,     1,     1,     0,     3,     3,     2,     3
+       0,     2,     1,     1,     0,     1,     2,     3,     4,     4,
+       5,     3,     5,     3,     2,     1,     1,     1,     1,     1,
+       1,     1,     2,     2,     1,     2
 };
 
 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
@@ -572,35 +577,33 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       4,    24,    24,    24,     0,    19,    20,     0,    21,    18,
-      17,    16,    22,     0,     2,     5,     3,    23,     0,    27,
-       0,    15,     0,     0,     0,     0,     1,     6,     7,    25,
-      28,    26,     0,     0,     8,    12,    14,     0,    10,     9,
-       0,    11,    13
+       4,     0,    24,     0,     0,    18,    19,     0,    20,    17,
+      16,    15,    21,     0,     2,     5,     3,    22,    25,    23,
+      14,     0,     0,     0,     0,     1,     6,     0,     0,     7,
+      11,    13,     0,     9,     8,     0,    10,    12
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int8 yydefgoto[] =
 {
-      -1,    13,    14,    15,    18,    16
+      -1,    13,    14,    15,    16
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -16
+#define YYPACT_NINF -11
 static const yytype_int8 yypact[] =
 {
-      -3,   -15,   -15,   -15,   -10,   -16,   -16,     3,   -16,   -16,
-     -16,   -16,    22,    29,    10,   -16,   -16,   -16,    11,    17,
-      19,   -16,    30,     8,    21,    27,   -16,   -16,   -16,   -16,
-     -16,   -16,    23,    28,   -16,    31,   -16,    32,   -16,   -16,
-      33,   -16,   -16
+      -3,   -10,    11,    12,    13,   -11,   -11,    15,   -11,   -11,
+     -11,   -11,    -4,    29,    10,   -11,   -11,   -11,   -11,   -11,
+     -11,    24,     7,    17,    22,   -11,   -11,     8,    23,   -11,
+      26,   -11,    25,   -11,   -11,    27,   -11,   -11
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int8 yypgoto[] =
 {
-     -16,   -16,   -16,    34,     5,   -16
+     -11,   -11,   -11,    28,   -11
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -609,26 +612,26 @@ static const yytype_int8 yypgoto[] =
 #define YYTABLE_NINF -1
 static const yytype_uint8 yytable[] =
 {
-       1,     2,     3,     4,     5,     6,    17,    19,    20,    21,
+       1,     2,     3,     4,     5,     6,    22,    23,    24,    17,
        7,     8,     9,    10,    11,    12,     4,     5,     6,    28,
-      33,    22,    34,     7,     8,     9,    10,    11,    12,    26,
-      29,    17,    23,    24,    25,    37,    30,    38,    31,    35,
-      32,    36,    39,    40,     0,     0,    41,    42,    27
+      32,    29,    33,     7,     8,     9,    10,    11,    12,    25,
+      18,    19,    20,    21,    27,    30,    31,    34,    35,    36,
+       0,    37,    26
 };
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-16)))
+  (!!((Yystate) == (-11)))
 
 #define yytable_value_is_error(Yytable_value) \
   YYID (0)
 
 static const yytype_int8 yycheck[] =
 {
-       3,     4,     5,     6,     7,     8,    21,     2,     3,    19,
-      13,    14,    15,    16,    17,    18,     6,     7,     8,    14,
-      12,    18,    14,    13,    14,    15,    16,    17,    18,     0,
-      19,    21,    10,    11,    12,    12,    19,    14,    19,    18,
-      10,    14,    14,    12,    -1,    -1,    14,    14,    14
+       3,     4,     5,     6,     7,     8,    10,    11,    12,    19,
+      13,    14,    15,    16,    17,    18,     6,     7,     8,    12,
+      12,    14,    14,    13,    14,    15,    16,    17,    18,     0,
+      19,    19,    19,    18,    10,    18,    14,    14,    12,    14,
+      -1,    14,    14
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -636,10 +639,9 @@ static const yytype_int8 yycheck[] =
 static const yytype_uint8 yystos[] =
 {
        0,     3,     4,     5,     6,     7,     8,    13,    14,    15,
-      16,    17,    18,    23,    24,    25,    27,    21,    26,    26,
-      26,    19,    18,    10,    11,    12,     0,    25,    26,    19,
-      19,    19,    10,    12,    14,    18,    14,    12,    14,    14,
-      12,    14,    14
+      16,    17,    18,    22,    23,    24,    25,    19,    19,    19,
+      19,    18,    10,    11,    12,     0,    24,    10,    12,    14,
+      18,    14,    12,    14,    14,    12,    14,    14
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -759,11 +761,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, tsrm_ls)
 # else
   YYUSE (yyoutput);
 # endif
-  switch (yytype)
-    {
-      default:
-        break;
-    }
+  YYUSE (yytype);
 }
 
 
@@ -1157,12 +1155,7 @@ yydestruct (yymsg, yytype, yyvaluep, tsrm_ls)
     yymsg = "Deleting";
   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
 
-  switch (yytype)
-    {
-
-      default:
-        break;
-    }
+  YYUSE (yytype);
 }
 
 
@@ -1459,32 +1452,26 @@ yyreduce:
   switch (yyn)
     {
         case 3:
-/* Line 1792 of yacc.c  */
-#line 68 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+/* Line 1802 of yacc.c  */
+#line 67 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     { phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(1) - (1)])); }
     break;
 
   case 5:
-/* Line 1792 of yacc.c  */
-#line 73 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+/* Line 1802 of yacc.c  */
+#line 72 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     { phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(1) - (1)])); }
     break;
 
   case 6:
-/* Line 1792 of yacc.c  */
-#line 74 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+/* Line 1802 of yacc.c  */
+#line 73 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     { phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(2) - (2)])); }
     break;
 
   case 7:
-/* Line 1792 of yacc.c  */
-#line 75 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
-    { (yyval) = (yyvsp[(1) - (2)]); }
-    break;
-
-  case 8:
-/* Line 1792 of yacc.c  */
-#line 79 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+/* Line 1802 of yacc.c  */
+#line 77 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     {  
                (yyval).type = FILE_PARAM;
                (yyval).file.name = (yyvsp[(2) - (3)]).str;
@@ -1492,9 +1479,9 @@ yyreduce:
        }
     break;
 
-  case 9:
-/* Line 1792 of yacc.c  */
-#line 84 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+  case 8:
+/* Line 1802 of yacc.c  */
+#line 82 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     {
                (yyval).type = NUMERIC_FILE_PARAM;
                (yyval).file.name = (yyvsp[(1) - (4)]).str;
@@ -1502,9 +1489,9 @@ yyreduce:
        }
     break;
 
-  case 10:
-/* Line 1792 of yacc.c  */
-#line 89 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+  case 9:
+/* Line 1802 of yacc.c  */
+#line 87 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     {
                (yyval).type = FILE_PARAM;
                (yyval).file.name = malloc((yyvsp[(1) - (4)]).len + (yyvsp[(2) - (4)]).len + 1);
@@ -1517,9 +1504,9 @@ yyreduce:
        }
     break;
 
-  case 11:
-/* Line 1792 of yacc.c  */
-#line 99 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+  case 10:
+/* Line 1802 of yacc.c  */
+#line 97 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     {
                (yyval).type = NUMERIC_FILE_PARAM;
                (yyval).file.name = malloc((yyvsp[(1) - (5)]).len + (yyvsp[(2) - (5)]).len + 1);
@@ -1532,9 +1519,9 @@ yyreduce:
        }
     break;
 
-  case 12:
-/* Line 1792 of yacc.c  */
-#line 109 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+  case 11:
+/* Line 1802 of yacc.c  */
+#line 107 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     { 
                (yyval).type = METHOD_PARAM;
                (yyval).method.class = (yyvsp[(1) - (3)]).str;
@@ -1542,9 +1529,9 @@ yyreduce:
        }
     break;
 
-  case 13:
-/* Line 1792 of yacc.c  */
-#line 114 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+  case 12:
+/* Line 1802 of yacc.c  */
+#line 112 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     { 
                (yyval).type = NUMERIC_METHOD_PARAM;
                (yyval).method.class = (yyvsp[(1) - (5)]).str;
@@ -1553,9 +1540,9 @@ yyreduce:
        }
     break;
 
-  case 14:
-/* Line 1792 of yacc.c  */
-#line 120 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+  case 13:
+/* Line 1802 of yacc.c  */
+#line 118 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     {
                (yyval).type = NUMERIC_FUNCTION_PARAM;
                (yyval).str = (yyvsp[(1) - (3)]).str;
@@ -1564,9 +1551,9 @@ yyreduce:
        }
     break;
 
-  case 15:
-/* Line 1792 of yacc.c  */
-#line 126 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+  case 14:
+/* Line 1802 of yacc.c  */
+#line 124 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     {
                (yyval).type = COND_PARAM; 
                (yyval).str = (yyvsp[(2) - (2)]).str;
@@ -1574,96 +1561,90 @@ yyreduce:
        }
     break;
 
+  case 15:
+/* Line 1802 of yacc.c  */
+#line 129 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
+    { (yyval) = (yyvsp[(1) - (1)]); }
+    break;
+
   case 16:
-/* Line 1792 of yacc.c  */
-#line 131 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+/* Line 1802 of yacc.c  */
+#line 130 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 17:
-/* Line 1792 of yacc.c  */
-#line 132 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+/* Line 1802 of yacc.c  */
+#line 131 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 18:
-/* Line 1792 of yacc.c  */
-#line 133 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+/* Line 1802 of yacc.c  */
+#line 132 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 19:
-/* Line 1792 of yacc.c  */
-#line 134 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+/* Line 1802 of yacc.c  */
+#line 133 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 20:
-/* Line 1792 of yacc.c  */
-#line 135 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+/* Line 1802 of yacc.c  */
+#line 134 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 21:
-/* Line 1792 of yacc.c  */
-#line 136 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+/* Line 1802 of yacc.c  */
+#line 135 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 22:
-/* Line 1792 of yacc.c  */
-#line 137 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
-    break;
-
-  case 23:
-/* Line 1792 of yacc.c  */
-#line 141 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
-    { PHPDBG_G(req_id) = (yyvsp[(1) - (1)]).num; }
-    break;
-
-  case 25:
-/* Line 1792 of yacc.c  */
-#line 146 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+/* Line 1802 of yacc.c  */
+#line 139 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     { 
                (yyval).type = EVAL_PARAM; 
-               (yyval).str = (yyvsp[(3) - (3)]).str;
-               (yyval).len = (yyvsp[(3) - (3)]).len;
+               (yyval).str = (yyvsp[(2) - (2)]).str;
+               (yyval).len = (yyvsp[(2) - (2)]).len;
        }
     break;
 
-  case 26:
-/* Line 1792 of yacc.c  */
-#line 151 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+  case 23:
+/* Line 1802 of yacc.c  */
+#line 144 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     {  
                (yyval).type = SHELL_PARAM; 
-               (yyval).str = (yyvsp[(3) - (3)]).str;
-               (yyval).len = (yyvsp[(3) - (3)]).len;
+               (yyval).str = (yyvsp[(2) - (2)]).str;
+               (yyval).len = (yyvsp[(2) - (2)]).len;
        }
     break;
 
-  case 27:
-/* Line 1792 of yacc.c  */
-#line 156 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+  case 24:
+/* Line 1802 of yacc.c  */
+#line 149 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     {
                (yyval).type = RUN_PARAM;
                (yyval).len = 0;
        }
     break;
 
-  case 28:
-/* Line 1792 of yacc.c  */
-#line 160 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+  case 25:
+/* Line 1802 of yacc.c  */
+#line 153 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
     {  
                (yyval).type = RUN_PARAM; 
-               (yyval).str = (yyvsp[(3) - (3)]).str;
-               (yyval).len = (yyvsp[(3) - (3)]).len;
+               (yyval).str = (yyvsp[(2) - (2)]).str;
+               (yyval).len = (yyvsp[(2) - (2)]).len;
        }
     break;
 
 
-/* Line 1792 of yacc.c  */
-#line 1667 "sapi/phpdbg/phpdbg_parser.c"
+/* Line 1802 of yacc.c  */
+#line 1648 "sapi/phpdbg/phpdbg_parser.c"
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -1894,12 +1875,12 @@ yyreturn:
 }
 
 
-/* Line 2055 of yacc.c  */
-#line 167 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+/* Line 2050 of yacc.c  */
+#line 160 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
 
 
 static int yyerror(void ***tsrm_ls, const char *msg) {
-       phpdbg_error("command", "type=\"parseerror\" msg=\"%s\"", "Parse Error: %s", msg);
+       phpdbg_error("Parse Error: %s", msg);
 
        {
                const phpdbg_param_t *top = PHPDBG_G(parser_stack);
index 4cd8ed6d008d691b838fd8df66c0332f3304f966..da5892ac996e92da1694bd26fadf6ae415e72aa8 100644 (file)
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 2.7.  */
+/* A Bison parser, made by GNU Bison 2.7.12-4996.  */
 
 /* Bison interface for Yacc-like parsers in C
    
-      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
+      Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -40,8 +40,8 @@
 extern int phpdbg_debug;
 #endif
 /* "%code requires" blocks.  */
-/* Line 2058 of yacc.c  */
-#line 31 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y"
+/* Line 2060 of yacc.c  */
+#line 31 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_parser.y"
 
 #include "phpdbg.h"
 #ifndef YY_TYPEDEF_YY_SCANNER_T
@@ -50,7 +50,7 @@ typedef void* yyscan_t;
 #endif
 
 
-/* Line 2058 of yacc.c  */
+/* Line 2060 of yacc.c  */
 #line 55 "sapi/phpdbg/phpdbg_parser.h"
 
 /* Tokens.  */
@@ -76,8 +76,7 @@ typedef void* yyscan_t;
      T_OPCODE = 272,
      T_ID = 273,
      T_INPUT = 274,
-     T_UNEXPECTED = 275,
-     T_REQ_ID = 276
+     T_UNEXPECTED = 275
    };
 #endif
 /* Tokens.  */
@@ -99,7 +98,6 @@ typedef void* yyscan_t;
 #define T_ID 273
 #define T_INPUT 274
 #define T_UNEXPECTED 275
-#define T_REQ_ID 276
 
 
 
index e4353976f3e26d675d2e8bbe1afcefcca76f77e6..702bf78455db93ceb4fbd2a1088d85ec3edca4ef 100644 (file)
@@ -59,7 +59,6 @@ typedef void* yyscan_t;
 %token T_ID         "identifier (command or function name)"
 %token T_INPUT      "input (input string or data)"
 %token T_UNEXPECTED "input"
-%token T_REQ_ID     "request id (-r %d)"
 
 %% /* Rules */
 
@@ -72,7 +71,6 @@ input
 parameters
        : parameter { phpdbg_stack_push(PHPDBG_G(parser_stack), &$1); }
        | parameters parameter { phpdbg_stack_push(PHPDBG_G(parser_stack), &$2); }
-       | parameters req_id { $$ = $1; }
        ;
 
 parameter
@@ -137,37 +135,32 @@ parameter
        | T_ID { $$ = $1; }
        ;
 
-req_id
-       : T_REQ_ID { PHPDBG_G(req_id) = $1.num; }
-       | /* empty */
-;
-
 full_expression
-       : T_EVAL req_id T_INPUT { 
+       : T_EVAL T_INPUT { 
                $$.type = EVAL_PARAM; 
-               $$.str = $3.str;
-               $$.len = $3.len;
+               $$.str = $2.str;
+               $$.len = $2.len;
        }
-       | T_SHELL req_id T_INPUT {      
+       | T_SHELL T_INPUT {     
                $$.type = SHELL_PARAM; 
-               $$.str = $3.str;
-               $$.len = $3.len;
+               $$.str = $2.str;
+               $$.len = $2.len;
        }
-       | T_RUN req_id {
+       | T_RUN {
                $$.type = RUN_PARAM;
                $$.len = 0;
        }
-       | T_RUN req_id T_INPUT {        
+       | T_RUN T_INPUT {       
                $$.type = RUN_PARAM; 
-               $$.str = $3.str;
-               $$.len = $3.len;
+               $$.str = $2.str;
+               $$.len = $2.len;
        }
        ;
 
 %%
 
 static int yyerror(void ***tsrm_ls, const char *msg) {
-       phpdbg_error("command", "type=\"parseerror\" msg=\"%s\"", "Parse Error: %s", msg);
+       phpdbg_error("Parse Error: %s", msg);
 
        {
                const phpdbg_param_t *top = PHPDBG_G(parser_stack);
index 80eeddb39d111faca05b581c0dface029190f494..76321a5042d90fdedbbabaa0bfced6d9851c3e0b 100644 (file)
 
 ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
 
-#define PHPDBG_PRINT_COMMAND_D(f, h, a, m, l, s, flags) \
-       PHPDBG_COMMAND_D_EXP(f, h, a, m, l, s, &phpdbg_prompt_commands[9], flags)
+#define PHPDBG_PRINT_COMMAND_D(f, h, a, m, l, s) \
+       PHPDBG_COMMAND_D_EXP(f, h, a, m, l, s, &phpdbg_prompt_commands[9])
 
 const phpdbg_command_t phpdbg_print_commands[] = {
-       PHPDBG_PRINT_COMMAND_D(exec,       "print out the instructions in the execution context",  'e', print_exec,   NULL, 0, PHPDBG_ASYNC_SAFE),
-       PHPDBG_PRINT_COMMAND_D(opline,     "print out the instruction in the current opline",      'o', print_opline, NULL, 0, PHPDBG_ASYNC_SAFE),
-       PHPDBG_PRINT_COMMAND_D(class,      "print out the instructions in the specified class",    'c', print_class,  NULL, "s", PHPDBG_ASYNC_SAFE),
-       PHPDBG_PRINT_COMMAND_D(method,     "print out the instructions in the specified method",   'm', print_method, NULL, "m", PHPDBG_ASYNC_SAFE),
-       PHPDBG_PRINT_COMMAND_D(func,       "print out the instructions in the specified function", 'f', print_func,   NULL, "s", PHPDBG_ASYNC_SAFE),
-       PHPDBG_PRINT_COMMAND_D(stack,      "print out the instructions in the current stack",      's', print_stack,  NULL, 0, PHPDBG_ASYNC_SAFE),
+       PHPDBG_PRINT_COMMAND_D(exec,       "print out the instructions in the execution context",  'e', print_exec,   NULL, 0),
+       PHPDBG_PRINT_COMMAND_D(opline,     "print out the instruction in the current opline",      'o', print_opline, NULL, 0),
+       PHPDBG_PRINT_COMMAND_D(class,      "print out the instructions in the specified class",    'c', print_class,  NULL, "s"),
+       PHPDBG_PRINT_COMMAND_D(method,     "print out the instructions in the specified method",   'm', print_method, NULL, "m"),
+       PHPDBG_PRINT_COMMAND_D(func,       "print out the instructions in the specified function", 'f', print_func,   NULL, "s"),
+       PHPDBG_PRINT_COMMAND_D(stack,      "print out the instructions in the current stack",      's', print_stack,  NULL, 0),
        PHPDBG_END_COMMAND
 };
 
@@ -44,7 +44,7 @@ PHPDBG_PRINT(opline) /* {{{ */
        if (EG(in_execution) && EG(current_execute_data)) {
                phpdbg_print_opline(EG(current_execute_data), 1 TSRMLS_CC);
        } else {
-               phpdbg_error("inactive", "type=\"execution\"", "Not Executing!");
+               phpdbg_error("Not Executing!");
        }
 
        return SUCCESS;
@@ -56,22 +56,21 @@ static inline void phpdbg_print_function_helper(zend_function *method TSRMLS_DC)
                case ZEND_USER_FUNCTION: {
                        zend_op_array* op_array = &(method->op_array);
                        HashTable vars;
-
+                       
                        if (op_array) {
                                zend_op *opline = &(op_array->opcodes[0]);
                                zend_uint opcode = 0,
                                end = op_array->last-1;
 
                                if (method->common.scope) {
-                                       phpdbg_writeln("printoplineinfo", "type=\"User\" startline=\"%d\" endline=\"%d\" method=\"%s::%s\" file=\"%s\"", "\tL%d-%d %s::%s() %s",
-                                               op_array->line_start,
-                                               op_array->line_end,
+                                       phpdbg_writeln("\tL%d-%d %s::%s() %s",
+                                               op_array->line_start, op_array->line_end,
                                                method->common.scope->name,
                                                method->common.function_name,
                                                op_array->filename ? op_array->filename : "unknown");
                                } else {
-                                       phpdbg_writeln("printoplineinfo", "type=\"User\" startline=\"%d\" endline=\"%d\" function=\"%s\" file=\"%s\"", "\tL%d-%d %s() %s",
-                                               method->common.function_name ? op_array->line_start : 0,
+                                       phpdbg_writeln("\tL%d-%d %s() %s",
+                                               method->common.function_name ? op_array->line_start : 0, 
                                                method->common.function_name ? op_array->line_end : 0,
                                                method->common.function_name ? method->common.function_name : "{main}",
                                                op_array->filename ? op_array->filename : "unknown");
@@ -81,14 +80,14 @@ static inline void phpdbg_print_function_helper(zend_function *method TSRMLS_DC)
                                do {
                                        char *decode = phpdbg_decode_opline(op_array, opline, &vars TSRMLS_CC);
                                        if (decode != NULL) {
-                                               phpdbg_writeln("print", "line=\"%u\" opline=\"%p\" opcode=\"%s\" op=\"%s\"", "\t\tL%u\t%p %-30s %s",
+                                               phpdbg_writeln("\t\tL%u\t%p %-30s %s", 
                                                        opline->lineno,
-                                                       opline,
+                                                       opline, 
                                                        phpdbg_decode_opcode(opline->opcode),
                                                        decode);
                                                free(decode);
                                        } else {
-                                               phpdbg_error("print", "type=\"decodefailure\" opline=\"%16p\"", "\tFailed to decode opline %16p", opline);
+                                               phpdbg_error("\tFailed to decode opline %16p", opline);
                                        }
                                        opline++;
                                } while (opcode++ < end);
@@ -98,9 +97,9 @@ static inline void phpdbg_print_function_helper(zend_function *method TSRMLS_DC)
 
                default: {
                        if (method->common.scope) {
-                               phpdbg_writeln("printoplineinfo", "type=\"Internal\" method=\"%s::%s\"", "Internal %s::%s()", method->common.scope->name, method->common.function_name);
+                               phpdbg_writeln("\tInternal %s::%s()", method->common.scope->name, method->common.function_name);
                        } else {
-                               phpdbg_writeln("printoplineinfo", "type=\"Internal\" function=\"%s\"", "\tInternal %s()", method->common.function_name);
+                               phpdbg_writeln("\tInternal %s()", method->common.function_name);
                        }
                }
        }
@@ -109,17 +108,17 @@ static inline void phpdbg_print_function_helper(zend_function *method TSRMLS_DC)
 PHPDBG_PRINT(exec) /* {{{ */
 {
        if (PHPDBG_G(exec)) {
-               if (!PHPDBG_G(ops) && !(PHPDBG_G(flags) & PHPDBG_IN_SIGNAL_HANDLER)) {
+               if (!PHPDBG_G(ops)) {
                        phpdbg_compile(TSRMLS_C);
                }
 
                if (PHPDBG_G(ops)) {
-                       phpdbg_notice("printinfo", "file=\"%s\" num=\"%d\"", "Context %s (%d ops)", PHPDBG_G(exec), PHPDBG_G(ops)->last);
+                       phpdbg_notice("Context %s", PHPDBG_G(exec));
 
                        phpdbg_print_function_helper((zend_function*) PHPDBG_G(ops) TSRMLS_CC);
                }
        } else {
-               phpdbg_error("inactive", "type=\"nocontext\"", "No execution context set");
+               phpdbg_error("No execution context set");
        }
 
 return SUCCESS;
@@ -128,24 +127,24 @@ return SUCCESS;
 PHPDBG_PRINT(stack) /* {{{ */
 {
        zend_op_array *ops = EG(active_op_array);
-
+       
        if (EG(in_execution) && ops) {
                if (ops->function_name) {
                        if (ops->scope) {
-                               phpdbg_notice("printinfo", "method=\"%s::%s\" num=\"%d\"", "Stack in %s::%s() (%d ops)", ops->scope->name, ops->function_name, ops->last);
+                               phpdbg_notice("Stack in %s::%s()", ops->scope->name, ops->function_name);
                        } else {
-                               phpdbg_notice("printinfo", "function=\"%s\" num=\"%d\"", "Stack in %s() (%d ops)", ops->function_name, ops->last);
+                               phpdbg_notice("Stack in %s()", ops->function_name);
                        }
                } else {
                        if (ops->filename) {
-                               phpdbg_notice("printinfo", "file=\"%s\" num=\"%d\"", "Stack in %s (%d ops)", ops->filename, ops->last);
+                               phpdbg_notice("Stack in %s", ops->filename);
                        } else {
-                               phpdbg_notice("printinfo", "opline=\"%p\" num=\"%d\"", "Stack @ %p (%d ops)", ops, ops->last);
+                               phpdbg_notice("Stack @ %p", ops);
                        }
                }
                phpdbg_print_function_helper((zend_function*) ops TSRMLS_CC);
        } else {
-               phpdbg_error("inactive", "type=\"execution\"", "Not Executing!");
+               phpdbg_error("Not Executing!");
        }
 
        return SUCCESS;
@@ -155,8 +154,8 @@ PHPDBG_PRINT(class) /* {{{ */
 {
        zend_class_entry **ce;
 
-       if (phpdbg_safe_class_lookup(param->str, param->len, &ce TSRMLS_CC) == SUCCESS) {
-               phpdbg_notice("printinfo", "type=\"%s\" flag=\"%s\" class=\"%s\" num=\"%d\"", "%s %s: %s (%d methods)",
+       if (zend_lookup_class(param->str, param->len, &ce TSRMLS_CC) == SUCCESS) {
+               phpdbg_notice("%s %s: %s",
                        ((*ce)->type == ZEND_USER_CLASS) ?
                                "User" : "Internal",
                        ((*ce)->ce_flags & ZEND_ACC_INTERFACE) ?
@@ -164,11 +163,9 @@ PHPDBG_PRINT(class) /* {{{ */
                                ((*ce)->ce_flags & ZEND_ACC_ABSTRACT) ?
                                        "Abstract Class" :
                                        "Class",
-                       (*ce)->name,
-                       zend_hash_num_elements(&(*ce)->function_table));
-
-               phpdbg_xml("<printmethods %r>");
+                       (*ce)->name);
 
+               phpdbg_writeln("Methods (%d):", zend_hash_num_elements(&(*ce)->function_table));
                if (zend_hash_num_elements(&(*ce)->function_table)) {
                        HashPosition position;
                        zend_function *method;
@@ -179,10 +176,8 @@ PHPDBG_PRINT(class) /* {{{ */
                                phpdbg_print_function_helper(method TSRMLS_CC);
                        }
                }
-
-               phpdbg_xml("</printmethods>");
        } else {
-               phpdbg_error("print", "type=\"noclass\" class=\"%s\"", "The class %s could not be found", param->str);
+               phpdbg_error("The class %s could not be found", param->str);
        }
 
        return SUCCESS;
@@ -192,24 +187,23 @@ PHPDBG_PRINT(method) /* {{{ */
 {
        zend_class_entry **ce;
 
-       if (phpdbg_safe_class_lookup(param->method.class, strlen(param->method.class), &ce TSRMLS_CC) == SUCCESS) {
+       if (zend_lookup_class(param->method.class, strlen(param->method.class), &ce TSRMLS_CC) == SUCCESS) {
                zend_function *fbc;
                char *lcname = zend_str_tolower_dup(param->method.name, strlen(param->method.name));
 
                if (zend_hash_find(&(*ce)->function_table, lcname, strlen(lcname)+1, (void**)&fbc) == SUCCESS) {
-                       phpdbg_notice("printinfo", "type=\"%s\" flags=\"Method\" symbol=\"%s\" num=\"%d\"", "%s Method %s (%d ops)",
+                       phpdbg_notice("%s Method %s",
                                (fbc->type == ZEND_USER_FUNCTION) ? "User" : "Internal",
-                               fbc->common.function_name,
-                               (fbc->type == ZEND_USER_FUNCTION) ? fbc->op_array.last : 0);
+                               fbc->common.function_name);
 
                        phpdbg_print_function_helper(fbc TSRMLS_CC);
                } else {
-                       phpdbg_error("print", "type=\"nomethod\" method=\"%s::%s\"", "The method %s::%s could not be found", param->method.class, param->method.name);
+                       phpdbg_error("The method %s could not be found", param->method.name);
                }
 
                efree(lcname);
        } else {
-               phpdbg_error("print", "type=\"noclass\" class=\"%s\"", "The class %s could not be found", param->method.class);
+               phpdbg_error("The class %s could not be found", param->method.class);
        }
 
        return SUCCESS;
@@ -230,33 +224,28 @@ PHPDBG_PRINT(func) /* {{{ */
 
                        func_table = &EG(scope)->function_table;
                } else {
-                       phpdbg_error("inactive", "type=\"noclasses\"", "No active class");
+                       phpdbg_error("No active class");
                        return SUCCESS;
                }
        } else if (!EG(function_table)) {
-               phpdbg_error("inactive", "type=\"function_table\"", "No function table loaded");
+               phpdbg_error("No function table loaded");
                return SUCCESS;
        } else {
                func_table = EG(function_table);
        }
 
-       lcname = zend_str_tolower_dup(func_name, func_name_len);
+       lcname  = zend_str_tolower_dup(func_name, func_name_len);
 
-       phpdbg_try_access {
-               if (zend_hash_find(func_table, lcname, func_name_len + 1, (void **) &fbc) == SUCCESS) {
-                       phpdbg_notice("printinfo", "type=\"%s\" flags=\"%s\" symbol=\"%s\" num=\"%d\"", "%s %s %s (%d ops)",
-                               (fbc->type == ZEND_USER_FUNCTION) ? "User" : "Internal",
-                               (fbc->common.scope) ? "Method" : "Function",
-                               fbc->common.function_name,
-                               (fbc->type == ZEND_USER_FUNCTION) ? fbc->op_array.last : 0);
+       if (zend_hash_find(func_table, lcname, strlen(lcname)+1, (void**)&fbc) == SUCCESS) {
+               phpdbg_notice("%s %s %s",
+                       (fbc->type == ZEND_USER_FUNCTION) ? "User" : "Internal",
+                       (fbc->common.scope) ? "Method" : "Function",
+                       fbc->common.function_name);
 
-                       phpdbg_print_function_helper(fbc TSRMLS_CC);
-               } else {
-                       phpdbg_error("print", "type=\"nofunction\" function=\"%s\"", "The function %s could not be found", func_name);
-               }
-       } phpdbg_catch_access {
-               phpdbg_error("signalsegv", "function=\"%.*s\"", "Couldn't fetch function %.*s, invalid data source", (int) func_name_len, func_name);
-       } phpdbg_end_try_access();
+               phpdbg_print_function_helper(fbc TSRMLS_CC);
+       } else {
+               phpdbg_error("The function %s could not be found", func_name);
+       }
 
        efree(lcname);
 
index f030654f3ba780d0850f4aa4bc869c060ee0da0e..d91ef3f3f5c89e4036fe0713baf47afac0827cab 100644 (file)
 #include "zend.h"
 #include "zend_compile.h"
 #include "phpdbg.h"
-
 #include "phpdbg_help.h"
 #include "phpdbg_print.h"
 #include "phpdbg_info.h"
 #include "phpdbg_break.h"
+#include "phpdbg_bp.h"
 #include "phpdbg_opcode.h"
 #include "phpdbg_list.h"
 #include "phpdbg_utils.h"
 #include "phpdbg_frame.h"
 #include "phpdbg_lexer.h"
 #include "phpdbg_parser.h"
-#include "phpdbg_wait.h"
-#include "phpdbg_eol.h"
-
-ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
-extern int phpdbg_startup_run;
-
-#ifdef HAVE_LIBDL
-#ifdef PHP_WIN32
-#include "win32/param.h"
-#include "win32/winutil.h"
-#define GET_DL_ERROR()  php_win_err()
-#elif defined(NETWARE)
-#include <sys/param.h>
-#define GET_DL_ERROR()  dlerror()
-#else
-#include <sys/param.h>
-#define GET_DL_ERROR()  DL_ERROR()
-#endif
-#endif
 
 /* {{{ command declarations */
 const phpdbg_command_t phpdbg_prompt_commands[] = {
-       PHPDBG_COMMAND_D(exec,    "set execution context",                    'e', NULL, "s", 0),
-       PHPDBG_COMMAND_D(step,    "step through execution",                   's', NULL, 0, PHPDBG_ASYNC_SAFE),
-       PHPDBG_COMMAND_D(continue,"continue execution",                       'c', NULL, 0, PHPDBG_ASYNC_SAFE),
-       PHPDBG_COMMAND_D(run,     "attempt execution",                        'r', NULL, "|s", 0),
-       PHPDBG_COMMAND_D(ev,      "evaluate some code",                        0 , NULL, "i", PHPDBG_ASYNC_SAFE), /* restricted ASYNC_SAFE */
-       PHPDBG_COMMAND_D(until,   "continue past the current line",           'u', NULL, 0, 0),
-       PHPDBG_COMMAND_D(finish,  "continue past the end of the stack",       'F', NULL, 0, 0),
-       PHPDBG_COMMAND_D(leave,   "continue until the end of the stack",      'L', NULL, 0, 0),
-       PHPDBG_COMMAND_D(print,   "print something",                          'p', phpdbg_print_commands, 0, 0),
-       PHPDBG_COMMAND_D(break,   "set breakpoint",                           'b', phpdbg_break_commands, "|*c", 0),
-       PHPDBG_COMMAND_D(back,    "show trace",                               't', NULL, "|n", PHPDBG_ASYNC_SAFE),
-       PHPDBG_COMMAND_D(frame,   "switch to a frame",                        'f', NULL, "|n", PHPDBG_ASYNC_SAFE),
-       PHPDBG_COMMAND_D(list,    "lists some code",                          'l', phpdbg_list_commands, "*", PHPDBG_ASYNC_SAFE),
-       PHPDBG_COMMAND_D(info,    "displays some informations",               'i', phpdbg_info_commands, "s", PHPDBG_ASYNC_SAFE),
-       PHPDBG_COMMAND_D(clean,   "clean the execution environment",          'X', NULL, 0, 0),
-       PHPDBG_COMMAND_D(clear,   "clear breakpoints",                        'C', NULL, 0, 0),
-       PHPDBG_COMMAND_D(help,    "show help menu",                           'h', phpdbg_help_commands, "|s", PHPDBG_ASYNC_SAFE),
-       PHPDBG_COMMAND_D(set,     "set phpdbg configuration",                 'S', phpdbg_set_commands,   "s", PHPDBG_ASYNC_SAFE),
-       PHPDBG_COMMAND_D(register,"register a function",                      'R', NULL, "s", 0),
-       PHPDBG_COMMAND_D(source,  "execute a phpdbginit",                     '<', NULL, "s", 0),
-       PHPDBG_COMMAND_D(export,  "export breaks to a .phpdbginit script",    '>', NULL, "s", PHPDBG_ASYNC_SAFE),
-       PHPDBG_COMMAND_D(sh,      "shell a command",                           0 , NULL, "i", 0),
-       PHPDBG_COMMAND_D(quit,    "exit phpdbg",                              'q', NULL, 0, PHPDBG_ASYNC_SAFE),
-#if PHPDBG_IN_DEV
-       PHPDBG_COMMAND_D(wait,    "wait for other process",                   'W', NULL, 0, 0),
-#endif
-       PHPDBG_COMMAND_D(watch,   "set watchpoint",                           'w', phpdbg_watch_commands, "|ss", 0),
-       PHPDBG_COMMAND_D(eol,     "set EOL",                                  'E', NULL, "|s", 0),
+       PHPDBG_COMMAND_D(exec,    "set execution context",                    'e', NULL, "s"),
+       PHPDBG_COMMAND_D(step,    "step through execution",                   's', NULL, 0),
+       PHPDBG_COMMAND_D(continue,"continue execution",                       'c', NULL, 0),
+       PHPDBG_COMMAND_D(run,     "attempt execution",                        'r', NULL, "|s"),
+       PHPDBG_COMMAND_D(ev,      "evaluate some code",                        0, NULL, "i"),
+       PHPDBG_COMMAND_D(until,   "continue past the current line",           'u', NULL, 0),
+       PHPDBG_COMMAND_D(finish,  "continue past the end of the stack",       'F', NULL, 0),
+       PHPDBG_COMMAND_D(leave,   "continue until the end of the stack",      'L', NULL, 0),
+       PHPDBG_COMMAND_D(print,   "print something",                          'p', phpdbg_print_commands, 0),
+       PHPDBG_COMMAND_D(break,   "set breakpoint",                           'b', phpdbg_break_commands, "|*c"),
+       PHPDBG_COMMAND_D(back,    "show trace",                               't', NULL, "|n"),
+       PHPDBG_COMMAND_D(frame,   "switch to a frame",                        'f', NULL, "|n"),
+       PHPDBG_COMMAND_D(list,    "lists some code",                          'l', phpdbg_list_commands, "*"),
+       PHPDBG_COMMAND_D(info,    "displays some informations",               'i', phpdbg_info_commands, "s"),
+       PHPDBG_COMMAND_D(clean,   "clean the execution environment",          'X', NULL, 0),
+       PHPDBG_COMMAND_D(clear,   "clear breakpoints",                        'C', NULL, 0),
+       PHPDBG_COMMAND_D(help,    "show help menu",                           'h', phpdbg_help_commands, "|s"),
+       PHPDBG_COMMAND_D(set,     "set phpdbg configuration",                 'S', phpdbg_set_commands,   "s"),
+       PHPDBG_COMMAND_D(register,"register a function",                      'R', NULL, "s"),
+       PHPDBG_COMMAND_D(source,  "execute a phpdbginit",                     '<', NULL, "s"),
+       PHPDBG_COMMAND_D(export,  "export breaks to a .phpdbginit script",    '>', NULL, "s"),
+       PHPDBG_COMMAND_D(sh,      "shell a command",                           0, NULL, "i"),
+       PHPDBG_COMMAND_D(quit,    "exit phpdbg",                              'q', NULL, 0),
+       PHPDBG_COMMAND_D(watch,   "set watchpoint",                           'w', phpdbg_watch_commands, "|ss"),
        PHPDBG_END_COMMAND
 }; /* }}} */
 
+ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
+
 static inline int phpdbg_call_register(phpdbg_param_t *stack TSRMLS_DC) /* {{{ */
 {
        phpdbg_param_t *name = NULL;
 
        if (stack->type == STACK_PARAM) {
-               char *lc_name;
-
                name = stack->next;
-
+               
                if (!name || name->type != STR_PARAM) {
                        return FAILURE;
                }
+               
+               if (zend_hash_exists(
+                               &PHPDBG_G(registered), name->str, name->len+1)) {
 
-               lc_name = zend_str_tolower_dup(name->str, name->len);
-
-               if (zend_hash_exists(&PHPDBG_G(registered), lc_name, name->len+1)) {
                        zval fname, *fretval;
                        zend_fcall_info fci;
 
-                       ZVAL_STRINGL(&fname, lc_name, name->len, 1);
+                       ZVAL_STRINGL(&fname, name->str, name->len, 1);
 
                        memset(&fci, 0, sizeof(zend_fcall_info));
 
@@ -124,59 +101,62 @@ static inline int phpdbg_call_register(phpdbg_param_t *stack TSRMLS_DC) /* {{{ *
                        if (name->next) {
                                zval params;
                                phpdbg_param_t *next = name->next;
-
+                               
                                array_init(&params);
 
                                while (next) {
                                        char *buffered = NULL;
-
+                                       
                                        switch (next->type) {
                                                case OP_PARAM:
                                                case COND_PARAM:
                                                case STR_PARAM:
-                                                       add_next_index_stringl(&params, next->str, next->len, 1);
+                                                       add_next_index_stringl(
+                                                               &params,
+                                                               next->str,
+                                                               next->len, 1);
                                                break;
-
+                                               
                                                case NUMERIC_PARAM:
                                                        add_next_index_long(&params, next->num);
                                                break;
-
+                                               
                                                case METHOD_PARAM:
                                                        spprintf(&buffered, 0, "%s::%s",
                                                                next->method.class, next->method.name);
                                                        add_next_index_string(&params, buffered, 0);
                                                break;
-
+                                               
                                                case NUMERIC_METHOD_PARAM:
                                                        spprintf(&buffered, 0, "%s::%s#%ld",
                                                                next->method.class, next->method.name, next->num);
                                                        add_next_index_string(&params, buffered, 0);
                                                break;
-
+                                               
                                                case NUMERIC_FUNCTION_PARAM:
                                                        spprintf(&buffered, 0, "%s#%ld",
                                                                next->str, next->num);
                                                        add_next_index_string(&params, buffered, 0);
                                                break;
-
+                                                       
                                                case FILE_PARAM:
-                                                       spprintf(&buffered, 0, "%s:%ld",
+                                                       spprintf(&buffered, 0, "%s:%ld", 
                                                                next->file.name, next->file.line);
                                                        add_next_index_string(&params, buffered, 0);
                                                break;
-
+                                               
                                                case NUMERIC_FILE_PARAM:
-                                                       spprintf(&buffered, 0, "%s:#%ld",
+                                                       spprintf(&buffered, 0, "%s:#%ld", 
                                                                next->file.name, next->file.line);
                                                        add_next_index_string(&params, buffered, 0);
                                                break;
-
+                                               
                                                default: {
                                                        /* not yet */
                                                }
                                        }
-
-                                       next = next->next;
+                                       
+                                       next = next->next;      
                                }
 
                                zend_fcall_info_args(&fci, &params TSRMLS_CC);
@@ -185,157 +165,125 @@ static inline int phpdbg_call_register(phpdbg_param_t *stack TSRMLS_DC) /* {{{ *
                                fci.param_count = 0;
                        }
 
-                       phpdbg_activate_err_buf(0 TSRMLS_CC);
-                       phpdbg_free_err_buf(TSRMLS_C);
-
-                       phpdbg_debug("created %d params from arguments", fci.param_count);
+                       phpdbg_debug(
+                               "created %d params from arguments",
+                               fci.param_count);
 
                        zend_call_function(&fci, NULL TSRMLS_CC);
 
                        if (fretval) {
-                               zend_print_zval_r(fretval, 0 TSRMLS_CC);
-                               phpdbg_out("\n");
+                               zend_print_zval_r(
+                                       fretval, 0 TSRMLS_CC);
+                               phpdbg_writeln(EMPTY);
                        }
 
                        zval_dtor(&fname);
-                       efree(lc_name);
 
                        return SUCCESS;
-               }
-
-               efree(lc_name);
+               }       
        }
 
        return FAILURE;
 } /* }}} */
 
-struct phpdbg_init_state {
-       int line;
-       zend_bool in_code;
-       char *code;
-       size_t code_len;
-       const char *init_file;
-};
-
-static void phpdbg_line_init(char *cmd, struct phpdbg_init_state *state TSRMLS_DC) {
-       size_t cmd_len = strlen(cmd);
-
-       state->line++;
-
-       while (cmd_len > 0L && isspace(cmd[cmd_len-1])) {
-               cmd_len--;
-       }
-
-       cmd[cmd_len] = '\0';
-
-       if (*cmd && cmd_len > 0L && cmd[0] != '#') {
-               if (cmd_len == 2) {
-                       if (memcmp(cmd, "<:", sizeof("<:")-1) == SUCCESS) {
-                               state->in_code = 1;
-                               return;
-                       } else {
-                               if (memcmp(cmd, ":>", sizeof(":>")-1) == SUCCESS) {
-                                       state->in_code = 0;
-                                       state->code[state->code_len] = '\0';
-                                       zend_eval_stringl(state->code, state->code_len, NULL, "phpdbginit code" TSRMLS_CC);
-                                       free(state->code);
-                                       state->code = NULL;
-                                       return;
-                               }
-                       }
-               }
-
-               if (state->in_code) {
-                       if (state->code == NULL) {
-                               state->code = malloc(cmd_len + 1);
-                       } else {
-                               state->code = realloc(state->code, state->code_len + cmd_len + 1);
-                       }
-
-                       if (state->code) {
-                               memcpy(&state->code[state->code_len], cmd, cmd_len);
-                               state->code_len += cmd_len;
-                       }
-
-                       return;
-               }
-
-               zend_try {
-                       char *input = phpdbg_read_input(cmd TSRMLS_CC);
-                       phpdbg_param_t stack;
-
-                       phpdbg_init_param(&stack, STACK_PARAM);
-
-                       phpdbg_activate_err_buf(1 TSRMLS_CC);
-
-                       if (phpdbg_do_parse(&stack, input TSRMLS_CC) <= 0) {
-                               switch (phpdbg_stack_execute(&stack, 1 /* allow_async_unsafe == 1 */ TSRMLS_CC)) {
-                                       case FAILURE:
-                                               phpdbg_activate_err_buf(0 TSRMLS_CC);
-                                               if (phpdbg_call_register(&stack TSRMLS_CC) == FAILURE) {
-                                                       if (state->init_file) {
-                                                               phpdbg_output_err_buf("initfailure", "%b file=\"%s\" line=\"%d\" input=\"%s\"", "Unrecognized command in %s:%d: %s, %b!" TSRMLS_CC, state->init_file, state->line, input);
-                                                       } else {
-                                                               phpdbg_output_err_buf("initfailure", "%b line=\"%d\" input=\"%s\"", "Unrecognized command on line %d: %s, %b!" TSRMLS_CC, state->line, input);
-                                                       }
-                                               }
-                                       break;
-                               }
-                       }
-
-                       phpdbg_activate_err_buf(0 TSRMLS_CC);
-                       phpdbg_free_err_buf(TSRMLS_C);
-
-                       phpdbg_stack_free(&stack);
-                       phpdbg_destroy_input(&input TSRMLS_CC);
-               } zend_catch {
-                       PHPDBG_G(flags) &= ~(PHPDBG_IS_RUNNING | PHPDBG_IS_CLEANING);
-                       if (PHPDBG_G(flags) & PHPDBG_IS_QUITTING) {
-                               zend_bailout();
-                       }
-               } zend_end_try();
-       }
-
-}
-
-void phpdbg_string_init(char *buffer TSRMLS_DC) {
-       struct phpdbg_init_state state = {0};
-       char *str = strtok(buffer, "\n");
-
-       while (str) {
-               phpdbg_line_init(str, &state TSRMLS_CC);
-
-               str = strtok(NULL, "\n");
-       }
-
-       if (state.code) {
-               free(state.code);
-       }
-}
-
 void phpdbg_try_file_init(char *init_file, size_t init_file_len, zend_bool free_init TSRMLS_DC) /* {{{ */
 {
        struct stat sb;
-
+       
        if (init_file && VCWD_STAT(init_file, &sb) != -1) {
                FILE *fp = fopen(init_file, "r");
                if (fp) {
-                       char cmd[PHPDBG_MAX_CMD];
-                       struct phpdbg_init_state state = {0};
+                       int line = 1;
 
-                       state.init_file = init_file;
+                       char cmd[PHPDBG_MAX_CMD];
+                       size_t cmd_len = 0L;
+                       char *code = NULL;
+                       size_t code_len = 0L;
+                       zend_bool in_code = 0;
 
                        while (fgets(cmd, PHPDBG_MAX_CMD, fp) != NULL) {
-                               phpdbg_line_init(cmd, &state TSRMLS_CC);
+                               cmd_len = strlen(cmd)-1;
+
+                               while (cmd_len > 0L && isspace(cmd[cmd_len-1]))
+                                       cmd_len--;
+
+                               cmd[cmd_len] = '\0';
+
+                               if (*cmd && cmd_len > 0L && cmd[0] != '#') {
+                                       if (cmd_len == 2) {
+                                               if (memcmp(cmd, "<:", sizeof("<:")-1) == SUCCESS) {
+                                                       in_code = 1;
+                                                       goto next_line;
+                                               } else {
+                                                       if (memcmp(cmd, ":>", sizeof(":>")-1) == SUCCESS) {
+                                                               in_code = 0;
+                                                               code[code_len] = '\0';
+                                                               {
+                                                                       zend_eval_stringl(
+                                                                               code, code_len, NULL, "phpdbginit code" TSRMLS_CC);
+                                                               }
+                                                               free(code);
+                                                               code = NULL;
+                                                               goto next_line;
+                                                       }
+                                               }
+                                       }
+
+                                       if (in_code) {
+                                               if (code == NULL) {
+                                                       code = malloc(cmd_len + 1);
+                                               } else code = realloc(code, code_len + cmd_len + 1);
+
+                                               if (code) {
+                                                       memcpy(
+                                                               &code[code_len], cmd, cmd_len);
+                                                       code_len += cmd_len;
+                                               }
+                                               goto next_line;
+                                       }
+
+                                       {
+                                               char *why = NULL;
+                                               char *input = phpdbg_read_input(cmd TSRMLS_CC);
+                                               phpdbg_param_t stack;
+
+                                               phpdbg_init_param(&stack, STACK_PARAM);
+
+                                               if (phpdbg_do_parse(&stack, input TSRMLS_CC) <= 0) {
+                                                       switch (phpdbg_stack_execute(&stack, &why TSRMLS_CC)) {
+                                                               case FAILURE:
+//                                                                     if (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) {
+                                                                               if (phpdbg_call_register(&stack TSRMLS_CC) == FAILURE) {
+                                                                                       phpdbg_error(
+                                                                                               "Unrecognized command in %s:%d: %s, %s!", 
+                                                                                               init_file, line, input, why);
+                                                                               }
+//                                                                     }
+                                                               break;
+                                                       }
+                                               }
+
+                                               if (why) {
+                                                       free(why);
+                                                       why = NULL;
+                                               }
+
+                                               phpdbg_stack_free(&stack);
+                                               phpdbg_destroy_input(&input TSRMLS_CC);
+                                       }
+                               }
+next_line:
+                               line++;
                        }
 
-                       if (state.code) {
-                               free(state.code);
+                       if (code) {
+                               free(code);
                        }
 
                        fclose(fp);
                } else {
-                       phpdbg_error("initfailure", "type=\"openfile\" file=\"%s\"", "Failed to open %s for initialization", init_file);
+                       phpdbg_error(
+                               "Failed to open %s for initialization", init_file);
                }
 
                if (free_init) {
@@ -367,7 +315,8 @@ void phpdbg_init(char *init_file, size_t init_file_len, zend_bool use_default TS
                                scan_dir[i] = 0;
                        }
 
-                       asprintf(&init_file, "%s/%s", scan_dir, PHPDBG_INIT_FILENAME);
+                       asprintf(
+                               &init_file, "%s/%s", scan_dir, PHPDBG_INIT_FILENAME);
                        phpdbg_try_file_init(init_file, strlen(init_file), 1 TSRMLS_CC);
                        if (i == -1) {
                                break;
@@ -391,47 +340,38 @@ PHPDBG_COMMAND(exec) /* {{{ */
                        size_t res_len = strlen(res);
 
                        if ((res_len != PHPDBG_G(exec_len)) || (memcmp(res, PHPDBG_G(exec), res_len) != SUCCESS)) {
-                               if (EG(in_execution)) {
-                                       if (phpdbg_ask_user_permission("Do you really want to stop execution to set a new execution context?" TSRMLS_CC) == FAILURE) {
-                                               return FAILURE;
-                                       }
-                               }
 
                                if (PHPDBG_G(exec)) {
-                                       phpdbg_notice("exec", "type=\"unset\" context=\"%s\"", "Unsetting old execution context: %s", PHPDBG_G(exec));
+                                       phpdbg_notice("Unsetting old execution context: %s", PHPDBG_G(exec));
                                        efree(PHPDBG_G(exec));
                                        PHPDBG_G(exec) = NULL;
                                        PHPDBG_G(exec_len) = 0L;
                                }
 
                                if (PHPDBG_G(ops)) {
-                                       phpdbg_notice("exec", "type=\"unsetops\"", "Destroying compiled opcodes");
+                                       phpdbg_notice("Destroying compiled opcodes");
                                        phpdbg_clean(0 TSRMLS_CC);
                                }
 
                                PHPDBG_G(exec) = res;
                                PHPDBG_G(exec_len) = res_len;
-
-                               VCWD_CHDIR_FILE(res);
-
+                               
                                *SG(request_info).argv = PHPDBG_G(exec);
                                php_hash_environment(TSRMLS_C);
 
-                               phpdbg_notice("exec", "type=\"set\" context=\"%s\"", "Set execution context: %s", PHPDBG_G(exec));
+                               phpdbg_notice("Set execution context: %s", PHPDBG_G(exec));
 
-                               if (EG(in_execution)) {
-                                       phpdbg_clean(1 TSRMLS_CC);
+                               if (phpdbg_compile(TSRMLS_C) == FAILURE) {
+                                       phpdbg_error("Failed to compile %s", PHPDBG_G(exec));
                                }
-
-                               phpdbg_compile(TSRMLS_C);
                        } else {
-                               phpdbg_notice("exec", "type=\"unchanged\"", "Execution context not changed");
+                               phpdbg_notice("Execution context not changed");
                        }
                } else {
-                       phpdbg_error("exec", "type=\"invalid\" context=\"%s\"", "Cannot use %s as execution context, not a valid file or symlink", param->str);
+                       phpdbg_error("Cannot use %s as execution context, not a valid file or symlink", param->str);
                }
        } else {
-               phpdbg_error("exec", "type=\"notfound\" context=\"%s\"", "Cannot stat %s, ensure the file exists", param->str);
+               phpdbg_error("Cannot stat %s, ensure the file exists", param->str);
        }
        return SUCCESS;
 } /* }}} */
@@ -441,19 +381,27 @@ int phpdbg_compile(TSRMLS_D) /* {{{ */
        zend_file_handle fh;
 
        if (!PHPDBG_G(exec)) {
-               phpdbg_error("inactive", "type=\"nocontext\"", "No execution context");
+               phpdbg_error("No execution context");
+               return SUCCESS;
+       }
+
+       if (EG(in_execution)) {
+               phpdbg_error("Cannot compile while in execution");
                return FAILURE;
        }
 
-       if (php_stream_open_for_zend_ex(PHPDBG_G(exec), &fh, USE_PATH|STREAM_OPEN_FOR_INCLUDE TSRMLS_CC) == SUCCESS) {
+       phpdbg_notice("Attempting compilation of %s", PHPDBG_G(exec));
+
+       if (php_stream_open_for_zend_ex(PHPDBG_G(exec), &fh,
+               USE_PATH|STREAM_OPEN_FOR_INCLUDE TSRMLS_CC) == SUCCESS) {
+
                PHPDBG_G(ops) = zend_compile_file(&fh, ZEND_INCLUDE TSRMLS_CC);
                zend_destroy_file_handle(&fh TSRMLS_CC);
 
-               phpdbg_notice("compile", "context=\"%s\"", "Successful compilation of %s", PHPDBG_G(exec));
-
+               phpdbg_notice("Success");
                return SUCCESS;
        } else {
-               phpdbg_error("compile", "type=\"openfailure\" context=\"%s\"", "Could not open file %s", PHPDBG_G(exec));
+               phpdbg_error("Could not open file %s", PHPDBG_G(exec));
        }
 
        return FAILURE;
@@ -476,18 +424,23 @@ PHPDBG_COMMAND(continue) /* {{{ */
 PHPDBG_COMMAND(until) /* {{{ */
 {
        if (!EG(in_execution)) {
-               phpdbg_error("inactive", "type=\"noexec\"", "Not executing");
+               phpdbg_error("Not executing");
                return SUCCESS;
        }
 
        PHPDBG_G(flags) |= PHPDBG_IN_UNTIL;
        {
-               zend_uint next = 0, self = (EG(current_execute_data)->opline - EG(active_op_array)->opcodes);
+               zend_uint next = 0,
+                                 self = (EG(current_execute_data)->opline - EG(active_op_array)->opcodes);
                zend_op  *opline = &EG(active_op_array)->opcodes[self];
 
                for (next = self; next < EG(active_op_array)->last; next++) {
                        if (EG(active_op_array)->opcodes[next].lineno != opline->lineno) {
-                               zend_hash_index_update(&PHPDBG_G(seek), (zend_ulong) &EG(active_op_array)->opcodes[next], &EG(active_op_array)->opcodes[next], sizeof(zend_op), NULL);
+                               zend_hash_index_update(
+                                       &PHPDBG_G(seek),
+                                       (zend_ulong) &EG(active_op_array)->opcodes[next],
+                                       &EG(active_op_array)->opcodes[next],
+                                       sizeof(zend_op), NULL);
                                break;
                        }
                }
@@ -499,13 +452,14 @@ PHPDBG_COMMAND(until) /* {{{ */
 PHPDBG_COMMAND(finish) /* {{{ */
 {
        if (!EG(in_execution)) {
-               phpdbg_error("inactive", "type=\"noexec\"", "Not executing");
+               phpdbg_error("Not executing");
                return SUCCESS;
        }
 
        PHPDBG_G(flags) |= PHPDBG_IN_FINISH;
        {
-               zend_uint next = 0, self = (EG(current_execute_data)->opline - EG(active_op_array)->opcodes);
+               zend_uint next = 0,
+                                 self = (EG(current_execute_data)->opline - EG(active_op_array)->opcodes);
 
                for (next = self; next < EG(active_op_array)->last; next++) {
                        switch (EG(active_op_array)->opcodes[next].opcode) {
@@ -515,7 +469,11 @@ PHPDBG_COMMAND(finish) /* {{{ */
 #ifdef ZEND_YIELD
                                case ZEND_YIELD:
 #endif
-                                       zend_hash_index_update(&PHPDBG_G(seek), (zend_ulong) &EG(active_op_array)->opcodes[next], &EG(active_op_array)->opcodes[next], sizeof(zend_op), NULL);
+                                       zend_hash_index_update(
+                                               &PHPDBG_G(seek),
+                                               (zend_ulong) &EG(active_op_array)->opcodes[next],
+                                               &EG(active_op_array)->opcodes[next],
+                                               sizeof(zend_op), NULL);
                                break;
                        }
                }
@@ -527,13 +485,14 @@ PHPDBG_COMMAND(finish) /* {{{ */
 PHPDBG_COMMAND(leave) /* {{{ */
 {
        if (!EG(in_execution)) {
-               phpdbg_error("inactive", "type=\"noexec\"", "Not executing");
+               phpdbg_error("Not executing");
                return SUCCESS;
        }
 
        PHPDBG_G(flags) |= PHPDBG_IN_LEAVE;
        {
-               zend_uint next = 0, self = (EG(current_execute_data)->opline - EG(active_op_array)->opcodes);
+               zend_uint next = 0,
+                                 self = (EG(current_execute_data)->opline - EG(active_op_array)->opcodes);
 
                for (next = self; next < EG(active_op_array)->last; next++) {
                        switch (EG(active_op_array)->opcodes[next].opcode) {
@@ -543,7 +502,11 @@ PHPDBG_COMMAND(leave) /* {{{ */
 #ifdef ZEND_YIELD
                                case ZEND_YIELD:
 #endif
-                                       zend_hash_index_update(&PHPDBG_G(seek), (zend_ulong) &EG(active_op_array)->opcodes[next], &EG(active_op_array)->opcodes[next], sizeof(zend_op), NULL);
+                                       zend_hash_index_update(
+                                               &PHPDBG_G(seek),
+                                               (zend_ulong) &EG(active_op_array)->opcodes[next],
+                                               &EG(active_op_array)->opcodes[next],
+                                               sizeof(zend_op), NULL);
                                break;
                        }
                }
@@ -555,10 +518,8 @@ PHPDBG_COMMAND(leave) /* {{{ */
 PHPDBG_COMMAND(frame) /* {{{ */
 {
        if (!param) {
-               phpdbg_notice("frame", "id=\"%d\"", "Currently in frame #%d", PHPDBG_G(frame).num);
-       } else {
-               phpdbg_switch_frame(param->num TSRMLS_CC);
-       }
+               phpdbg_notice("Currently in frame #%d", PHPDBG_G(frame).num);
+       } else phpdbg_switch_frame(param->num TSRMLS_CC);
 
        return SUCCESS;
 } /* }}} */
@@ -567,7 +528,9 @@ static inline void phpdbg_handle_exception(TSRMLS_D) /* }}} */
 {
        zend_fcall_info fci;
 
-       zval fname, *trace, exception;
+       zval fname,
+                *trace,
+                exception;
 
        /* get filename and linenumber before unsetting exception */
        const char *filename = zend_get_executed_filename(TSRMLS_C);
@@ -578,6 +541,10 @@ static inline void phpdbg_handle_exception(TSRMLS_D) /* }}} */
        zval_copy_ctor(&exception);
        EG(exception) = NULL;
 
+       phpdbg_error(
+               "Uncaught %s!",
+               Z_OBJCE(exception)->name);
+
        /* call __toString */
        ZVAL_STRINGL(&fname, "__tostring", sizeof("__tostring")-1, 1);
        fci.size = sizeof(fci);
@@ -592,15 +559,16 @@ static inline void phpdbg_handle_exception(TSRMLS_D) /* }}} */
        zend_call_function(&fci, NULL TSRMLS_CC);
 
        if (trace) {
-               phpdbg_writeln("exception", "name=\"%s\" trace=\"%.*s\"", "Uncaught %s!\n%.*s", Z_OBJCE(exception)->name, Z_STRLEN_P(trace), Z_STRVAL_P(trace));
-
+               phpdbg_writeln(
+                       "Uncaught %s", Z_STRVAL_P(trace));
+               /* remember to dtor trace */
                zval_ptr_dtor(&trace);
-       } else {
-               phpdbg_error("exception", "name=\"%s\"", "Uncaught %s!", Z_OBJCE(exception)->name);
        }
 
        /* output useful information about address */
-       phpdbg_writeln("exception", "opline=\"%p\" file=\"%s\" line=\"%u\"", "Stack entered at %p in %s on line %u", EG(active_op_array)->opcodes, filename, lineno);
+       phpdbg_writeln(
+               "Stacked entered at %p in %s on line %u",
+               EG(active_op_array)->opcodes, filename, lineno);
 
        zval_dtor(&fname);
        zval_dtor(&exception);
@@ -608,24 +576,21 @@ static inline void phpdbg_handle_exception(TSRMLS_D) /* }}} */
 
 PHPDBG_COMMAND(run) /* {{{ */
 {
+       if (EG(in_execution)) {
+               phpdbg_error("Cannot start another execution while one is in progress");
+               return SUCCESS;
+       }
+
        if (PHPDBG_G(ops) || PHPDBG_G(exec)) {
                zend_op **orig_opline = EG(opline_ptr);
                zend_op_array *orig_op_array = EG(active_op_array);
                zval **orig_retval_ptr = EG(return_value_ptr_ptr);
                zend_bool restore = 1;
                zend_execute_data *ex = EG(current_execute_data);
-
-               if (EG(in_execution)) {
-                       if (phpdbg_ask_user_permission("Do you really want to restart execution?" TSRMLS_CC) == SUCCESS) {
-                               phpdbg_startup_run++;
-                               phpdbg_clean(1 TSRMLS_CC);
-                       }
-                       return SUCCESS;
-               }
-
+               
                if (!PHPDBG_G(ops)) {
                        if (phpdbg_compile(TSRMLS_C) == FAILURE) {
-                               phpdbg_error("compile", "type=\"compilefailure\" context=\"%s\"", "Failed to compile %s, cannot run", PHPDBG_G(exec));
+                               phpdbg_error("Failed to compile %s, cannot run", PHPDBG_G(exec));
                                goto out;
                        }
                }
@@ -654,7 +619,7 @@ PHPDBG_COMMAND(run) /* {{{ */
                        int argc = 0;
                        int i;
                        char *argv_str = strtok(param->str, " ");
-
+                       
                        while (argv_str) {
                                if (argc >= 4 && argc == (argc & -argc)) {
                                        argv = erealloc(argv, (argc * 2 + 1) * sizeof(char *));
@@ -670,35 +635,27 @@ PHPDBG_COMMAND(run) /* {{{ */
                        efree(SG(request_info).argv);
                        SG(request_info).argv = erealloc(argv, ++argc * sizeof(char *));
                        SG(request_info).argc = argc;
-
+                       
                        php_hash_environment(TSRMLS_C);
                }
 
                zend_try {
-                       PHPDBG_G(flags) &= ~PHPDBG_IS_INTERACTIVE;
-                       PHPDBG_G(flags) |= PHPDBG_IS_RUNNING;
+                       php_output_activate(TSRMLS_C);
+                       PHPDBG_G(flags) ^= PHPDBG_IS_INTERACTIVE;
                        zend_execute(EG(active_op_array) TSRMLS_CC);
-                       PHPDBG_G(flags) |= PHPDBG_IS_INTERACTIVE;
+                       PHPDBG_G(flags) ^= PHPDBG_IS_INTERACTIVE;
+                       php_output_deactivate(TSRMLS_C);
                } zend_catch {
                        EG(active_op_array) = orig_op_array;
                        EG(opline_ptr) = orig_opline;
                        EG(return_value_ptr_ptr) = orig_retval_ptr;
 
-                       if (PHPDBG_G(flags) & PHPDBG_IS_QUITTING) {
-                               zend_bailout();
-                       }
-
-                       if (!(PHPDBG_G(flags) & PHPDBG_IS_STOPPING)) {
-                               phpdbg_error("stop", "type=\"bailout\"", "Caught exit/error from VM");
+                       if (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) {
+                               phpdbg_error("Caught exit/error from VM");
                                restore = 0;
                        }
                } zend_end_try();
 
-               if (PHPDBG_G(socket_fd) != -1) {
-                       close(PHPDBG_G(socket_fd));
-                       PHPDBG_G(socket_fd) = -1;
-               }
-
                if (restore) {
                        if (EG(exception)) {
                                phpdbg_handle_exception(TSRMLS_C);
@@ -708,12 +665,8 @@ PHPDBG_COMMAND(run) /* {{{ */
                        EG(opline_ptr) = orig_opline;
                        EG(return_value_ptr_ptr) = orig_retval_ptr;
                }
-
-               phpdbg_clean(1 TSRMLS_CC);
-
-               PHPDBG_G(flags) &= ~PHPDBG_IS_RUNNING;
        } else {
-               phpdbg_error("inactive", "type=\"nocontext\"", "Nothing to execute!");
+               phpdbg_error("Nothing to execute!");
        }
 
 out:
@@ -721,94 +674,43 @@ out:
        return SUCCESS;
 } /* }}} */
 
-int phpdbg_output_ev_variable(char *name, size_t len, char *keyname, size_t keylen, HashTable *parent, zval **zv TSRMLS_DC) {
-       phpdbg_notice("eval", "variable=\"%.*s\"", "Printing variable %.*s", (int) len, name);
-       phpdbg_xml("<eval %r>");
-       zend_print_zval_r(*zv, 0 TSRMLS_CC);
-       phpdbg_xml("</eval>");
-       phpdbg_out("\n");
-
-       efree(name);
-       efree(keyname);
-
-       return SUCCESS;
-}
-
 PHPDBG_COMMAND(ev) /* {{{ */
 {
-       zend_bool stepping = ((PHPDBG_G(flags) & PHPDBG_IS_STEPPING) == PHPDBG_IS_STEPPING);
+       zend_bool stepping = ((PHPDBG_G(flags) & PHPDBG_IS_STEPPING)==PHPDBG_IS_STEPPING);
        zval retval;
 
-       zend_op **orig_opline = EG(opline_ptr);
-       zend_op_array *orig_op_array = EG(active_op_array);
-       zval **orig_retval_ptr = EG(return_value_ptr_ptr);
-       zend_execute_data *ex = EG(current_execute_data);
-       HashTable *original_active_symbol_table = EG(active_symbol_table);
-       zval *original_This = EG(This);
-       zend_class_entry *original_scope = EG(scope);
-       zend_class_entry *original_called_scope = EG(called_scope);
-       zend_vm_stack original_stack = EG(argument_stack);
-
-       PHPDBG_OUTPUT_BACKUP();
-
-       if (PHPDBG_G(flags) & PHPDBG_IN_SIGNAL_HANDLER) {
-               phpdbg_try_access {
-                       phpdbg_parse_variable(param->str, param->len, &EG(symbol_table), 0, phpdbg_output_ev_variable, 0 TSRMLS_CC);
-               } phpdbg_catch_access {
-                       phpdbg_error("signalsegv", "", "Could not fetch data, invalid data source");
-               } phpdbg_end_try_access();
-
-               PHPDBG_OUTPUT_BACKUP_RESTORE();
-               return SUCCESS;
-       }
-
        if (!(PHPDBG_G(flags) & PHPDBG_IS_STEPONEVAL)) {
-               PHPDBG_G(flags) &= ~PHPDBG_IS_STEPPING;
+               PHPDBG_G(flags) &= ~ PHPDBG_IS_STEPPING;
        }
 
        /* disable stepping while eval() in progress */
        PHPDBG_G(flags) |= PHPDBG_IN_EVAL;
        zend_try {
-               if (zend_eval_stringl(param->str, param->len,&retval, "eval()'d code" TSRMLS_CC) == SUCCESS) {
-                       phpdbg_xml("<eval %r>");
-                       if (PHPDBG_G(flags) & PHPDBG_WRITE_XML) {
-                               zval *zvp = &retval;
-                               phpdbg_xml_var_dump(&zvp TSRMLS_CC);
-                       }
-                       zend_print_zval_r(&retval, 0 TSRMLS_CC);
-                       phpdbg_xml("</eval>");
-                       phpdbg_out("\n");
+               if (zend_eval_stringl(param->str, param->len,
+                       &retval, "eval()'d code" TSRMLS_CC) == SUCCESS) {
+                       zend_print_zval_r(
+                               &retval, 0 TSRMLS_CC);
+                       phpdbg_writeln(EMPTY);
                        zval_dtor(&retval);
                }
-       } zend_catch {
-               EG(active_op_array) = orig_op_array;
-               EG(opline_ptr) = orig_opline;
-               EG(return_value_ptr_ptr) = orig_retval_ptr;
-               EG(current_execute_data) = ex;
-               EG(active_symbol_table) = original_active_symbol_table;
-               EG(This) = original_This;
-               EG(scope) = original_scope;
-               EG(called_scope) = original_called_scope;
-               EG(argument_stack) = original_stack;
        } zend_end_try();
        PHPDBG_G(flags) &= ~PHPDBG_IN_EVAL;
 
        /* switch stepping back on */
-       if (stepping && !(PHPDBG_G(flags) & PHPDBG_IS_STEPONEVAL)) {
+       if (stepping &&
+               !(PHPDBG_G(flags) & PHPDBG_IS_STEPONEVAL)) {
                PHPDBG_G(flags) |= PHPDBG_IS_STEPPING;
        }
 
        CG(unclean_shutdown) = 0;
 
-       PHPDBG_OUTPUT_BACKUP_RESTORE();
-
        return SUCCESS;
 } /* }}} */
 
 PHPDBG_COMMAND(back) /* {{{ */
 {
        if (!EG(in_execution)) {
-               phpdbg_error("inactive", "type=\"noexec\"", "Not executing!");
+               phpdbg_error("Not executing!");
                return SUCCESS;
        }
 
@@ -823,54 +725,62 @@ PHPDBG_COMMAND(back) /* {{{ */
 
 PHPDBG_COMMAND(print) /* {{{ */
 {
-       phpdbg_out("Execution Context Information\n\n");
-       phpdbg_xml("<printinfo %r>");
+       phpdbg_writeln(SEPARATE);
+       phpdbg_notice("Execution Context Information");
 #ifdef HAVE_LIBREADLINE
-       phpdbg_writeln("print", "readline=\"yes\"", "Readline   yes");
+       phpdbg_writeln("Readline\tyes");
 #else
-       phpdbg_writeln("print", "readline=\"no\"", "Readline   no");
+       phpdbg_writeln("Readline\tno");
 #endif
 #ifdef HAVE_LIBEDIT
-       phpdbg_writeln("print", "libedit=\"yes\"", "Libedit    yes");
+       phpdbg_writeln("Libedit\t\tyes");
 #else
-       phpdbg_writeln("print", "libedit=\"no\"", "Libedit    no");
+       phpdbg_writeln("Libedit\t\tno");
 #endif
 
-       phpdbg_writeln("print", "context=\"%s\"", "Exec       %s", PHPDBG_G(exec) ? PHPDBG_G(exec) : "none");
-       phpdbg_writeln("print", "compiled=\"%s\"", "Compiled   %s", PHPDBG_G(ops) ? "yes" : "no");
-       phpdbg_writeln("print", "stepping=\"%s\"", "Stepping   %s", (PHPDBG_G(flags) & PHPDBG_IS_STEPPING) ? "on" : "off");
-       phpdbg_writeln("print", "quiet=\"%s\"", "Quietness  %s", (PHPDBG_G(flags) & PHPDBG_IS_QUIET) ? "on" : "off");
-       phpdbg_writeln("print", "oplog=\"%s\"", "Oplog      %s", PHPDBG_G(oplog) ? "on" : "off");
+       phpdbg_writeln("Exec\t\t%s", PHPDBG_G(exec) ? PHPDBG_G(exec) : "none");
+       phpdbg_writeln("Compiled\t%s", PHPDBG_G(ops) ? "yes" : "no");
+       phpdbg_writeln("Stepping\t%s", (PHPDBG_G(flags) & PHPDBG_IS_STEPPING) ? "on" : "off");
+       phpdbg_writeln("Quietness\t%s", (PHPDBG_G(flags) & PHPDBG_IS_QUIET) ? "on" : "off");
+       phpdbg_writeln("Oplog\t\t%s", PHPDBG_G(oplog) ? "on" : "off");
 
        if (PHPDBG_G(ops)) {
-               phpdbg_writeln("print", "ops=\"%d\"", "Opcodes    %d", PHPDBG_G(ops)->last);
-               phpdbg_writeln("print", "vars=\"%d\"", "Variables  %d", PHPDBG_G(ops)->last_var ? PHPDBG_G(ops)->last_var - 1 : 0);
+               phpdbg_writeln("Opcodes\t\t%d", PHPDBG_G(ops)->last);
+
+               if (PHPDBG_G(ops)->last_var) {
+                       phpdbg_writeln("Variables\t%d", PHPDBG_G(ops)->last_var-1);
+               } else {
+                       phpdbg_writeln("Variables\tNone");
+               }
        }
 
-       phpdbg_writeln("print", "executing=\"%d\"", "Executing  %s", EG(in_execution) ? "yes" : "no");
+       phpdbg_writeln("Executing\t%s", EG(in_execution) ? "yes" : "no");
        if (EG(in_execution)) {
-               phpdbg_writeln("print", "vmret=\"%d\"", "VM Return  %d", PHPDBG_G(vmret));
+               phpdbg_writeln("VM Return\t%d", PHPDBG_G(vmret));
        }
 
-       phpdbg_writeln("print", "classes=\"%d\"", "Classes    %d", zend_hash_num_elements(EG(class_table)));
-       phpdbg_writeln("print", "functions=\"%d\"", "Functions  %d", zend_hash_num_elements(EG(function_table)));
-       phpdbg_writeln("print", "constants=\"%d\"", "Constants  %d", zend_hash_num_elements(EG(zend_constants)));
-       phpdbg_writeln("print", "includes=\"%d\"", "Included   %d", zend_hash_num_elements(&EG(included_files)));
-       phpdbg_xml("</printinfo>");
+       phpdbg_writeln("Classes\t\t%d", zend_hash_num_elements(EG(class_table)));
+       phpdbg_writeln("Functions\t%d", zend_hash_num_elements(EG(function_table)));
+       phpdbg_writeln("Constants\t%d", zend_hash_num_elements(EG(zend_constants)));
+       phpdbg_writeln("Included\t%d", zend_hash_num_elements(&EG(included_files)));
+
+       phpdbg_writeln(SEPARATE);
 
        return SUCCESS;
 } /* }}} */
 
 PHPDBG_COMMAND(info) /* {{{ */
 {
-       phpdbg_error("info", "type=\"toofewargs\" expected=\"1\"", "No information command selected!");
+       phpdbg_error(
+               "No information command selected!");
 
        return SUCCESS;
 } /* }}} */
 
 PHPDBG_COMMAND(set) /* {{{ */
 {
-       phpdbg_error("set", "type=\"toofewargs\" expected=\"1\"", "No set command selected!");
+       phpdbg_error(
+               "No set command selected!");
 
        return SUCCESS;
 } /* }}} */
@@ -879,8 +789,8 @@ PHPDBG_COMMAND(break) /* {{{ */
 {
        if (!param) {
                phpdbg_set_breakpoint_file(
-                       zend_get_executed_filename(TSRMLS_C),
-                       zend_get_executed_lineno(TSRMLS_C) TSRMLS_CC);
+                               zend_get_executed_filename(TSRMLS_C),
+                               zend_get_executed_lineno(TSRMLS_C) TSRMLS_CC);
        } else switch (param->type) {
                case ADDR_PARAM:
                        phpdbg_set_breakpoint_opline(param->addr TSRMLS_CC);
@@ -889,7 +799,7 @@ PHPDBG_COMMAND(break) /* {{{ */
                        if (PHPDBG_G(exec)) {
                                phpdbg_set_breakpoint_file(phpdbg_current_file(TSRMLS_C), param->num TSRMLS_CC);
                        } else {
-                               phpdbg_error("inactive", "type=\"noexec\"", "Execution context not set!");
+                               phpdbg_error("Execution context not set!");
                        }
                        break;
                case METHOD_PARAM:
@@ -927,226 +837,42 @@ PHPDBG_COMMAND(sh) /* {{{ */
 {
        FILE *fd = NULL;
        if ((fd=VCWD_POPEN((char*)param->str, "w"))) {
-               /* TODO: do something perhaps ?? do we want input ?? */
+               /* do something perhaps ?? do we want input ?? */
                fclose(fd);
        } else {
-               phpdbg_error("sh", "type=\"failure\" smd=\"%s\"", "Failed to execute %s", param->str);
+               phpdbg_error(
+                       "Failed to execute %s", param->str);
        }
-
-       return SUCCESS;
-} /* }}} */
-
-static int add_module_info(zend_module_entry *module TSRMLS_DC) {
-       phpdbg_write("module", "name=\"%s\"", "%s\n", module->name);
-       return 0;
-}
-
-static int add_zendext_info(zend_extension *ext TSRMLS_DC) {
-       phpdbg_write("extension", "name=\"%s\"", "%s\n", ext->name);
-       return 0;
-}
-
-PHPDBG_API const char *phpdbg_load_module_or_extension(char **path, char **name TSRMLS_DC) {
-       DL_HANDLE handle;
-       char *extension_dir;
-
-       extension_dir = INI_STR("extension_dir");
-
-       if (strchr(*path, '/') != NULL || strchr(*path, DEFAULT_SLASH) != NULL) {
-               /* path is fine */
-       } else if (extension_dir && extension_dir[0]) {
-               char *libpath;
-               int extension_dir_len = strlen(extension_dir);
-               if (IS_SLASH(extension_dir[extension_dir_len-1])) {
-                       spprintf(&libpath, 0, "%s%s", extension_dir, *path); /* SAFE */
-               } else {
-                       spprintf(&libpath, 0, "%s%c%s", extension_dir, DEFAULT_SLASH, *path); /* SAFE */
-               }
-               efree(*path);
-               *path = libpath;
-       } else {
-               phpdbg_error("dl", "type=\"relpath\"", "Not a full path given or extension_dir ini setting is not set");
-
-               return NULL;
-       }
-
-       handle = DL_LOAD(*path);
-
-       if (!handle) {
-#if PHP_WIN32
-               char *err = GET_DL_ERROR();
-               if (err && *err != "") {
-                       phpdbg_error("dl", "type=\"unknown\"", "%s", err);
-                       LocalFree(err);
-               } else {
-                       phpdbg_error("dl", "type=\"unknown\"", "Unknown reason");
-               }
-#else
-               phpdbg_error("dl", "type=\"unknown\"", "%s", GET_DL_ERROR());
-#endif
-               return NULL;
-       }
-
-#if ZEND_EXTENSIONS_SUPPORT
-       do {
-               zend_extension *new_extension;
-               zend_extension_version_info *extension_version_info;
-
-               extension_version_info = (zend_extension_version_info *) DL_FETCH_SYMBOL(handle, "extension_version_info");
-               if (!extension_version_info) {
-                       extension_version_info = (zend_extension_version_info *) DL_FETCH_SYMBOL(handle, "_extension_version_info");
-               }
-               new_extension = (zend_extension *) DL_FETCH_SYMBOL(handle, "zend_extension_entry");
-               if (!new_extension) {
-                       new_extension = (zend_extension *) DL_FETCH_SYMBOL(handle, "_zend_extension_entry");
-               }
-               if (!extension_version_info || !new_extension) {
-                       break;
-               }
-               if (extension_version_info->zend_extension_api_no != ZEND_EXTENSION_API_NO &&(!new_extension->api_no_check || new_extension->api_no_check(ZEND_EXTENSION_API_NO) != SUCCESS)) {
-                       phpdbg_error("dl", "type=\"wrongapi\" extension=\"%s\" apineeded=\"%d\" apiinstalled=\"%d\"", "%s requires Zend Engine API version %d, which does not match the installed Zend Engine API version %d", new_extension->name, extension_version_info->zend_extension_api_no, ZEND_EXTENSION_API_NO);
-
-                       goto quit;
-               } else if (strcmp(ZEND_EXTENSION_BUILD_ID, extension_version_info->build_id) && (!new_extension->build_id_check || new_extension->build_id_check(ZEND_EXTENSION_BUILD_ID) != SUCCESS)) {
-                       phpdbg_error("dl", "type=\"wrongbuild\" extension=\"%s\" buildneeded=\"%s\" buildinstalled=\"%s\"", "%s was built with configuration %s, whereas running engine is %s", new_extension->name, extension_version_info->build_id, ZEND_EXTENSION_BUILD_ID);
-
-                       goto quit;
-               }
-
-               *name = new_extension->name;
-
-               zend_register_extension(new_extension, handle);
-
-               if (new_extension->startup) {
-                       if (new_extension->startup(new_extension) != SUCCESS) {
-                               phpdbg_error("dl", "type=\"startupfailure\" extension=\"%s\"", "Unable to startup Zend extension %s", new_extension->name);
-
-                               goto quit;
-                       }
-                       zend_append_version_info(new_extension);
-               }
-
-               return "Zend extension";
-       } while (0);
-#endif
-
-       do {
-               zend_module_entry *module_entry;
-               zend_module_entry *(*get_module)(void);
-
-               get_module = (zend_module_entry *(*)(void)) DL_FETCH_SYMBOL(handle, "get_module");
-               if (!get_module) {
-                       get_module = (zend_module_entry *(*)(void)) DL_FETCH_SYMBOL(handle, "_get_module");
-               }
-
-               if (!get_module) {
-                       break;
-               }
-
-               module_entry = get_module();
-               *name = (char *) module_entry->name;
-
-               if (strcmp(ZEND_EXTENSION_BUILD_ID, module_entry->build_id)) {
-                       phpdbg_error("dl", "type=\"wrongbuild\" module=\"%s\" buildneeded=\"%s\" buildinstalled=\"%s\"",  "%s was built with configuration %s, whereas running engine is %s", module_entry->name, module_entry->build_id, ZEND_EXTENSION_BUILD_ID);
-
-                       goto quit;
-               }
-
-               module_entry->type = MODULE_PERSISTENT;
-               module_entry->module_number = zend_next_free_module();
-               module_entry->handle = handle;
-
-               if ((module_entry = zend_register_module_ex(module_entry TSRMLS_CC)) == NULL) {
-                       phpdbg_error("dl", "type=\"registerfailure\" module=\"%s\"", "Unable to register module %s", module_entry->name);
-
-                       goto quit;
-               }
-
-               if (zend_startup_module_ex(module_entry TSRMLS_CC) == FAILURE) {
-                       phpdbg_error("dl", "type=\"startupfailure\" module=\"%s\"", "Unable to startup module %s", module_entry->name);
-
-                       goto quit;
-               }
-
-               if (module_entry->request_startup_func) {
-                       if (module_entry->request_startup_func(MODULE_PERSISTENT, module_entry->module_number TSRMLS_CC) == FAILURE) {
-                               phpdbg_error("dl", "type=\"initfailure\" module=\"%s\"", "Unable to initialize module %s", module_entry->name);
-
-                               goto quit;
-                       }
-               }
-
-               return "module";
-       } while (0);
-
-       phpdbg_error("dl", "type=\"nophpso\"", "This shared object is nor a Zend extension nor a module");
-
-quit:
-       DL_UNLOAD(handle);
-       return NULL;
-}
-
-PHPDBG_COMMAND(dl) /* {{{ */
-{
-       const char *type;
-       char *name, *path;
-
-       if (!param || param->type == EMPTY_PARAM) {
-               phpdbg_notice("dl", "extensiontype=\"Zend extension\"", "Zend extensions");
-               zend_llist_apply(&zend_extensions, (llist_apply_func_t) add_zendext_info TSRMLS_CC);
-               phpdbg_out("\n");
-               phpdbg_notice("dl", "extensiontype=\"module\"", "Modules");
-               zend_hash_apply(&module_registry, (apply_func_t) add_module_info TSRMLS_CC);
-       } else switch (param->type) {
-               case STR_PARAM:
-#ifdef HAVE_LIBDL
-                       path = estrndup(param->str, param->len);
-
-                       phpdbg_activate_err_buf(1 TSRMLS_CC);
-                       if ((type = phpdbg_load_module_or_extension(&path, &name TSRMLS_CC)) == NULL) {
-                               phpdbg_error("dl", "path=\"%s\" %b", "Could not load %s, not found or invalid zend extension / module: %b", path);
-                               efree(name);
-                       } else {
-                               phpdbg_notice("dl", "extensiontype=\"%s\" name=\"%s\" path=\"%s\"", "Successfully loaded the %s %s at path %s", type, name, path);
-                       }
-                       phpdbg_activate_err_buf(0 TSRMLS_CC);
-                       phpdbg_free_err_buf(TSRMLS_C);
-                       efree(path);
-#else
-                       phpdbg_error("dl", "type=\"unsupported\" path=\"%.*s\"", "Cannot dynamically load %.*s - dynamic modules are not supported", (int) param->len, param->str);
-#endif
-                       break;
-
-               phpdbg_default_switch_case();
-       }
-
+       
        return SUCCESS;
 } /* }}} */
 
 PHPDBG_COMMAND(source) /* {{{ */
 {
        struct stat sb;
-
+       
        if (VCWD_STAT(param->str, &sb) != -1) {
                phpdbg_try_file_init(param->str, param->len, 0 TSRMLS_CC);
        } else {
-               phpdbg_error("source", "type=\"notfound\" file=\"%s\"", "Failed to stat %s, file does not exist", param->str);
+               phpdbg_error(
+                       "Failed to stat %s, file does not exist", param->str);
        }
-
+                       
        return SUCCESS;
 } /* }}} */
 
 PHPDBG_COMMAND(export) /* {{{ */
 {
        FILE *handle = VCWD_FOPEN(param->str, "w+");
-
+       
        if (handle) {
                phpdbg_export_breakpoints(handle TSRMLS_CC);
                fclose(handle);
        } else {
-               phpdbg_error("export", "type=\"openfailure\" file=\"%s\"", "Failed to open or create %s, check path and permissions", param->str);
+               phpdbg_error(
+                       "Failed to open or create %s, check path and permissions", param->str);
        }
-
+       
        return SUCCESS;
 } /* }}} */
 
@@ -1158,15 +884,18 @@ PHPDBG_COMMAND(register) /* {{{ */
 
        if (!zend_hash_exists(&PHPDBG_G(registered), lcname, lcname_len+1)) {
                if (zend_hash_find(EG(function_table), lcname, lcname_len+1, (void**) &function) == SUCCESS) {
-                       zend_hash_update(&PHPDBG_G(registered), lcname, lcname_len+1, (void*)&function, sizeof(zend_function), NULL);
+                       zend_hash_update(
+                               &PHPDBG_G(registered), lcname, lcname_len+1, (void*)&function, sizeof(zend_function), NULL);
                        function_add_ref(function);
 
-                       phpdbg_notice("register", "function=\"%s\"", "Registered %s", lcname);
+                       phpdbg_notice(
+                               "Registered %s", lcname);
                } else {
-                       phpdbg_error("register", "type=\"notfound\" function=\"%s\"", "The requested function (%s) could not be found", param->str);
+                       phpdbg_error("The requested function (%s) could not be found", param->str);
                }
        } else {
-               phpdbg_error("register", "type=\"inuse\" function=\"%s\"", "The requested name (%s) is already in use", lcname);
+               phpdbg_error(
+                       "The requested name (%s) is already in use", lcname);
        }
 
        efree(lcname);
@@ -1176,9 +905,8 @@ PHPDBG_COMMAND(register) /* {{{ */
 PHPDBG_COMMAND(quit) /* {{{ */
 {
        /* don't allow this to loop, ever ... */
-       if (!(PHPDBG_G(flags) & PHPDBG_IS_STOPPING)) {
+       if (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) {
                PHPDBG_G(flags) |= PHPDBG_IS_QUITTING;
-               PHPDBG_G(flags) &= ~(PHPDBG_IS_RUNNING | PHPDBG_IS_CLEANING);
                zend_bailout();
        }
 
@@ -1188,45 +916,36 @@ PHPDBG_COMMAND(quit) /* {{{ */
 PHPDBG_COMMAND(clean) /* {{{ */
 {
        if (EG(in_execution)) {
-               if (phpdbg_ask_user_permission("Do you really want to clean your current environment?" TSRMLS_CC) == FAILURE) {
-                       return SUCCESS;
-               }
+               phpdbg_error("Cannot clean environment while executing");
+               return SUCCESS;
        }
 
-       phpdbg_out("Cleaning Execution Environment\n");
-       phpdbg_xml("<cleaninfo %r>");
+       phpdbg_notice("Cleaning Execution Environment");
 
-       phpdbg_writeln("clean", "classes=\"%d\"", "Classes    %d", zend_hash_num_elements(EG(class_table)));
-       phpdbg_writeln("clean", "functions=\"%d\"", "Functions  %d", zend_hash_num_elements(EG(function_table)));
-       phpdbg_writeln("clean", "constants=\"%d\"", "Constants  %d", zend_hash_num_elements(EG(zend_constants)));
-       phpdbg_writeln("clean", "includes=\"%d\"", "Includes   %d", zend_hash_num_elements(&EG(included_files)));
-
-       PHPDBG_G(flags) &= ~PHPDBG_IS_RUNNING;
+       phpdbg_writeln("Classes\t\t\t%d", zend_hash_num_elements(EG(class_table)));
+       phpdbg_writeln("Functions\t\t%d", zend_hash_num_elements(EG(function_table)));
+       phpdbg_writeln("Constants\t\t%d", zend_hash_num_elements(EG(zend_constants)));
+       phpdbg_writeln("Includes\t\t%d", zend_hash_num_elements(&EG(included_files)));
 
        phpdbg_clean(1 TSRMLS_CC);
 
-       phpdbg_xml("</cleaninfo>");
-
        return SUCCESS;
 } /* }}} */
 
 PHPDBG_COMMAND(clear) /* {{{ */
 {
-       phpdbg_out("Clearing Breakpoints\n");
-       phpdbg_xml("<clearinfo %r>");
-
-       phpdbg_writeln("clear", "files=\"%d\"", "File              %d", zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE]));
-       phpdbg_writeln("clear", "functions=\"%d\"", "Functions         %d", zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_SYM]));
-       phpdbg_writeln("clear", "methods=\"%d\"", "Methods           %d", zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD]));
-       phpdbg_writeln("clear", "oplines=\"%d\"", "Oplines           %d", zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE]));
-       phpdbg_writeln("clear", "fileoplines=\"%d\"", "File oplines      %d", zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE_OPLINE]));
-       phpdbg_writeln("clear", "functionoplines=\"%d\"", "Function oplines  %d", zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_FUNCTION_OPLINE]));
-       phpdbg_writeln("clear", "methodoplines=\"%d\"", "Method oplines    %d", zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD_OPLINE]));
-       phpdbg_writeln("clear", "eval=\"%d\"", "Conditionals      %d", zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_COND]));
+       phpdbg_notice("Clearing Breakpoints");
 
-       phpdbg_clear_breakpoints(TSRMLS_C);
+       phpdbg_writeln("File\t\t\t%d", zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE]));
+       phpdbg_writeln("Functions\t\t%d", zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_SYM]));
+       phpdbg_writeln("Methods\t\t\t%d", zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD]));
+       phpdbg_writeln("Oplines\t\t\t%d", zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE]));
+       phpdbg_writeln("File oplines\t\t\t%d", zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_FILE_OPLINE]));
+       phpdbg_writeln("Function oplines\t\t\t%d", zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_FUNCTION_OPLINE]));
+       phpdbg_writeln("Method oplines\t\t\t%d", zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD_OPLINE]));
+       phpdbg_writeln("Conditionals\t\t%d", zend_hash_num_elements(&PHPDBG_G(bp)[PHPDBG_BREAK_COND]));
 
-       phpdbg_xml("</clearinfo>");
+       phpdbg_clear_breakpoints(TSRMLS_C);
 
        return SUCCESS;
 } /* }}} */
@@ -1262,7 +981,7 @@ PHPDBG_COMMAND(watch) /* {{{ */
        } else switch (param->type) {
                case STR_PARAM:
                        if (phpdbg_create_var_watchpoint(param->str, param->len TSRMLS_CC) != FAILURE) {
-                               phpdbg_notice("watch", "variable=\"%.*s\"", "Set watchpoint on %.*s", (int) param->len, param->str);
+                               phpdbg_notice("Set watchpoint on %.*s", (int)param->len, param->str);
                        }
                        break;
 
@@ -1272,77 +991,69 @@ PHPDBG_COMMAND(watch) /* {{{ */
        return SUCCESS;
 } /* }}} */
 
-int phpdbg_interactive(zend_bool allow_async_unsafe TSRMLS_DC) /* {{{ */
+int phpdbg_interactive(TSRMLS_D) /* {{{ */
 {
        int ret = SUCCESS;
+       char *why = NULL;
        char *input = NULL;
        phpdbg_param_t stack;
 
        PHPDBG_G(flags) |= PHPDBG_IS_INTERACTIVE;
 
-       while (ret == SUCCESS || ret == FAILURE) {
-               if ((PHPDBG_G(flags) & (PHPDBG_IS_STOPPING | PHPDBG_IS_RUNNING)) == PHPDBG_IS_STOPPING) {
-                       zend_bailout();
-               }
-
-               if (!(input = phpdbg_read_input(NULL TSRMLS_CC))) {
-                       break;
-               }
+       input = phpdbg_read_input(NULL TSRMLS_CC);
 
+       if (input) {
+               do {
+                       phpdbg_init_param(&stack, STACK_PARAM);
 
-               phpdbg_init_param(&stack, STACK_PARAM);
-
-               if (phpdbg_do_parse(&stack, input TSRMLS_CC) <= 0) {
-                       phpdbg_activate_err_buf(1 TSRMLS_CC);
+                       if (phpdbg_do_parse(&stack, input TSRMLS_CC) <= 0) {
+                               switch (ret = phpdbg_stack_execute(&stack, &why TSRMLS_CC)) {
+                                       case FAILURE:
+                                               if (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) {
+                                                       if (phpdbg_call_register(&stack TSRMLS_CC) == FAILURE) {
+                                                               if (why) {
+                                                                       phpdbg_error("%s", why);
+                                                               }
+                                                       }
+                                               }
 
-#ifdef PHP_WIN32
-#define PARA ((phpdbg_param_t *)stack.next)->type
-                       if (PHPDBG_G(flags) & PHPDBG_IS_REMOTE && (RUN_PARAM == PARA || EVAL_PARAM == PARA)) {
-                               sigio_watcher_start();
-                       }
-#endif
-                       switch (ret = phpdbg_stack_execute(&stack, allow_async_unsafe TSRMLS_CC)) {
-                               case FAILURE:
-                                       if (!(PHPDBG_G(flags) & PHPDBG_IS_STOPPING)) {
-                                               if (!allow_async_unsafe || phpdbg_call_register(&stack TSRMLS_CC) == FAILURE) {
-                                                       phpdbg_output_err_buf(NULL, "%b", "%b" TSRMLS_CC);
+                                               if (why) {
+                                                       free(why);
+                                                       why = NULL;
                                                }
-                                       }
-                               break;
+                                       break;
 
-                               case PHPDBG_LEAVE:
-                               case PHPDBG_FINISH:
-                               case PHPDBG_UNTIL:
-                               case PHPDBG_NEXT: {
-                                       phpdbg_activate_err_buf(0 TSRMLS_CC);
-                                       phpdbg_free_err_buf(TSRMLS_C);
-                                       if (!EG(in_execution) && !(PHPDBG_G(flags) & PHPDBG_IS_STOPPING)) {
-                                               phpdbg_error("command", "type=\"noexec\"", "Not running");
+                                       case PHPDBG_LEAVE:
+                                       case PHPDBG_FINISH:
+                                       case PHPDBG_UNTIL:
+                                       case PHPDBG_NEXT: {
+                                               if (!EG(in_execution) && !(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) {
+                                                       phpdbg_error("Not running");
+                                               }
+                                               goto out;
                                        }
-                                       break;
                                }
                        }
 
-                       phpdbg_activate_err_buf(0 TSRMLS_CC);
-                       phpdbg_free_err_buf(TSRMLS_C);
-#ifdef PHP_WIN32
-                       if (PHPDBG_G(flags) & PHPDBG_IS_REMOTE && (RUN_PARAM == PARA || EVAL_PARAM == PARA)) {
-                               sigio_watcher_stop();
+                       if (why) {
+                               free(why);
+                               why = NULL;
                        }
-#undef PARA
-#endif
-               }
 
-               phpdbg_stack_free(&stack);
-               phpdbg_destroy_input(&input TSRMLS_CC);
-               PHPDBG_G(req_id) = 0;
-               input = NULL;
+                       phpdbg_stack_free(&stack);
+                       phpdbg_destroy_input(&input TSRMLS_CC);
+
+               } while ((input = phpdbg_read_input(NULL TSRMLS_CC)));
        }
 
+out:
        if (input) {
                phpdbg_stack_free(&stack);
                phpdbg_destroy_input(&input TSRMLS_CC);
-               PHPDBG_G(req_id) = 0;
+       }
+
+       if (why) {
+               free(why);
        }
 
        if (EG(in_execution)) {
@@ -1394,9 +1105,9 @@ static inline zend_execute_data *phpdbg_create_execute_data(zend_op_array *op_ar
                ZEND_MM_ALIGNED_SIZE(sizeof(zval**) * op_array->last_var * (EG(active_symbol_table) ? 1 : 2)) +
                ZEND_MM_ALIGNED_SIZE(sizeof(temp_variable)) * op_array->T TSRMLS_CC);
 
-       EX(CVs) = (zval ***)((char *)execute_data + ZEND_MM_ALIGNED_SIZE(sizeof(zend_execute_data)));
-       memset(EX(CVs), 0, sizeof(zval **) * op_array->last_var);
-       EX(Ts) = (temp_variable *)(((char *) EX(CVs)) + ZEND_MM_ALIGNED_SIZE(sizeof(zval **) * op_array->last_var * (EG(active_symbol_table) ? 1 : 2)));
+       EX(CVs) = (zval***)((char*)execute_data + ZEND_MM_ALIGNED_SIZE(sizeof(zend_execute_data)));
+       memset(EX(CVs), 0, sizeof(zval**) * op_array->last_var);
+       EX(Ts) = (temp_variable *)(((char*)EX(CVs)) + ZEND_MM_ALIGNED_SIZE(sizeof(zval**) * op_array->last_var * (EG(active_symbol_table) ? 1 : 2)));
        EX(fbc) = NULL;
        EX(called_scope) = NULL;
        EX(object) = NULL;
@@ -1414,16 +1125,16 @@ static inline zend_execute_data *phpdbg_create_execute_data(zend_op_array *op_ar
        if (op_array->this_var != -1 && EG(This)) {
                Z_ADDREF_P(EG(This)); /* For $this pointer */
                if (!EG(active_symbol_table)) {
-                       EX_CV(op_array->this_var) = (zval**) EX_CVs() + (op_array->last_var + op_array->this_var);
+                       EX_CV(op_array->this_var) = (zval**)EX_CVs() + (op_array->last_var + op_array->this_var);
                        *EX_CV(op_array->this_var) = EG(This);
                } else {
-                       if (zend_hash_add(EG(active_symbol_table), "this", sizeof("this"), &EG(This), sizeof(zval *), (void **) &EX_CV(op_array->this_var))==FAILURE) {
+                       if (zend_hash_add(EG(active_symbol_table), "this", sizeof("this"), &EG(This), sizeof(zval *), (void**)&EX_CV(op_array->this_var))==FAILURE) {
                                Z_DELREF_P(EG(This));
                        }
                }
        }
 
-       EX(opline) = op_array->opcodes;
+       EX(opline) = UNEXPECTED((op_array->fn_flags & ZEND_ACC_INTERACTIVE) != 0) && EG(start_op) ? EG(start_op) : op_array->opcodes;
        EG(opline_ptr) = &EX(opline);
 
        EX(function_state).function = (zend_function *) op_array;
@@ -1433,27 +1144,6 @@ static inline zend_execute_data *phpdbg_create_execute_data(zend_op_array *op_ar
 #endif
 } /* }}} */
 
-#define DO_INTERACTIVE(allow_async_unsafe) do { \
-       if (!(PHPDBG_G(flags) & PHPDBG_IN_EVAL)) { \
-               phpdbg_list_file( \
-                       zend_get_executed_filename(TSRMLS_C), \
-                       3, \
-                       zend_get_executed_lineno(TSRMLS_C)-1, \
-                       zend_get_executed_lineno(TSRMLS_C) \
-                       TSRMLS_CC \
-               ); \
-       } \
-       \
-       switch (phpdbg_interactive(allow_async_unsafe TSRMLS_CC)) { \
-               case PHPDBG_LEAVE: \
-               case PHPDBG_FINISH: \
-               case PHPDBG_UNTIL: \
-               case PHPDBG_NEXT:{ \
-                       goto next; \
-               } \
-       } \
-} while (0)
-
 #if PHP_VERSION_ID >= 50500
 void phpdbg_execute_ex(zend_execute_data *execute_data TSRMLS_DC) /* {{{ */
 {
@@ -1474,10 +1164,6 @@ void phpdbg_execute_ex(zend_op_array *op_array TSRMLS_DC) /* {{{ */
        }
 #endif
 
-       if ((PHPDBG_G(flags) & PHPDBG_IS_STOPPING) && !(PHPDBG_G(flags) & PHPDBG_IS_RUNNING)) {
-               zend_bailout();
-       }
-
        EG(in_execution) = 1;
 
 #if PHP_VERSION_ID >= 50500
@@ -1494,17 +1180,41 @@ zend_vm_enter:
 #endif
 
        while (1) {
+       
                if ((PHPDBG_G(flags) & PHPDBG_BP_RESOLVE_MASK)) {
                        /* resolve nth opline breakpoints */
                        phpdbg_resolve_op_array_breaks(EG(active_op_array) TSRMLS_CC);
                }
-
+               
 #ifdef ZEND_WIN32
                if (EG(timed_out)) {
                        zend_timeout(0);
                }
 #endif
 
+#define DO_INTERACTIVE() do { \
+       if (!(PHPDBG_G(flags) & PHPDBG_IN_EVAL)) { \
+               phpdbg_list_file( \
+                       zend_get_executed_filename(TSRMLS_C), \
+                       3, \
+                       zend_get_executed_lineno(TSRMLS_C)-1, \
+                       zend_get_executed_lineno(TSRMLS_C) \
+                       TSRMLS_CC \
+               ); \
+       } \
+       \
+/*     do { */\
+               switch (phpdbg_interactive(TSRMLS_C)) { \
+                       case PHPDBG_LEAVE: \
+                       case PHPDBG_FINISH: \
+                       case PHPDBG_UNTIL: \
+                       case PHPDBG_NEXT:{ \
+                               goto next; \
+                       } \
+               } \
+/*     } while (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)); */\
+} while (0)
+
                /* allow conditional breakpoints and
                        initialization to access the vm uninterrupted */
                if ((PHPDBG_G(flags) & PHPDBG_IN_COND_BP) ||
@@ -1522,7 +1232,8 @@ zend_vm_enter:
                        if (PHPDBG_G(flags) & PHPDBG_IN_UNTIL) {
                                if (zend_hash_index_exists(&PHPDBG_G(seek), address)) {
                                        PHPDBG_G(flags) &= ~PHPDBG_IN_UNTIL;
-                                       zend_hash_clean(&PHPDBG_G(seek));
+                                       zend_hash_clean(
+                                               &PHPDBG_G(seek));
                                } else {
                                        /* skip possible breakpoints */
                                        goto next;
@@ -1533,7 +1244,8 @@ zend_vm_enter:
                        if (PHPDBG_G(flags) & PHPDBG_IN_FINISH) {
                                if (zend_hash_index_exists(&PHPDBG_G(seek), address)) {
                                        PHPDBG_G(flags) &= ~PHPDBG_IN_FINISH;
-                                       zend_hash_clean(&PHPDBG_G(seek));
+                                       zend_hash_clean(
+                                               &PHPDBG_G(seek));
                                }
                                /* skip possible breakpoints */
                                goto next;
@@ -1543,12 +1255,14 @@ zend_vm_enter:
                        if (PHPDBG_G(flags) & PHPDBG_IN_LEAVE) {
                                if (zend_hash_index_exists(&PHPDBG_G(seek), address)) {
                                        PHPDBG_G(flags) &= ~PHPDBG_IN_LEAVE;
-                                       zend_hash_clean(&PHPDBG_G(seek));
-                                       phpdbg_notice("breakpoint", "id=\"leave\" file=\"%s\" line=\"%u\"", "Breaking for leave at %s:%u",
+                                       zend_hash_clean(
+                                               &PHPDBG_G(seek));
+                                       phpdbg_notice(
+                                               "Breaking for leave at %s:%u",
                                                zend_get_executed_filename(TSRMLS_C),
                                                zend_get_executed_lineno(TSRMLS_C)
                                        );
-                                       DO_INTERACTIVE(1);
+                                       DO_INTERACTIVE();
                                } else {
                                        /* skip possible breakpoints */
                                        goto next;
@@ -1557,17 +1271,18 @@ zend_vm_enter:
                }
 
                /* not while in conditionals */
-               phpdbg_print_opline_ex(execute_data, &vars, 0 TSRMLS_CC);
+               phpdbg_print_opline_ex(
+                       execute_data, &vars, 0 TSRMLS_CC);
 
                if (PHPDBG_G(flags) & PHPDBG_IS_STEPPING && (PHPDBG_G(flags) & PHPDBG_STEP_OPCODE || execute_data->opline->lineno != PHPDBG_G(last_line))) {
                        PHPDBG_G(flags) &= ~PHPDBG_IS_STEPPING;
-                       DO_INTERACTIVE(1);
+                       DO_INTERACTIVE();
                }
 
                /* check if some watchpoint was hit */
                {
                        if (phpdbg_print_changed_zvals(TSRMLS_C) == SUCCESS) {
-                               DO_INTERACTIVE(1);
+                               DO_INTERACTIVE();
                        }
                }
 
@@ -1579,36 +1294,21 @@ zend_vm_enter:
                            && (brake = phpdbg_find_breakpoint(execute_data TSRMLS_CC))
                            && (brake->type != PHPDBG_BREAK_FILE || execute_data->opline->lineno != PHPDBG_G(last_line))) {
                                phpdbg_hit_breakpoint(brake, 1 TSRMLS_CC);
-                               DO_INTERACTIVE(1);
+                               DO_INTERACTIVE();
                        }
                }
 
+next:
                if (PHPDBG_G(flags) & PHPDBG_IS_SIGNALED) {
+                       phpdbg_writeln(EMPTY);
+                       phpdbg_notice("Program received signal SIGINT");
                        PHPDBG_G(flags) &= ~PHPDBG_IS_SIGNALED;
-
-                       phpdbg_out("\n");
-                       phpdbg_notice("signal", "type=\"SIGINT\"", "Program received signal SIGINT");
-                       DO_INTERACTIVE(1);
+                       DO_INTERACTIVE();
                }
 
-next:
-
                PHPDBG_G(last_line) = execute_data->opline->lineno;
 
-               /* stupid hack to make zend_do_fcall_common_helper return ZEND_VM_ENTER() instead of recursively calling zend_execute() and eventually segfaulting */
-               if ((execute_data->opline->opcode == ZEND_DO_FCALL_BY_NAME || execute_data->opline->opcode == ZEND_DO_FCALL) && execute_data->function_state.function->type == ZEND_USER_FUNCTION) {
-#if PHP_VERSION_ID < 50500
-                       zend_execute = execute;
-#else
-                       zend_execute_ex = execute_ex;
-#endif
-               }
                PHPDBG_G(vmret) = execute_data->opline->handler(execute_data TSRMLS_CC);
-#if PHP_VERSION_ID < 50500
-               zend_execute = phpdbg_execute_ex;
-#else
-               zend_execute_ex = phpdbg_execute_ex;
-#endif
 
                if (PHPDBG_G(vmret) > 0) {
                        switch (PHPDBG_G(vmret)) {
@@ -1633,47 +1333,3 @@ next:
        }
        zend_error_noreturn(E_ERROR, "Arrived at end of main loop which shouldn't happen");
 } /* }}} */
-
-/* only if *not* interactive and while executing */
-void phpdbg_force_interruption(TSRMLS_D) {
-       zend_execute_data *data = EG(current_execute_data); /* should be always readable if not NULL */
-
-       PHPDBG_G(flags) |= PHPDBG_IN_SIGNAL_HANDLER;
-
-       if (data) {
-               if (data->op_array) {
-                       phpdbg_notice("hardinterrupt", "opline=\"%p\" num=\"%lu\" file=\"%s\" line=\"%u\"", "Current opline: %p (op #%lu) in %s:%u", data->opline, (data->opline - data->op_array->opcodes) / sizeof(data->opline), data->op_array->filename, data->opline->lineno);
-               } else {
-                       phpdbg_notice("hardinterrupt", "opline=\"%p\"", "Current opline: %p (op_array information unavailable)", data->opline);
-               }
-       } else {
-               phpdbg_notice("hardinterrupt", "", "No information available about executing context");
-       }
-
-       DO_INTERACTIVE(0);
-
-next:
-       PHPDBG_G(flags) &= ~PHPDBG_IN_SIGNAL_HANDLER;
-
-       if (PHPDBG_G(flags) & PHPDBG_IS_STOPPING) {
-               zend_bailout();
-       }
-}
-
-PHPDBG_COMMAND(eol) /* {{{ */
-{
-       if (!param || param->type == EMPTY_PARAM) {
-               phpdbg_notice("eol", "argument required", "argument required");
-       } else switch (param->type) {
-               case STR_PARAM:
-                       if (FAILURE == phpdbg_eol_global_update(param->str TSRMLS_CC)) {
-                               phpdbg_notice("eol", "unknown EOL name '%s', give crlf, lf, cr", "unknown EOL name '%s', give  crlf, lf, cr", param->str);
-                       }
-                       break;
-
-               phpdbg_default_switch_case();
-       }
-
-       return SUCCESS;
-} /* }}} */
-
index f583f2cdcd6665a5c0b098610db4464fc1b2bcd1..ef648aabeb08ad011979fb7673571eb35d567dd7 100644 (file)
 #define PHPDBG_PROMPT_H
 
 /* {{{ */
-void phpdbg_string_init(char *buffer TSRMLS_DC);
 void phpdbg_init(char *init_file, size_t init_file_len, zend_bool use_default TSRMLS_DC);
 void phpdbg_try_file_init(char *init_file, size_t init_file_len, zend_bool free_init TSRMLS_DC);
-int phpdbg_interactive(zend_bool allow_async_unsafe TSRMLS_DC);
+int phpdbg_interactive(TSRMLS_D);
 int phpdbg_compile(TSRMLS_D);
-void phpdbg_clean(zend_bool full TSRMLS_DC);
-void phpdbg_force_interruption(TSRMLS_D);
-/* }}} */
+void phpdbg_clean(zend_bool full TSRMLS_DC); /* }}} */
 
 /* {{{ phpdbg command handlers */
 PHPDBG_COMMAND(exec);
@@ -50,15 +47,12 @@ PHPDBG_COMMAND(clean);
 PHPDBG_COMMAND(clear);
 PHPDBG_COMMAND(help);
 PHPDBG_COMMAND(sh);
-PHPDBG_COMMAND(dl);
 PHPDBG_COMMAND(set);
 PHPDBG_COMMAND(source);
 PHPDBG_COMMAND(export);
 PHPDBG_COMMAND(register);
 PHPDBG_COMMAND(quit);
-PHPDBG_COMMAND(watch);
-PHPDBG_COMMAND(eol);
-PHPDBG_COMMAND(wait); /* }}} */
+PHPDBG_COMMAND(watch); /* }}} */
 
 /* {{{ prompt commands */
 extern const phpdbg_command_t phpdbg_prompt_commands[]; /* }}} */
diff --git a/sapi/phpdbg/phpdbg_rinit_hook.c b/sapi/phpdbg/phpdbg_rinit_hook.c
deleted file mode 100644 (file)
index 11bd5c9..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-   +----------------------------------------------------------------------+
-   | PHP Version 5                                                        |
-   +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2014 The PHP Group                                |
-   +----------------------------------------------------------------------+
-   | This source file is subject to version 3.01 of the PHP license,      |
-   | that is bundled with this package in the file LICENSE, and is        |
-   | available through the world-wide-web at the following url:           |
-   | http://www.php.net/license/3_01.txt                                  |
-   | If you did not receive a copy of the PHP license and are unable to   |
-   | obtain it through the world-wide-web, please send a note to          |
-   | license@php.net so we can mail you a copy immediately.               |
-   +----------------------------------------------------------------------+
-   | Authors: Bob Weinand <bwoebi@php.net>                                |
-   +----------------------------------------------------------------------+
-*/
-
-#include "phpdbg_rinit_hook.h"
-#include "php_ini.h"
-#include <errno.h>
-
-ZEND_DECLARE_MODULE_GLOBALS(phpdbg_webhelper);
-
-PHP_INI_BEGIN()
-       STD_PHP_INI_ENTRY("phpdbg.auth", "", PHP_INI_SYSTEM | PHP_INI_PERDIR, OnUpdateString, auth, zend_phpdbg_webhelper_globals, phpdbg_webhelper_globals)
-       STD_PHP_INI_ENTRY("phpdbg.path", "", PHP_INI_SYSTEM | PHP_INI_PERDIR, OnUpdateString, path, zend_phpdbg_webhelper_globals, phpdbg_webhelper_globals)
-PHP_INI_END()
-
-static inline void php_phpdbg_webhelper_globals_ctor(zend_phpdbg_webhelper_globals *pg) /* {{{ */
-{
-} /* }}} */
-
-static PHP_MINIT_FUNCTION(phpdbg_webhelper) /* {{{ */
-{
-       if (!strcmp(sapi_module.name, PHPDBG_NAME)) {
-               return SUCCESS;
-       }
-
-       ZEND_INIT_MODULE_GLOBALS(phpdbg_webhelper, php_phpdbg_webhelper_globals_ctor, NULL);
-       REGISTER_INI_ENTRIES();
-
-       return SUCCESS;
-} /* }}} */
-
-static PHP_RINIT_FUNCTION(phpdbg_webhelper) /* {{{ */
-{
-       zval *cookies = PG(http_globals)[TRACK_VARS_COOKIE];
-       zval **auth;
-
-       if (!cookies || zend_hash_find(Z_ARRVAL_P(cookies), PHPDBG_NAME "_AUTH_COOKIE", sizeof(PHPDBG_NAME "_AUTH_COOKIE"), (void **) &auth) == FAILURE || Z_STRLEN_PP(auth) != strlen(PHPDBG_WG(auth)) || strcmp(Z_STRVAL_PP(auth), PHPDBG_WG(auth))) {
-               return SUCCESS;
-       }
-
-#if PHPDBG_IN_DEV
-       {
-               struct sockaddr_un sock;
-               int s = socket(AF_UNIX, SOCK_STREAM, 0);
-               int len = strlen(PHPDBG_WG(path)) + sizeof(sock.sun_family);
-               char buf[(1 << 8) + 1];
-               int buflen;
-               sock.sun_family = AF_UNIX;
-               strcpy(sock.sun_path, PHPDBG_WG(path));
-
-               if (connect(s, (struct sockaddr *)&sock, len) == -1) {
-                       zend_error(E_ERROR, "Unable to connect to UNIX domain socket at %s defined by phpdbg.path ini setting. Reason: %s", PHPDBG_WG(path), strerror(errno));
-               }
-
-               char *msg = NULL;
-               char msglen[5] = {0};
-               phpdbg_webdata_compress(&msg, (int *)msglen TSRMLS_CC);
-
-               send(s, msglen, 4, 0);
-               send(s, msg, *(int *) msglen, 0);
-
-               while ((buflen = recv(s, buf, sizeof(buf) - 1, 0)) > 0) {
-                       php_write(buf, buflen TSRMLS_CC);
-               }
-
-               close(s);
-
-               php_output_flush_all(TSRMLS_C);
-               zend_bailout();
-       }
-#endif
-
-       return SUCCESS;
-} /* }}} */
-
-zend_module_entry phpdbg_webhelper_module_entry = {
-       STANDARD_MODULE_HEADER,
-       "phpdbg_webhelper",
-       NULL,
-       PHP_MINIT(phpdbg_webhelper),
-       NULL,
-       PHP_RINIT(phpdbg_webhelper),
-       NULL,
-       NULL,
-       PHPDBG_VERSION,
-       STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_PHPDBG_WEBHELPER
-ZEND_GET_MODULE(phpdbg_webhelper)
-#endif
diff --git a/sapi/phpdbg/phpdbg_rinit_hook.h b/sapi/phpdbg/phpdbg_rinit_hook.h
deleted file mode 100644 (file)
index d28be10..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-   +----------------------------------------------------------------------+
-   | PHP Version 5                                                        |
-   +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2014 The PHP Group                                |
-   +----------------------------------------------------------------------+
-   | This source file is subject to version 3.01 of the PHP license,      |
-   | that is bundled with this package in the file LICENSE, and is        |
-   | available through the world-wide-web at the following url:           |
-   | http://www.php.net/license/3_01.txt                                  |
-   | If you did not receive a copy of the PHP license and are unable to   |
-   | obtain it through the world-wide-web, please send a note to          |
-   | license@php.net so we can mail you a copy immediately.               |
-   +----------------------------------------------------------------------+
-   | Authors: Felipe Pena <felipe@php.net>                                |
-   | Authors: Joe Watkins <joe.watkins@live.co.uk>                        |
-   | Authors: Bob Weinand <bwoebi@php.net>                                |
-   +----------------------------------------------------------------------+
-*/
-
-#ifndef PHPDBG_WEBHELPER_H
-#define PHPDBG_WEBHELPER_H
-
-#include "phpdbg_webdata_transfer.h"
-
-extern zend_module_entry phpdbg_webhelper_module_entry;
-#define phpext_phpdbg_webhelper_ptr &phpdbg_webhelper_module_entry
-
-#ifdef ZTS
-# define PHPDBG_WG(v) TSRMG(phpdbg_webhelper_globals_id, zend_phpdbg_webhelper_globals *, v)
-#else
-# define PHPDBG_WG(v) (phpdbg_webhelper_globals.v)
-#endif
-
-/* {{{ structs */
-ZEND_BEGIN_MODULE_GLOBALS(phpdbg_webhelper)
-       char *auth;
-       char *path;
-ZEND_END_MODULE_GLOBALS(phpdbg_webhelper) /* }}} */
-
-#endif /* PHPDBG_WEBHELPER_H */
index fc7e788fa03a22449448f854eda62f88da924ede..54269a81931d63e421cdc06ebf5a9c5a21e30552 100644 (file)
 
 ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
 
-#define PHPDBG_SET_COMMAND_D(f, h, a, m, l, s, flags) \
-       PHPDBG_COMMAND_D_EXP(f, h, a, m, l, s, &phpdbg_prompt_commands[18], flags)
+#define PHPDBG_SET_COMMAND_D(f, h, a, m, l, s) \
+       PHPDBG_COMMAND_D_EXP(f, h, a, m, l, s, &phpdbg_prompt_commands[18])
 
 const phpdbg_command_t phpdbg_set_commands[] = {
-       PHPDBG_SET_COMMAND_D(prompt,       "usage: set prompt [<string>]",            'p', set_prompt,       NULL, "|s", 0),
+       PHPDBG_SET_COMMAND_D(prompt,       "usage: set prompt [<string>]",            'p', set_prompt,       NULL, "|s"),
 #ifndef _WIN32
-       PHPDBG_SET_COMMAND_D(color,        "usage: set color  <element> <color>",     'c', set_color,        NULL, "ss", PHPDBG_ASYNC_SAFE),
-       PHPDBG_SET_COMMAND_D(colors,       "usage: set colors [<on|off>]",            'C', set_colors,       NULL, "|b", PHPDBG_ASYNC_SAFE),
+       PHPDBG_SET_COMMAND_D(color,        "usage: set color  <element> <color>",     'c', set_color,        NULL, "ss"),
+       PHPDBG_SET_COMMAND_D(colors,       "usage: set colors [<on|off>]",            'C', set_colors,       NULL, "|b"),
 #endif
-       PHPDBG_SET_COMMAND_D(oplog,        "usage: set oplog  [<output>]",            'O', set_oplog,        NULL, "|s", 0),
-       PHPDBG_SET_COMMAND_D(break,        "usage: set break id [<on|off>]",          'b', set_break,        NULL, "l|b", PHPDBG_ASYNC_SAFE),
-       PHPDBG_SET_COMMAND_D(breaks,       "usage: set breaks [<on|off>]",            'B', set_breaks,       NULL, "|b", PHPDBG_ASYNC_SAFE),
-       PHPDBG_SET_COMMAND_D(quiet,        "usage: set quiet [<on|off>]",             'q', set_quiet,        NULL, "|b", PHPDBG_ASYNC_SAFE),
-       PHPDBG_SET_COMMAND_D(stepping,     "usage: set stepping [<line|op>]",         's', set_stepping,     NULL, "|s", PHPDBG_ASYNC_SAFE),
-       PHPDBG_SET_COMMAND_D(refcount,     "usage: set refcount [<on|off>]",          'r', set_refcount,     NULL, "|b", PHPDBG_ASYNC_SAFE),
+       PHPDBG_SET_COMMAND_D(oplog,        "usage: set oplog  [<output>]",            'O', set_oplog,        NULL, "|s"),
+       PHPDBG_SET_COMMAND_D(break,        "usage: set break id [<on|off>]",          'b', set_break,        NULL, "l|b"),
+       PHPDBG_SET_COMMAND_D(breaks,       "usage: set breaks [<on|off>]",            'B', set_breaks,       NULL, "|b"),
+       PHPDBG_SET_COMMAND_D(quiet,        "usage: set quiet [<on|off>]",             'q', set_quiet,        NULL, "|b"),
+       PHPDBG_SET_COMMAND_D(stepping,     "usage: set stepping [<line|op>]",         's', set_stepping,     NULL, "|s"),
+       PHPDBG_SET_COMMAND_D(refcount,     "usage: set refcount [<on|off>]",          'r', set_refcount,     NULL, "|b"),
        PHPDBG_END_COMMAND
 };
 
 PHPDBG_SET(prompt) /* {{{ */
 {
        if (!param || param->type == EMPTY_PARAM) {
-               phpdbg_writeln("setprompt", "str=\"%s\"", "Current prompt: %s", phpdbg_get_prompt(TSRMLS_C));
-       } else {
-               phpdbg_set_prompt(param->str TSRMLS_CC);
-       }
-
+               phpdbg_writeln("%s", phpdbg_get_prompt(TSRMLS_C));
+       } else phpdbg_set_prompt(param->str TSRMLS_CC);
+       
        return SUCCESS;
 } /* }}} */
 
@@ -63,21 +61,21 @@ PHPDBG_SET(break) /* {{{ */
                        if (param->next) {
                                if (param->next->num) {
                                        phpdbg_enable_breakpoint(param->num TSRMLS_CC);
-                               } else {
-                                       phpdbg_disable_breakpoint(param->num TSRMLS_CC);
-                               }
+                               } else phpdbg_disable_breakpoint(param->num TSRMLS_CC);
                        } else {
                                phpdbg_breakbase_t *brake = phpdbg_find_breakbase(param->num TSRMLS_CC);
                                if (brake) {
-                                       phpdbg_writeln("setbreak", "id=\"%ld\" active=\"%s\"", "Breakpoint #%ld %s", param->num, brake->disabled ? "off" : "on");
+                                       phpdbg_writeln(
+                                               "%s", brake->disabled ? "off" : "on");
                                } else {
-                                       phpdbg_error("setbreak", "type=\"nobreak\" id=\"%ld\"", "Failed to find breakpoint #%ld", param->num);
+                                       phpdbg_error("Failed to find breakpoint #%ld", param->num);
                                }
                        }
                } break;
 
                default:
-                       phpdbg_error("setbreak", "type=\"wrongargs\"", "set break used incorrectly: set break [id] <on|off>");
+                       phpdbg_error(
+                               "set break used incorrectly: set break [id] <on|off>");
        }
 
        return SUCCESS;
@@ -86,18 +84,18 @@ PHPDBG_SET(break) /* {{{ */
 PHPDBG_SET(breaks) /* {{{ */
 {
        if (!param || param->type == EMPTY_PARAM) {
-               phpdbg_writeln("setbreaks", "active=\"%s\"", "Breakpoints %s",PHPDBG_G(flags) & PHPDBG_IS_BP_ENABLED ? "on" : "off");
-       } else switch (param->type) {
+               phpdbg_writeln("%s",
+                       PHPDBG_G(flags) & PHPDBG_IS_BP_ENABLED ? "on" : "off");
+       } else switch (param->type) {   
                case NUMERIC_PARAM: {
                        if (param->num) {
                                phpdbg_enable_breakpoints(TSRMLS_C);
-                       } else {
-                               phpdbg_disable_breakpoints(TSRMLS_C);
-                       }
+                       } else phpdbg_disable_breakpoints(TSRMLS_C);
                } break;
 
                default:
-                       phpdbg_error("setbreaks", "type=\"wrongargs\"", "set breaks used incorrectly: set breaks <on|off>");
+                       phpdbg_error(
+                               "set break used incorrectly: set break [id] <on|off>");
        }
 
        return SUCCESS;
@@ -106,35 +104,41 @@ PHPDBG_SET(breaks) /* {{{ */
 #ifndef _WIN32
 PHPDBG_SET(color) /* {{{ */
 {
-       const phpdbg_color_t *color = phpdbg_get_color(param->next->str, param->next->len TSRMLS_CC);
-
+       const phpdbg_color_t *color = phpdbg_get_color(
+                       param->next->str, param->next->len TSRMLS_CC);
+       
        if (!color) {
-               phpdbg_error("setcolor", "type=\"nocolor\"", "Failed to find the requested color (%s)", param->next->str);
+               phpdbg_error(
+                       "Failed to find the requested color (%s)", param->next->str);
                return SUCCESS;
        }
-
+       
        switch (phpdbg_get_element(param->str, param->len TSRMLS_CC)) {
                case PHPDBG_COLOR_PROMPT:
-                       phpdbg_notice("setcolor", "type=\"prompt\" color=\"%s\" code=\"%s\"", "setting prompt color to %s (%s)", color->name, color->code);
+                       phpdbg_notice(
+                               "setting prompt color to %s (%s)", color->name, color->code);
                        if (PHPDBG_G(prompt)[1]) {
                                free(PHPDBG_G(prompt)[1]);
                                PHPDBG_G(prompt)[1]=NULL;
                        }
                        phpdbg_set_color(PHPDBG_COLOR_PROMPT, color TSRMLS_CC);
                break;
-
+               
                case PHPDBG_COLOR_ERROR:
-                       phpdbg_notice("setcolor", "type=\"error\" color=\"%s\" code=\"%s\"", "setting error color to %s (%s)", color->name, color->code);
+                       phpdbg_notice(
+                               "setting error color to %s (%s)", color->name, color->code);
                        phpdbg_set_color(PHPDBG_COLOR_ERROR, color TSRMLS_CC);
                break;
-
+               
                case PHPDBG_COLOR_NOTICE:
-                       phpdbg_notice("setcolor", "type=\"notice\" color=\"%s\" code=\"%s\"", "setting notice color to %s (%s)", color->name, color->code);
+                       phpdbg_notice(
+                               "setting notice color to %s (%s)", color->name, color->code);
                        phpdbg_set_color(PHPDBG_COLOR_NOTICE, color TSRMLS_CC);
                break;
-
+               
                default:
-                       phpdbg_error("setcolor", "type=\"invalidtype\"", "Failed to find the requested element (%s)", param->str);
+                       phpdbg_error(
+                               "Failed to find the requested element (%s)", param->str);
        }
 
        return SUCCESS;
@@ -143,7 +147,7 @@ PHPDBG_SET(color) /* {{{ */
 PHPDBG_SET(colors) /* {{{ */
 {
        if (!param || param->type == EMPTY_PARAM) {
-               phpdbg_writeln("setcolors", "active=\"%s\"", "Colors %s", PHPDBG_G(flags) & PHPDBG_IS_COLOURED ? "on" : "off");
+               phpdbg_writeln("%s", PHPDBG_G(flags) & PHPDBG_IS_COLOURED ? "on" : "off");
        } else switch (param->type) {
                case NUMERIC_PARAM: {
                        if (param->num) {
@@ -152,9 +156,10 @@ PHPDBG_SET(colors) /* {{{ */
                                PHPDBG_G(flags) &= ~PHPDBG_IS_COLOURED;
                        }
                } break;
-
+               
                default:
-                       phpdbg_error("setcolors", "type=\"wrongargs\"", "set colors used incorrectly: set colors <on|off>");
+                       phpdbg_error(
+                               "set colors used incorrectly: set colors <on|off>");
        }
 
        return SUCCESS;
@@ -164,7 +169,7 @@ PHPDBG_SET(colors) /* {{{ */
 PHPDBG_SET(oplog) /* {{{ */
 {
        if (!param || param->type == EMPTY_PARAM) {
-               phpdbg_notice("setoplog", "active=\"%s\"", "Oplog %s", PHPDBG_G(oplog) ? "on" : "off");
+               phpdbg_notice("Oplog %s", PHPDBG_G(oplog) ? "enabled" : "disabled");
        } else switch (param->type) {
                case STR_PARAM: {
                        /* open oplog */
@@ -172,15 +177,14 @@ PHPDBG_SET(oplog) /* {{{ */
 
                        PHPDBG_G(oplog) = fopen(param->str, "w+");
                        if (!PHPDBG_G(oplog)) {
-                               phpdbg_error("setoplog", "type=\"openfailure\" file=\"%s\"", "Failed to open %s for oplog", param->str);
+                               phpdbg_error("Failed to open %s for oplog", param->str);
                                PHPDBG_G(oplog) = old;
                        } else {
                                if (old) {
-                                       phpdbg_notice("setoplog", "type=\"closingold\"", "Closing previously open oplog");
+                                       phpdbg_notice("Closing previously open oplog");
                                        fclose(old);
                                }
-
-                               phpdbg_notice("setoplog", "file=\"%s\"", "Successfully opened oplog %s", param->str);
+                               phpdbg_notice("Successfully opened oplog %s", param->str);
                        }
                } break;
 
@@ -193,7 +197,8 @@ PHPDBG_SET(oplog) /* {{{ */
 PHPDBG_SET(quiet) /* {{{ */
 {
        if (!param || param->type == EMPTY_PARAM) {
-               phpdbg_writeln("setquiet", "active=\"%s\"", "Quietness %s", PHPDBG_G(flags) & PHPDBG_IS_QUIET ? "on" : "off");
+               phpdbg_writeln("Quietness %s", 
+                       PHPDBG_G(flags) & PHPDBG_IS_QUIET ? "on" : "off");
        } else switch (param->type) {
                case NUMERIC_PARAM: {
                        if (param->num) {
@@ -212,15 +217,18 @@ PHPDBG_SET(quiet) /* {{{ */
 PHPDBG_SET(stepping) /* {{{ */
 {
        if (!param || param->type == EMPTY_PARAM) {
-               phpdbg_writeln("setstepping", "type=\"%s\"", "Stepping %s", PHPDBG_G(flags) & PHPDBG_STEP_OPCODE ? "opcode" : "line");
+               phpdbg_writeln("Stepping %s",
+                       PHPDBG_G(flags) & PHPDBG_STEP_OPCODE ? "opcode" : "line");
        } else switch (param->type) {
-               case STR_PARAM: {
-                       if ((param->len == sizeof("opcode") - 1) && memcmp(param->str, "opcode", sizeof("opcode")) == SUCCESS) {
+               case STR_PARAM: {       
+                       if ((param->len == sizeof("opcode")-1) &&
+                               (memcmp(param->str, "opcode", sizeof("opcode")) == SUCCESS)) {
                                PHPDBG_G(flags) |= PHPDBG_STEP_OPCODE;
-                       } else if ((param->len == sizeof("line")-1) && memcmp(param->str, "line", sizeof("line")) == SUCCESS) {
+                       } else if ((param->len == sizeof("line")-1) &&
+                               (memcmp(param->str, "line", sizeof("line")) == SUCCESS)) {
                                PHPDBG_G(flags) &= ~PHPDBG_STEP_OPCODE;
                        } else {
-                               phpdbg_error("setstepping", "type=\"wrongargs\"", "usage set stepping [<opcode|line>]");
+                               phpdbg_error("usage set stepping [<opcode|line>]");
                        }
                } break;
 
@@ -233,7 +241,7 @@ PHPDBG_SET(stepping) /* {{{ */
 PHPDBG_SET(refcount) /* {{{ */
 {
        if (!param || param->type == EMPTY_PARAM) {
-               phpdbg_writeln("setrefcount", "active=\"%s\"", "Showing refcounts %s", PHPDBG_G(flags) & PHPDBG_IS_QUIET ? "on" : "off");
+               phpdbg_writeln("Refcount %s", PHPDBG_G(flags) & PHPDBG_IS_QUIET ? "on" : "off");
        } else switch (param->type) {
                case NUMERIC_PARAM: {
                        if (param->num) {
diff --git a/sapi/phpdbg/phpdbg_sigio_win32.c b/sapi/phpdbg/phpdbg_sigio_win32.c
deleted file mode 100644 (file)
index 158e034..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-   +----------------------------------------------------------------------+
-   | PHP Version 5                                                        |
-   +----------------------------------------------------------------------+
-   | Copyright (c) 7-4 The PHP Group                                      |
-   +----------------------------------------------------------------------+
-   | This source file is subject to version 3.01 of the PHP license,      |
-   | that is bundled with this package in the file LICENSE, and is        |
-   | available through the world-wide-web at the following url:           |
-   | http://www.php.net/license/3_01.txt                                  |
-   | If you did not receive a copy of the PHP license and are unable to   |
-   | obtain it through the world-wide-web, please send a note to          |
-   | license@php.net so we can mail you a copy immediately.               |
-   +----------------------------------------------------------------------+
-   | Authors: Anatol Belski <ab@php.net>                                  |
-   +----------------------------------------------------------------------+
-*/
-
-
-#include <signal.h>
-
-#include "phpdbg.h"
-#include "phpdbg_sigio_win32.h"
-
-
-ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
-
-
-VOID
-SigIoWatcherThread(VOID *p)
-{
-       zend_uchar sig;
-       struct win32_sigio_watcher_data *swd = (struct win32_sigio_watcher_data *)p;
-#ifdef ZTS
-       void ***tsrm_ls = swd->tsrm_ls;
-#endif
-
-top:
-       (void)phpdbg_consume_bytes(swd->fd, &sig, 1, -1 TSRMLS_CC);
-
-
-       if (3 == sig) {
-               /* XXX completely not sure it is done right here */
-               if (PHPDBG_G(flags) & PHPDBG_IS_INTERACTIVE) {
-                       if (raise(sig)) {
-                               goto top;
-                       }
-               }
-               if (PHPDBG_G(flags) & PHPDBG_IS_SIGNALED) {
-                       phpdbg_set_sigsafe_mem(&sig TSRMLS_CC);
-                       zend_try {
-                               phpdbg_force_interruption(TSRMLS_C);
-                       } zend_end_try();
-                       phpdbg_clear_sigsafe_mem(TSRMLS_C);
-                       goto end;
-               }
-               if (!(PHPDBG_G(flags) & PHPDBG_IS_INTERACTIVE)) {
-                       PHPDBG_G(flags) |= PHPDBG_IS_SIGNALED;
-               }
-end:
-               /* XXX set signaled flag to the caller thread, question is - whether it's needed */
-               ExitThread(sig);
-       } else {
-               goto top;
-       }
-}
-
-
-/* Start this only for the time of the run or eval command,
-for so long that the main thread is busy serving some debug
-session. */
-void
-sigio_watcher_start(void)
-{
-       TSRMLS_FETCH();
-
-       PHPDBG_G(swd).fd = PHPDBG_G(io)[PHPDBG_STDIN].fd;
-#ifdef ZTS
-       PHPDBG_G(swd).tsrm_ls = tsrm_ls;
-#endif
-
-       PHPDBG_G(sigio_watcher_thread) = CreateThread(
-               NULL,
-               0,
-               (LPTHREAD_START_ROUTINE)SigIoWatcherThread,
-               &PHPDBG_G(swd),
-               0,
-               NULL);
-}
-
-void
-sigio_watcher_stop(void)
-{
-       DWORD waited;
-       TSRMLS_FETCH();
-
-       if (INVALID_HANDLE_VALUE == PHPDBG_G(sigio_watcher_thread)) {
-               /* it probably did bail out already */
-               return;
-       }
-
-       waited = WaitForSingleObject(PHPDBG_G(sigio_watcher_thread), 300);
-
-       if (WAIT_OBJECT_0 != waited) {
-               if (!CancelSynchronousIo(PHPDBG_G(sigio_watcher_thread))) {
-                       /* error out */
-               }
-
-               if (!TerminateThread(PHPDBG_G(sigio_watcher_thread), 0)) {
-                       /* error out */
-               }
-       }
-
-       PHPDBG_G(swd).fd = -1;
-       PHPDBG_G(sigio_watcher_thread) = INVALID_HANDLE_VALUE;
-}
-
diff --git a/sapi/phpdbg/phpdbg_sigio_win32.h b/sapi/phpdbg/phpdbg_sigio_win32.h
deleted file mode 100644 (file)
index 8c8a381..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-   +----------------------------------------------------------------------+
-   | PHP Version 5                                                        |
-   +----------------------------------------------------------------------+
-   | Copyright (c) 7-4 The PHP Group                                      |
-   +----------------------------------------------------------------------+
-   | This source file is subject to version 3.01 of the PHP license,      |
-   | that is bundled with this package in the file LICENSE, and is        |
-   | available through the world-wide-web at the following url:           |
-   | http://www.php.net/license/3_01.txt                                  |
-   | If you did not receive a copy of the PHP license and are unable to   |
-   | obtain it through the world-wide-web, please send a note to          |
-   | license@php.net so we can mail you a copy immediately.               |
-   +----------------------------------------------------------------------+
-   | Authors: Anatol Belski <ab@php.net>                                  |
-   +----------------------------------------------------------------------+
-*/
-
-
-#ifndef PHPDBG_SIGIO_WIN32_H
-#define PHPDBG_SIGIO_WIN32_H
-
-#include "phpdbg.h"
-#include "phpdbg_prompt.h"
-#include "phpdbg_io.h"
-
-struct win32_sigio_watcher_data {
-#ifdef ZTS
-       void ***tsrm_ls;
-#endif
-       int fd;
-};
-
-void
-sigio_watcher_start(void);
-
-void
-sigio_watcher_stop(void);
-
-#endif /* PHPDBG_SIGIO_WIN32_H */
diff --git a/sapi/phpdbg/phpdbg_sigsafe.c b/sapi/phpdbg/phpdbg_sigsafe.c
deleted file mode 100644 (file)
index 7238ad1..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-#include "phpdbg_sigsafe.h"
-#include "phpdbg.h"
-
-ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
-
-static inline void zend_mm_init(zend_mm_heap *heap) {
-       zend_mm_free_block *p;
-       int i;
-
-       heap->free_bitmap = 0;
-       heap->large_free_bitmap = 0;
-#if ZEND_MM_CACHE
-       heap->cached = 0;
-       memset(heap->cache, 0, sizeof(heap->cache));
-#endif
-#if ZEND_MM_CACHE_STAT
-       for (i = 0; i < ZEND_MM_NUM_BUCKETS; i++) {
-               heap->cache_stat[i].count = 0;
-       }
-#endif
-       p = ZEND_MM_SMALL_FREE_BUCKET(heap, 0);
-       for (i = 0; i < ZEND_MM_NUM_BUCKETS; i++) {
-               p->next_free_block = p;
-               p->prev_free_block = p;
-               p = (zend_mm_free_block *)((char *)p + sizeof(zend_mm_free_block *) * 2);
-               heap->large_free_buckets[i] = NULL;
-       }
-       heap->rest_buckets[0] = heap->rest_buckets[1] = ZEND_MM_REST_BUCKET(heap);
-       heap->rest_count = 0;
-}
-
-static zend_mm_storage* zend_mm_mem_init(void *params) {
-       TSRMLS_FETCH();
-
-       return &PHPDBG_G(sigsafe_mem).storage;
-}
-
-static void zend_mm_mem_dummy(zend_mm_storage *storage) {
-}
-
-#define STR(x) #x
-#define EXP_STR(x) STR(x)
-
-static zend_mm_segment* zend_mm_mem_alloc(zend_mm_storage *storage, size_t size) {
-       TSRMLS_FETCH();
-
-       if (EXPECTED(size == PHPDBG_SIGSAFE_MEM_SIZE && !PHPDBG_G(sigsafe_mem).allocated)) {
-               PHPDBG_G(sigsafe_mem).allocated = 1;
-               return (zend_mm_segment *) PHPDBG_G(sigsafe_mem).mem;
-       }
-
-       write(PHPDBG_G(io)[PHPDBG_STDERR].fd, ZEND_STRL("Tried to allocate more than " EXP_STR(PHPDBG_SIGSAFE_MEM_SIZE) " bytes from stack memory in signal handler ... bailing out of signal handler\n"));
-
-       if (*EG(bailout)) {
-               LONGJMP(*EG(bailout), FAILURE);
-       }
-
-       write(PHPDBG_G(io)[PHPDBG_STDERR].fd, ZEND_STRL("Bailed out without a bailout address in signal handler!\n"));
-
-       return NULL;
-}
-
-static zend_mm_segment* zend_mm_mem_realloc(zend_mm_storage *storage, zend_mm_segment *ptr, size_t size) {
-       return zend_mm_mem_alloc(storage, size);
-}
-
-static void zend_mm_mem_free(zend_mm_storage *storage, zend_mm_segment *ptr) {
-}
-
-static const zend_mm_mem_handlers phpdbg_handlers_sigsafe_mem = { "stack", zend_mm_mem_init, zend_mm_mem_dummy, zend_mm_mem_dummy, zend_mm_mem_alloc, zend_mm_mem_realloc, zend_mm_mem_free };
-
-void phpdbg_set_sigsafe_mem(char *buffer TSRMLS_DC) {
-       phpdbg_signal_safe_mem *mem = &PHPDBG_G(sigsafe_mem);
-       mem->old_heap = zend_mm_set_heap(&mem->heap TSRMLS_CC);
-       mem->mem = buffer;
-       mem->allocated = 0;
-
-       mem->storage.handlers = &phpdbg_handlers_sigsafe_mem;
-       mem->heap.storage = &mem->storage;
-       mem->heap.block_size = PHPDBG_SIGSAFE_MEM_SIZE;
-       mem->heap.compact_size = 0;
-       mem->heap.segments_list = NULL;
-       zend_mm_init(&mem->heap);
-#if ZEND_MM_CACHE_STAT
-       memset(mem->heap.cache_stat, 0, sizeof(mem->heap.cache_stat));
-#endif
-       mem->heap.use_zend_alloc = 1;
-       mem->heap.real_size = 0;
-       mem->heap.overflow = 0;
-       mem->heap.real_peak = 0;
-       mem->heap.limit = PHPDBG_SIGSAFE_MEM_SIZE;
-       mem->heap.size = 0;
-       mem->heap.peak = 0;
-       mem->heap.internal = 0;
-       mem->heap.reserve = NULL;
-       mem->heap.reserve_size = 0;
-}
-
-zend_mm_heap *phpdbg_original_heap_sigsafe_mem(TSRMLS_D) {
-       return PHPDBG_G(sigsafe_mem).old_heap;
-}
-
-void phpdbg_clear_sigsafe_mem(TSRMLS_D) {
-       zend_mm_set_heap(phpdbg_original_heap_sigsafe_mem(TSRMLS_C) TSRMLS_CC);
-       PHPDBG_G(sigsafe_mem).mem = NULL;
-}
-
-zend_bool phpdbg_active_sigsafe_mem(TSRMLS_D) {
-       return !!PHPDBG_G(sigsafe_mem).mem;
-}
-
diff --git a/sapi/phpdbg/phpdbg_sigsafe.h b/sapi/phpdbg/phpdbg_sigsafe.h
deleted file mode 100644 (file)
index 6ed74f5..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef PHPDBG_SIGSAFE_H
-#define PHPDBG_SIGSAFE_H
-
-#include "zend_mm_structs.h"
-
-#define PHPDBG_SIGSAFE_MEM_SIZE (1 << 20)
-
-typedef struct {
-       char *mem;
-       zend_bool allocated;
-       zend_mm_heap heap;
-       zend_mm_heap *old_heap;
-       zend_mm_storage storage;
-} phpdbg_signal_safe_mem;
-
-#include "phpdbg.h"
-
-zend_bool phpdbg_active_sigsafe_mem(TSRMLS_D);
-
-void phpdbg_set_sigsafe_mem(char *mem TSRMLS_DC);
-void phpdbg_clear_sigsafe_mem(TSRMLS_D);
-
-zend_mm_heap *phpdbg_original_heap_sigsafe_mem(TSRMLS_D);
-
-#endif
index 85b6eeb3b52723ed404387f227f4cd38091d2263..3ce2fade17de7ad2435b76fdcbb7e33c8732678c 100644 (file)
    +----------------------------------------------------------------------+
 */
 
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
 #include "zend.h"
-
 #include "php.h"
+#include "spprintf.h"
 #include "phpdbg.h"
 #include "phpdbg_opcode.h"
 #include "phpdbg_utils.h"
 
-#if defined(HAVE_SYS_IOCTL_H)
+#ifdef _WIN32
+#      include "win32/time.h"
+#elif defined(HAVE_SYS_IOCTL_H) 
 #      include "sys/ioctl.h"
 #      ifndef GWINSZ_IN_SYS_IOCTL
 #              include <termios.h>
@@ -123,12 +128,12 @@ PHPDBG_API int phpdbg_is_class_method(const char *str, size_t len, char **class,
        }
 
        if (class != NULL) {
-
+       
                if (str[0] == '\\') {
                        str++;
                        len--;
                }
-
+               
                *class = estrndup(str, sep - str);
                (*class)[sep - str] = 0;
        }
@@ -219,6 +224,103 @@ PHPDBG_API char *phpdbg_trim(const char *str, size_t len, size_t *new_len) /* {{
 
 } /* }}} */
 
+PHPDBG_API int phpdbg_print(int type TSRMLS_DC, FILE *fp, const char *format, ...) /* {{{ */
+{
+       int rc = 0;
+       char *buffer = NULL;
+       va_list args;
+
+       if (format != NULL && strlen(format) > 0L) {
+               va_start(args, format);
+               vspprintf(&buffer, 0, format, args);
+               va_end(args);
+       }
+
+       /* TODO(anyone) colours */
+
+       switch (type) {
+               case P_ERROR:
+                       if (PHPDBG_G(flags) & PHPDBG_IS_COLOURED) {
+                               rc = fprintf(fp,
+                                               "\033[%sm[%s]\033[0m\n",
+                                               PHPDBG_G(colors)[PHPDBG_COLOR_ERROR]->code, buffer);
+                       } else {
+                               rc = fprintf(fp, "[%s]\n", buffer);
+                       }
+               break;
+
+               case P_NOTICE:
+                       if (PHPDBG_G(flags) & PHPDBG_IS_COLOURED) {
+                               rc = fprintf(fp,
+                                               "\033[%sm[%s]\033[0m\n",
+                                               PHPDBG_G(colors)[PHPDBG_COLOR_NOTICE]->code, buffer);
+                       } else {
+                               rc = fprintf(fp, "[%s]\n", buffer);
+                       }
+               break;
+
+               case P_WRITELN: {
+                       if (buffer) {
+                               rc = fprintf(fp, "%s\n", buffer);
+                       } else {
+                               rc = fprintf(fp, "\n");
+                       }
+               } break;
+
+               case P_WRITE:
+                       if (buffer) {
+                               rc = fprintf(fp, "%s", buffer);
+                       }
+               break;
+
+               /* no formatting on logging output */
+               case P_LOG:
+                       if (buffer) {
+                               struct timeval tp;
+                               if (gettimeofday(&tp, NULL) == SUCCESS) {
+                                       rc = fprintf(fp, "[%ld %.8F]: %s\n", tp.tv_sec, tp.tv_usec / 1000000.00, buffer);
+                               } else {
+                                       rc = FAILURE;
+                               }
+                       }
+                       break;
+       }
+
+       if (buffer) {
+               efree(buffer);
+       }
+
+       return rc;
+} /* }}} */
+
+PHPDBG_API int phpdbg_rlog(FILE *fp, const char *fmt, ...) { /* {{{ */
+       int rc = 0;
+
+       va_list args;
+       struct timeval tp;
+
+       va_start(args, fmt);
+       if (gettimeofday(&tp, NULL) == SUCCESS) {
+               char friendly[100];
+               char *format = NULL, *buffer = NULL;
+               const time_t tt = tp.tv_sec;
+
+               strftime(friendly, 100, "%a %b %d %T.%%04d %Y", localtime(&tt));
+               asprintf(
+                       &buffer, friendly, tp.tv_usec/1000);
+               asprintf(
+                       &format, "[%s]: %s\n", buffer, fmt);
+               rc = vfprintf(
+                       fp, format, args);
+
+               free(format);
+               free(buffer);
+       }
+       va_end(args);
+
+       return rc;
+} /* }}} */
+
 PHPDBG_API const phpdbg_color_t *phpdbg_get_color(const char *name, size_t name_length TSRMLS_DC) /* {{{ */
 {
        const phpdbg_color_t *color = colors;
@@ -226,13 +328,15 @@ PHPDBG_API const phpdbg_color_t *phpdbg_get_color(const char *name, size_t name_
        while (color && color->name) {
                if (name_length == color->name_length &&
                        memcmp(name, color->name, name_length) == SUCCESS) {
-                       phpdbg_debug("phpdbg_get_color(%s, %lu): %s", name, name_length, color->code);
+                       phpdbg_debug(
+                               "phpdbg_get_color(%s, %lu): %s", name, name_length, color->code);
                        return color;
                }
                ++color;
        }
 
-       phpdbg_debug("phpdbg_get_color(%s, %lu): failed", name, name_length);
+       phpdbg_debug(
+               "phpdbg_get_color(%s, %lu): failed", name, name_length);
 
        return NULL;
 } /* }}} */
@@ -258,7 +362,7 @@ PHPDBG_API const phpdbg_color_t* phpdbg_get_colors(TSRMLS_D) /* {{{ */
 
 PHPDBG_API int phpdbg_get_element(const char *name, size_t len TSRMLS_DC) {
        const phpdbg_element_t *element = elements;
-
+       
        while (element && element->name) {
                if (len == element->name_length) {
                        if (strncasecmp(name, element->name, len) == SUCCESS) {
@@ -267,7 +371,7 @@ PHPDBG_API int phpdbg_get_element(const char *name, size_t len TSRMLS_DC) {
                }
                element++;
        }
-
+       
        return PHPDBG_COLOR_INVALID;
 }
 
@@ -316,7 +420,7 @@ PHPDBG_API const char *phpdbg_get_prompt(TSRMLS_D) /* {{{ */
 
 int phpdbg_rebuild_symtable(TSRMLS_D) {
        if (!EG(active_op_array)) {
-               phpdbg_error("inactive", "type=\"op_array\"", "No active op array!");
+               phpdbg_error("No active op array!");
                return FAILURE;
        }
 
@@ -324,7 +428,7 @@ int phpdbg_rebuild_symtable(TSRMLS_D) {
                zend_rebuild_symbol_table(TSRMLS_C);
 
                if (!EG(active_symbol_table)) {
-                       phpdbg_error("inactive", "type=\"symbol_table\"", "No active symbol table!");
+                       phpdbg_error("No active symbol table!");
                        return FAILURE;
                }
        }
@@ -334,13 +438,13 @@ int phpdbg_rebuild_symtable(TSRMLS_D) {
 
 PHPDBG_API int phpdbg_get_terminal_width(TSRMLS_D) /* {{{ */
 {
-       int columns;
+       int columns;    
 #ifdef _WIN32
        CONSOLE_SCREEN_BUFFER_INFO csbi;
 
        GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
        columns = csbi.srWindow.Right - csbi.srWindow.Left + 1;
-#elif defined(HAVE_SYS_IOCTL_H) && defined(TIOCGWINSZ)
+#elif defined(HAVE_SYS_IOCTL_H) && defined (TIOCGWINSZ)
        struct winsize w;
 
        columns = ioctl(fileno(stdout), TIOCGWINSZ, &w) == 0 ? w.ws_col : 80;
@@ -349,294 +453,3 @@ PHPDBG_API int phpdbg_get_terminal_width(TSRMLS_D) /* {{{ */
 #endif
        return columns;
 } /* }}} */
-
-PHPDBG_API void phpdbg_set_async_io(int fd) {
-#ifndef _WIN32
-       int flags;
-       fcntl(STDIN_FILENO, F_SETOWN, getpid());
-       flags = fcntl(STDIN_FILENO, F_GETFL);
-       fcntl(STDIN_FILENO, F_SETFL, flags | FASYNC);
-#endif
-}
-
-int phpdbg_safe_class_lookup(const char *name, int name_length, zend_class_entry ***ce TSRMLS_DC) {
-       if (PHPDBG_G(flags) & PHPDBG_IN_SIGNAL_HANDLER) {
-               char *lc_name, *lc_free;
-               int lc_length, ret = FAILURE;
-
-               if (name == NULL || !name_length) {
-                       return FAILURE;
-               }
-
-               lc_free = lc_name = emalloc(name_length + 1);
-               zend_str_tolower_copy(lc_name, name, name_length);
-               lc_length = name_length + 1;
-
-               if (lc_name[0] == '\\') {
-                       lc_name += 1;
-                       lc_length -= 1;
-               }
-
-               phpdbg_try_access {
-                       ret = zend_hash_find(EG(class_table), lc_name, lc_length, (void **) &ce);
-               } phpdbg_catch_access {
-                       phpdbg_error("signalsegv", "class=\"%.*s\"", "Could not fetch class %.*s, invalid data source", name_length, name);
-               } phpdbg_end_try_access();
-
-               efree(lc_free);
-               return ret;
-       } else {
-               return zend_lookup_class(name, name_length, ce TSRMLS_CC);
-       }
-}
-
-char *phpdbg_get_property_key(char *key) {
-       if (*key != 0) {
-               return key;
-       }
-       return strchr(key + 1, 0) + 1;
-}
-
-static int phpdbg_parse_variable_arg_wrapper(char *name, size_t len, char *keyname, size_t keylen, HashTable *parent, zval **zv, phpdbg_parse_var_func callback TSRMLS_DC) {
-       return callback(name, len, keyname, keylen, parent, zv TSRMLS_CC);
-}
-
-PHPDBG_API int phpdbg_parse_variable(char *input, size_t len, HashTable *parent, size_t i, phpdbg_parse_var_func callback, zend_bool silent TSRMLS_DC) {
-       return phpdbg_parse_variable_with_arg(input, len, parent, i, (phpdbg_parse_var_with_arg_func) phpdbg_parse_variable_arg_wrapper, silent, callback TSRMLS_CC);
-}
-
-PHPDBG_API int phpdbg_parse_variable_with_arg(char *input, size_t len, HashTable *parent, size_t i, phpdbg_parse_var_with_arg_func callback, zend_bool silent, void *arg TSRMLS_DC) {
-       int ret = FAILURE;
-       zend_bool new_index = 1;
-       char *last_index;
-       size_t index_len = 0;
-       zval **zv;
-
-       if (len < 2 || *input != '$') {
-               goto error;
-       }
-
-       while (i++ < len) {
-               if (i == len) {
-                       new_index = 1;
-               } else {
-                       switch (input[i]) {
-                               case '[':
-                                       new_index = 1;
-                                       break;
-                               case ']':
-                                       break;
-                               case '>':
-                                       if (last_index[index_len - 1] == '-') {
-                                               new_index = 1;
-                                               index_len--;
-                                       }
-                                       break;
-
-                               default:
-                                       if (new_index) {
-                                               last_index = input + i;
-                                               new_index = 0;
-                                       }
-                                       if (input[i - 1] == ']') {
-                                               goto error;
-                                       }
-                                       index_len++;
-                       }
-               }
-
-               if (new_index && index_len == 0) {
-                       HashPosition position;
-                       for (zend_hash_internal_pointer_reset_ex(parent, &position);
-                            zend_hash_get_current_data_ex(parent, (void **)&zv, &position) == SUCCESS;
-                            zend_hash_move_forward_ex(parent, &position)) {
-                               if (i == len || (i == len - 1 && input[len - 1] == ']')) {
-                                       zval *key = emalloc(sizeof(zval));
-                                       size_t namelen;
-                                       char *name;
-                                       char *keyname = estrndup(last_index, index_len);
-                                       zend_hash_get_current_key_zval_ex(parent, key, &position);
-                                       convert_to_string(key);
-                                       name = emalloc(i + Z_STRLEN_P(key) + 2);
-                                       namelen = sprintf(name, "%.*s%s%s", (int)i, input, phpdbg_get_property_key(Z_STRVAL_P(key)), input[len - 1] == ']'?"]":"");
-                                       efree(key);
-
-                                       ret = callback(name, namelen, keyname, index_len, parent, zv, arg TSRMLS_CC) == SUCCESS || ret == SUCCESS?SUCCESS:FAILURE;
-                               } else if (Z_TYPE_PP(zv) == IS_OBJECT) {
-                                       phpdbg_parse_variable_with_arg(input, len, Z_OBJPROP_PP(zv), i, callback, silent, arg TSRMLS_CC);
-                               } else if (Z_TYPE_PP(zv) == IS_ARRAY) {
-                                       phpdbg_parse_variable_with_arg(input, len, Z_ARRVAL_PP(zv), i, callback, silent, arg TSRMLS_CC);
-                               } else {
-                                       /* Ignore silently */
-                               }
-                       }
-                       return ret;
-               } else if (new_index) {
-                       char last_chr = last_index[index_len];
-                       last_index[index_len] = 0;
-                       if (zend_symtable_find(parent, last_index, index_len + 1, (void **)&zv) == FAILURE) {
-                               if (!silent) {
-                                       phpdbg_error("variable", "type=\"undefined\" variable=\"%.*s\"", "%.*s is undefined", (int) i, input);
-                               }
-                               return FAILURE;
-                       }
-                       last_index[index_len] = last_chr;
-                       if (i == len) {
-                               char *name = estrndup(input, len);
-                               char *keyname = estrndup(last_index, index_len);
-
-                               ret = callback(name, len, keyname, index_len, parent, zv, arg TSRMLS_CC) == SUCCESS || ret == SUCCESS?SUCCESS:FAILURE;
-                       } else if (Z_TYPE_PP(zv) == IS_OBJECT) {
-                               parent = Z_OBJPROP_PP(zv);
-                       } else if (Z_TYPE_PP(zv) == IS_ARRAY) {
-                               parent = Z_ARRVAL_PP(zv);
-                       } else {
-                               phpdbg_error("variable", "type=\"notiterable\" variable=\"%.*s\"", "%.*s is nor an array nor an object", (int) i, input);
-                               return FAILURE;
-                       }
-                       index_len = 0;
-               }
-       }
-
-       return ret;
-       error:
-               phpdbg_error("variable", "type=\"invalidinput\"", "Malformed input");
-               return FAILURE;
-}
-
-static int phpdbg_xml_array_element_dump(zval **zv TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key) {
-       phpdbg_xml("<element");
-
-       phpdbg_try_access {
-               if (hash_key->nKeyLength == 0) { /* numeric key */
-                       phpdbg_xml(" name=\"%ld\"", hash_key->h);
-               } else { /* string key */
-                       phpdbg_xml(" name=\"%.*s\"", hash_key->nKeyLength - 1, hash_key->arKey);
-               }
-       } phpdbg_catch_access {
-               phpdbg_xml(" severity=\"error\" ></element>");
-               return 0;
-       } phpdbg_end_try_access();
-
-       phpdbg_xml(">");
-
-       phpdbg_xml_var_dump(zv TSRMLS_CC);
-
-       phpdbg_xml("</element>");
-
-       return 0;
-}
-
-static int phpdbg_xml_object_property_dump(zval **zv TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key) {
-       phpdbg_xml("<property");
-
-       phpdbg_try_access {
-               if (hash_key->nKeyLength == 0) { /* numeric key */
-                       phpdbg_xml(" name=\"%ld\"", hash_key->h);
-               } else { /* string key */
-                       const char *prop_name, *class_name;
-                       int unmangle = zend_unmangle_property_name(hash_key->arKey, hash_key->nKeyLength - 1, &class_name, &prop_name);
-
-                       if (class_name && unmangle == SUCCESS) {
-                               phpdbg_xml(" name=\"%s\"", prop_name);
-                               if (class_name[0] == '*') {
-                                       phpdbg_xml(" protection=\"protected\"");
-                               } else {
-                                       phpdbg_xml(" class=\"%s\" protection=\"private\"", class_name);
-                               }
-                       } else {
-                               phpdbg_xml(" name=\"%.*s\" protection=\"public\"", hash_key->nKeyLength - 1, hash_key->arKey);
-                       }
-               }
-       } phpdbg_catch_access {
-               phpdbg_xml(" severity=\"error\" ></property>");
-               return 0;
-       } phpdbg_end_try_access();
-
-       phpdbg_xml(">");
-
-       phpdbg_xml_var_dump(zv TSRMLS_CC);
-
-       phpdbg_xml("</property>");
-
-       return 0;
-}
-
-#define COMMON (Z_ISREF_PP(zv) ? "&" : "")
-
-PHPDBG_API void phpdbg_xml_var_dump(zval **zv TSRMLS_DC) {
-       HashTable *myht;
-       const char *class_name;
-       zend_uint class_name_len;
-       int (*element_dump_func)(zval** TSRMLS_DC, int, va_list, zend_hash_key*);
-       int is_temp;
-
-       phpdbg_try_access {
-               switch (Z_TYPE_PP(zv)) {
-                       case IS_BOOL:
-                               phpdbg_xml("<bool refstatus=\"%s\" value=\"%s\" />", COMMON, Z_LVAL_PP(zv) ? "true" : "false");
-                               break;
-                       case IS_NULL:
-                               phpdbg_xml("<null refstatus=\"%s\" />", COMMON);
-                               break;
-                       case IS_LONG:
-                               phpdbg_xml("<int refstatus=\"%s\" value=\"%ld\" />", COMMON, Z_LVAL_PP(zv));
-                               break;
-                       case IS_DOUBLE:
-                               phpdbg_xml("<float refstatus=\"%s\" value=\"%.*G\" />", COMMON, (int) EG(precision), Z_DVAL_PP(zv));
-                               break;
-                       case IS_STRING:
-                               phpdbg_xml("<string refstatus=\"%s\" length=\"%d\" value=\"%.*s\" />", COMMON, Z_STRLEN_PP(zv), Z_STRLEN_PP(zv), Z_STRVAL_PP(zv));
-                                       break;
-                       case IS_ARRAY:
-                               myht = Z_ARRVAL_PP(zv);
-                               if (++myht->nApplyCount > 1) {
-                                       phpdbg_xml("<recursion />");
-                                       --myht->nApplyCount;
-                                       break;
-                               }
-                               phpdbg_xml("<array refstatus=\"%s\" num=\"%d\">", COMMON, zend_hash_num_elements(myht));
-                               element_dump_func = phpdbg_xml_array_element_dump;
-                               is_temp = 0;
-                               goto head_done;
-                       case IS_OBJECT:
-                               myht = Z_OBJDEBUG_PP(zv, is_temp);
-                               if (myht && ++myht->nApplyCount > 1) {
-                                       phpdbg_xml("<recursion />");
-                                       --myht->nApplyCount;
-                                       break;
-                               }
-       
-                               if (Z_OBJ_HANDLER(**zv, get_class_name)) {
-                                       Z_OBJ_HANDLER(**zv, get_class_name)(*zv, &class_name, &class_name_len, 0 TSRMLS_CC);
-                                       phpdbg_xml("<object refstatus=\"%s\" class=\"%s\" id=\"%d\" num=\"%d\">", COMMON, class_name, Z_OBJ_HANDLE_PP(zv), myht ? zend_hash_num_elements(myht) : 0);
-                                       efree((char*)class_name);
-                               } else {
-                                       phpdbg_xml("<object refstatus=\"%s\" class=\"\" id=\"%d\" num=\"%d\">", COMMON, Z_OBJ_HANDLE_PP(zv), myht ? zend_hash_num_elements(myht) : 0);
-                               }
-                               element_dump_func = phpdbg_xml_object_property_dump;
-head_done:
-                               if (myht) {
-                                       zend_hash_apply_with_arguments(myht TSRMLS_CC, (apply_func_args_t) element_dump_func, 0);
-                                       --myht->nApplyCount;
-                                       if (is_temp) {
-                                               zend_hash_destroy(myht);
-                                               efree(myht);
-                                       }
-                               }
-                               if (Z_TYPE_PP(zv) == IS_ARRAY) {
-                                       phpdbg_xml("</array>");
-                               } else {
-                                       phpdbg_xml("</object>");
-                               }
-                               break;
-                       case IS_RESOURCE: {
-                               const char *type_name = zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(zv) TSRMLS_CC);
-                               phpdbg_xml("<resource refstatus=\"%s\" id=\"%ld\" type=\"%ld\" />", COMMON, Z_LVAL_PP(zv), type_name ? type_name : "unknown");
-                               break;
-                       }
-                       default:
-                               break;
-               }
-       } phpdbg_end_try_access();
-}
index 9038aa7457996de6bc28353fc562d64a27170242..56bacfc45961c5491498f085e011b41bbf882fef 100644 (file)
@@ -33,6 +33,52 @@ PHPDBG_API char *phpdbg_resolve_path(const char* TSRMLS_DC);
 PHPDBG_API char *phpdbg_trim(const char*, size_t, size_t*);
 PHPDBG_API const zend_function *phpdbg_get_function(const char*, const char* TSRMLS_DC);
 
+/**
+ * Error/notice/formatting helpers
+ */
+enum {
+       P_ERROR  = 1,
+       P_NOTICE,
+       P_WRITELN,
+       P_WRITE,
+       P_LOG
+};
+
+#ifdef ZTS
+PHPDBG_API int phpdbg_print(int TSRMLS_DC, FILE*, const char*, ...) PHP_ATTRIBUTE_FORMAT(printf, 4, 5);
+#else
+PHPDBG_API int phpdbg_print(int TSRMLS_DC, FILE*, const char*, ...) PHP_ATTRIBUTE_FORMAT(printf, 3, 4);
+#endif
+
+PHPDBG_API int phpdbg_rlog(FILE *stream, const char *fmt, ...);
+
+#define phpdbg_error(fmt, ...)              phpdbg_print(P_ERROR   TSRMLS_CC, PHPDBG_G(io)[PHPDBG_STDOUT], fmt, ##__VA_ARGS__)
+#define phpdbg_notice(fmt, ...)             phpdbg_print(P_NOTICE  TSRMLS_CC, PHPDBG_G(io)[PHPDBG_STDOUT], fmt, ##__VA_ARGS__)
+#define phpdbg_writeln(fmt, ...)            phpdbg_print(P_WRITELN TSRMLS_CC, PHPDBG_G(io)[PHPDBG_STDOUT], fmt, ##__VA_ARGS__)
+#define phpdbg_write(fmt, ...)              phpdbg_print(P_WRITE   TSRMLS_CC, PHPDBG_G(io)[PHPDBG_STDOUT], fmt, ##__VA_ARGS__)
+#define phpdbg_log(fmt, ...)                phpdbg_print(P_LOG     TSRMLS_CC, PHPDBG_G(io)[PHPDBG_STDOUT], fmt, ##__VA_ARGS__)
+
+#define phpdbg_error_ex(out, fmt, ...)      phpdbg_print(P_ERROR   TSRMLS_CC, out, fmt, ##__VA_ARGS__)
+#define phpdbg_notice_ex(out, fmt, ...)     phpdbg_print(P_NOTICE  TSRMLS_CC, out, fmt, ##__VA_ARGS__)
+#define phpdbg_writeln_ex(out, fmt, ...)    phpdbg_print(P_WRITELN TSRMLS_CC, out, fmt, ##__VA_ARGS__)
+#define phpdbg_write_ex(out, fmt, ...)      phpdbg_print(P_WRITE   TSRMLS_CC, out, fmt, ##__VA_ARGS__)
+#define phpdbg_log_ex(out, fmt, ...)        phpdbg_print(P_LOG     TSRMLS_CC, out, fmt, ##__VA_ARGS__)
+
+#if PHPDBG_DEBUG
+#      define phpdbg_debug(fmt, ...) phpdbg_print(P_LOG   TSRMLS_CC, PHPDBG_G(io)[PHPDBG_STDERR], fmt, ##__VA_ARGS__)
+#else
+#      define phpdbg_debug(fmt, ...)
+#endif
+
+/* {{{ For writing blank lines */
+#define EMPTY NULL /* }}} */
+
+/* {{{ For prompt lines */
+#define PROMPT "phpdbg>" /* }}} */
+
+/* {{{ For separation */
+#define SEPARATE "------------------------------------------------" /* }}} */
+
 /* {{{ Color Management */
 #define PHPDBG_COLOR_LEN 12
 #define PHPDBG_COLOR_D(color, code) \
@@ -66,7 +112,7 @@ typedef struct _phpdbg_element_t {
 PHPDBG_API const phpdbg_color_t *phpdbg_get_color(const char *name, size_t name_length TSRMLS_DC);
 PHPDBG_API void phpdbg_set_color(int element, const phpdbg_color_t *color TSRMLS_DC);
 PHPDBG_API void phpdbg_set_color_ex(int element, const char *name, size_t name_length TSRMLS_DC);
-PHPDBG_API const phpdbg_color_t *phpdbg_get_colors(TSRMLS_D);
+PHPDBG_API const phpdbg_color_t* phpdbg_get_colors(TSRMLS_D); 
 PHPDBG_API int phpdbg_get_element(const char *name, size_t len TSRMLS_DC); /* }}} */
 
 /* {{{ Prompt Management */
@@ -76,8 +122,6 @@ PHPDBG_API const char *phpdbg_get_prompt(TSRMLS_D); /* }}} */
 /* {{{ Console Width */
 PHPDBG_API int phpdbg_get_terminal_width(TSRMLS_D); /* }}} */
 
-PHPDBG_API void phpdbg_set_async_io(int fd);
-
 int phpdbg_rebuild_symtable(TSRMLS_D);
 
 #if PHP_VERSION_ID < 50500
@@ -100,41 +144,4 @@ static void zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key, Ha
 }
 #endif
 
-int phpdbg_safe_class_lookup(const char *name, int name_length, zend_class_entry ***ce TSRMLS_DC);
-
-char *phpdbg_get_property_key(char *key);
-
-typedef int (*phpdbg_parse_var_func)(char *name, size_t len, char *keyname, size_t keylen, HashTable *parent, zval **zv TSRMLS_DC);
-typedef int (*phpdbg_parse_var_with_arg_func)(char *name, size_t len, char *keyname, size_t keylen, HashTable *parent, zval **zv, void *arg TSRMLS_DC);
-
-PHPDBG_API int phpdbg_parse_variable(char *input, size_t len, HashTable *parent, size_t i, phpdbg_parse_var_func callback, zend_bool silent TSRMLS_DC);
-PHPDBG_API int phpdbg_parse_variable_with_arg(char *input, size_t len, HashTable *parent, size_t i, phpdbg_parse_var_with_arg_func callback, zend_bool silent, void *arg TSRMLS_DC);
-
-PHPDBG_API void phpdbg_xml_var_dump(zval **zv TSRMLS_DC);
-
-#ifdef ZTS
-#define PHPDBG_OUTPUT_BACKUP_DEFINES() \
-       zend_output_globals *output_globals_ptr; \
-       zend_output_globals original_output_globals; \
-       output_globals_ptr = (zend_output_globals *) (*((void ***) tsrm_ls))[TSRM_UNSHUFFLE_RSRC_ID(output_globals_id)];
-#else
-#define PHPDBG_OUTPUT_BACKUP_DEFINES() \
-       zend_output_globals *output_globals_ptr; \
-       zend_output_globals original_output_globals; \
-       output_globals_ptr = &output_globals;
-#endif
-
-#define PHPDBG_OUTPUT_BACKUP_SWAP() \
-       original_output_globals = *output_globals_ptr; \
-       memset(output_globals_ptr, 0, sizeof(zend_output_globals)); \
-       php_output_activate(TSRMLS_C);
-
-#define PHPDBG_OUTPUT_BACKUP() \
-       PHPDBG_OUTPUT_BACKUP_DEFINES() \
-       PHPDBG_OUTPUT_BACKUP_SWAP()
-
-#define PHPDBG_OUTPUT_BACKUP_RESTORE() \
-       php_output_deactivate(TSRMLS_C); \
-       *output_globals_ptr = original_output_globals;
-
 #endif /* PHPDBG_UTILS_H */
diff --git a/sapi/phpdbg/phpdbg_wait.c b/sapi/phpdbg/phpdbg_wait.c
deleted file mode 100644 (file)
index 180ae6a..0000000
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
-   +----------------------------------------------------------------------+
-   | PHP Version 5                                                        |
-   +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2014 The PHP Group                                |
-   +----------------------------------------------------------------------+
-   | This source file is subject to version 3.01 of the PHP license,      |
-   | that is bundled with this package in the file LICENSE, and is        |
-   | available through the world-wide-web at the following url:           |
-   | http://www.php.net/license/3_01.txt                                  |
-   | If you did not receive a copy of the PHP license and are unable to   |
-   | obtain it through the world-wide-web, please send a note to          |
-   | license@php.net so we can mail you a copy immediately.               |
-   +----------------------------------------------------------------------+
-   | Authors: Bob Weinand <bwoebi@php.net>                                |
-   +----------------------------------------------------------------------+
-*/
-
-#include "phpdbg_wait.h"
-#include "phpdbg_prompt.h"
-#include "ext/standard/php_var.h"
-#include "ext/standard/basic_functions.h"
-
-ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
-
-static void phpdbg_rebuild_http_globals_array(int type, const char *name TSRMLS_DC) {
-       zval **zvpp;
-       if (PG(http_globals)[type]) {
-               zval_dtor(PG(http_globals)[type]);
-       }
-       if (zend_hash_find(&EG(symbol_table), name, strlen(name) + 1, (void **) &zvpp) == SUCCESS) {
-               Z_SET_REFCOUNT_PP(zvpp, 2);
-               PG(http_globals)[type] = *zvpp;
-       }
-}
-
-
-static int phpdbg_dearm_autoglobals(zend_auto_global *auto_global TSRMLS_DC) {
-       if (auto_global->name_len != sizeof("GLOBALS") - 1 || memcmp(auto_global->name, "GLOBALS", sizeof("GLOBALS") - 1)) {
-               auto_global->armed = 0;
-       }
-
-       return ZEND_HASH_APPLY_KEEP;
-}
-
-typedef struct {
-       HashTable *ht[2];
-       HashPosition pos[2];
-} phpdbg_intersect_ptr;
-
-static int phpdbg_array_data_compare(const void *a, const void *b TSRMLS_DC) {
-       Bucket *f, *s;
-       zval result;
-       zval *first, *second;
-
-       f = *((Bucket **) a);
-       s = *((Bucket **) b);
-
-       first = *((zval **) f->pData);
-       second = *((zval **) s->pData);
-
-       if (string_compare_function(&result, first, second TSRMLS_CC) == FAILURE) {
-               return 0;
-       }
-
-       if (Z_LVAL(result) < 0) {
-               return -1;
-       } else if (Z_LVAL(result) > 0) {
-               return 1;
-       }
-
-       return 0;
-}
-
-static void phpdbg_array_intersect_init(phpdbg_intersect_ptr *info, HashTable *ht1, HashTable *ht2 TSRMLS_DC) {
-       info->ht[0] = ht1;
-       info->ht[1] = ht2;
-
-       zend_hash_sort(info->ht[0], zend_qsort, (compare_func_t) phpdbg_array_data_compare, 0 TSRMLS_CC);
-       zend_hash_sort(info->ht[1], zend_qsort, (compare_func_t) phpdbg_array_data_compare, 0 TSRMLS_CC);
-
-       zend_hash_internal_pointer_reset_ex(info->ht[0], &info->pos[0]);
-       zend_hash_internal_pointer_reset_ex(info->ht[1], &info->pos[1]);
-}
-
-/* -1 => first array, 0 => both arrays equal, 1 => second array */
-static int phpdbg_array_intersect(phpdbg_intersect_ptr *info, zval ***ptr) {
-       int ret;
-       zval **zvpp[2];
-       int invalid = !info->ht[0] + !info->ht[1];
-
-       if (invalid > 0) {
-               invalid = !info->ht[0];
-
-               if (zend_hash_get_current_data_ex(info->ht[invalid], (void **) ptr, &info->pos[invalid]) == FAILURE) {
-                       *ptr = NULL;
-                       return 0;
-               }
-
-               zend_hash_move_forward_ex(info->ht[invalid], &info->pos[invalid]);
-
-               return invalid ? 1 : -1;
-       }
-
-       if (zend_hash_get_current_data_ex(info->ht[0], (void **) &zvpp[0], &info->pos[0]) == FAILURE) {
-               info->ht[0] = NULL;
-               return phpdbg_array_intersect(info, ptr);
-       }
-       if (zend_hash_get_current_data_ex(info->ht[1], (void **) &zvpp[1], &info->pos[1]) == FAILURE) {
-               info->ht[1] = NULL;
-               return phpdbg_array_intersect(info, ptr);
-       }
-
-       ret = zend_binary_zval_strcmp(*zvpp[0], *zvpp[1]);
-
-       if (ret <= 0) {
-               *ptr = zvpp[0];
-               zend_hash_move_forward_ex(info->ht[0], &info->pos[0]);
-       }
-       if (ret >= 0) {
-               *ptr = zvpp[1];
-               zend_hash_move_forward_ex(info->ht[1], &info->pos[1]);
-       }
-
-       return ret;
-}
-
-void phpdbg_webdata_decompress(char *msg, int len TSRMLS_DC) {
-       zval *free_zv = NULL;
-       zval zv, *zvp = &zv, **zvpp;
-       HashTable *ht;
-       php_unserialize_data_t var_hash;
-
-       PHP_VAR_UNSERIALIZE_INIT(var_hash);
-       if (!php_var_unserialize(&zvp, (const unsigned char **) &msg, (unsigned char *) msg + len, &var_hash TSRMLS_CC)) {
-               PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
-               phpdbg_error("wait", "type=\"invaliddata\" import=\"fail\"", "Malformed serialized was sent to this socket, arborting");
-               return;
-       }
-       PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
-
-       ht = Z_ARRVAL(zv);
-
-       /* Reapply symbol table */
-       if (zend_hash_find(ht, "GLOBALS", sizeof("GLOBALS"), (void **) &zvpp) == SUCCESS && Z_TYPE_PP(zvpp) == IS_ARRAY) {
-               {
-                       zval **srv;
-                       if (zend_hash_find(Z_ARRVAL_PP(zvpp), "_SERVER", sizeof("_SERVER"), (void **) &srv) == SUCCESS && Z_TYPE_PP(srv) == IS_ARRAY) {
-                               zval **script;
-                               if (zend_hash_find(Z_ARRVAL_PP(srv), "SCRIPT_FILENAME", sizeof("SCRIPT_FILENAME"), (void **) &script) == SUCCESS && Z_TYPE_PP(script) == IS_STRING) {
-                                       phpdbg_param_t param;
-                                       param.str = Z_STRVAL_PP(script);
-                                       PHPDBG_COMMAND_HANDLER(exec)(&param TSRMLS_CC);
-                               }
-                       }
-               }
-
-               PG(auto_globals_jit) = 0;
-               zend_hash_apply(CG(auto_globals), (apply_func_t) phpdbg_dearm_autoglobals TSRMLS_CC);
-
-               zend_hash_clean(&EG(symbol_table));
-               EG(symbol_table) = *Z_ARRVAL_PP(zvpp);
-
-               /* Rebuild cookies, env vars etc. from GLOBALS (PG(http_globals)) */
-               phpdbg_rebuild_http_globals_array(TRACK_VARS_POST, "_POST" TSRMLS_CC);
-               phpdbg_rebuild_http_globals_array(TRACK_VARS_GET, "_GET" TSRMLS_CC);
-               phpdbg_rebuild_http_globals_array(TRACK_VARS_COOKIE, "_COOKIE" TSRMLS_CC);
-               phpdbg_rebuild_http_globals_array(TRACK_VARS_SERVER, "_SERVER" TSRMLS_CC);
-               phpdbg_rebuild_http_globals_array(TRACK_VARS_ENV, "_ENV" TSRMLS_CC);
-               phpdbg_rebuild_http_globals_array(TRACK_VARS_FILES, "_FILES" TSRMLS_CC);
-
-               Z_ADDREF_PP(zvpp);
-               free_zv = *zvpp;
-       }
-
-#if PHP_VERSION_ID >= 50600
-       if (zend_hash_find(ht, "input", sizeof("input"), (void **) &zvpp) == SUCCESS && Z_TYPE_PP(zvpp) == IS_STRING) {
-               if (SG(request_info).request_body) {
-                       php_stream_close(SG(request_info).request_body);
-               }
-               SG(request_info).request_body = php_stream_temp_create_ex(TEMP_STREAM_DEFAULT, SAPI_POST_BLOCK_SIZE, PG(upload_tmp_dir));
-               php_stream_truncate_set_size(SG(request_info).request_body, 0);
-               php_stream_write(SG(request_info).request_body, Z_STRVAL_PP(zvpp), Z_STRLEN_PP(zvpp));
-       }
-#endif
-
-       if (zend_hash_find(ht, "cwd", sizeof("cwd"), (void **) &zvpp) == SUCCESS && Z_TYPE_PP(zvpp) == IS_STRING) {
-               if (VCWD_CHDIR(Z_STRVAL_PP(zvpp)) == SUCCESS) {
-                       if (BG(CurrentStatFile) && !IS_ABSOLUTE_PATH(BG(CurrentStatFile), strlen(BG(CurrentStatFile)))) {
-                               efree(BG(CurrentStatFile));
-                               BG(CurrentStatFile) = NULL;
-                       }
-                       if (BG(CurrentLStatFile) && !IS_ABSOLUTE_PATH(BG(CurrentLStatFile), strlen(BG(CurrentLStatFile)))) {
-                               efree(BG(CurrentLStatFile));
-                               BG(CurrentLStatFile) = NULL;
-                       }
-               }
-       }
-
-       if (zend_hash_find(ht, "sapi_name", sizeof("sapi_name"), (void **) &zvpp) == SUCCESS && (Z_TYPE_PP(zvpp) == IS_STRING || Z_TYPE_PP(zvpp) == IS_NULL)) {
-               if (PHPDBG_G(sapi_name_ptr)) {
-                       free(PHPDBG_G(sapi_name_ptr));
-               }
-               if (Z_TYPE_PP(zvpp) == IS_STRING) {
-                       PHPDBG_G(sapi_name_ptr) = sapi_module.name = strdup(Z_STRVAL_PP(zvpp));
-               } else {
-                       PHPDBG_G(sapi_name_ptr) = sapi_module.name = NULL;
-               }
-       }
-
-       if (zend_hash_find(ht, "modules", sizeof("modules"), (void **) &zvpp) == SUCCESS && Z_TYPE_PP(zvpp) == IS_ARRAY) {
-               HashPosition position;
-               phpdbg_intersect_ptr pos;
-               zval **module;
-               zend_module_entry *mod;
-               HashTable zv_registry;
-
-               /* intersect modules, unregister modules loaded "too much", announce not yet registered modules (phpdbg_notice) */
-
-               zend_hash_init(&zv_registry, zend_hash_num_elements(&module_registry), 0, ZVAL_PTR_DTOR, 0);
-               for (zend_hash_internal_pointer_reset_ex(&module_registry, &position);
-                    zend_hash_get_current_data_ex(&module_registry, (void **) &mod, &position) == SUCCESS;
-                    zend_hash_move_forward_ex(&module_registry, &position)) {
-                       if (mod->name) {
-                               zval **value = emalloc(sizeof(zval *));
-                               MAKE_STD_ZVAL(*value);
-                               ZVAL_STRING(*value, mod->name, 1);
-                               zend_hash_next_index_insert(&zv_registry, value, sizeof(zval *), NULL);
-                       }
-               }
-
-               phpdbg_array_intersect_init(&pos, &zv_registry, Z_ARRVAL_PP(zvpp) TSRMLS_CC);
-               do {
-                       int mode = phpdbg_array_intersect(&pos, &module);
-                       if (mode < 0) {
-                               // loaded module, but not needed
-                               if (strcmp(PHPDBG_NAME, Z_STRVAL_PP(module))) {
-                                       zend_hash_del(&module_registry, Z_STRVAL_PP(module), Z_STRLEN_PP(module) + 1);
-                               }
-                       } else if (mode > 0) {
-                               // not loaded module
-                               if (!sapi_module.name || strcmp(sapi_module.name, Z_STRVAL_PP(module))) {
-                                       phpdbg_notice("wait", "missingmodule=\"%.*s\"", "The module %.*s isn't present in " PHPDBG_NAME ", you still can load via dl /path/to/module/%.*s.so", Z_STRLEN_PP(module), Z_STRVAL_PP(module), Z_STRLEN_PP(module), Z_STRVAL_PP(module));
-                               }
-                       }
-               } while (module);
-
-               zend_hash_clean(&zv_registry);
-       }
-
-       if (zend_hash_find(ht, "extensions", sizeof("extensions"), (void **) &zvpp) == SUCCESS && Z_TYPE_PP(zvpp) == IS_ARRAY) {
-               zend_extension *extension;
-               zend_llist_position pos;
-               HashPosition hpos;
-               zval **name, key;
-
-               extension = (zend_extension *) zend_llist_get_first_ex(&zend_extensions, &pos);
-               while (extension) {
-                       extension = (zend_extension *) zend_llist_get_next_ex(&zend_extensions, &pos);
-
-                       /* php_serach_array() body should be in some ZEND_API function */
-                       for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(zvpp), &hpos);
-                            zend_hash_get_current_data_ex(Z_ARRVAL_PP(zvpp), (void **) &name, &hpos) == SUCCESS;
-                            zend_hash_move_forward_ex(Z_ARRVAL_PP(zvpp), &hpos)) {
-                               if (Z_TYPE_PP(name) == IS_STRING && !zend_binary_strcmp(extension->name, strlen(extension->name), Z_STRVAL_PP(name), Z_STRLEN_PP(name))) {
-                                       break;
-                               }
-                       }
-
-                       if (zend_hash_get_current_data_ex(Z_ARRVAL_PP(zvpp), (void **) &zvpp, &hpos) == FAILURE) {
-                               /* sigh, breaking the encapsulation, there aren't any functions manipulating the llist at the place of the zend_llist_position */
-                               zend_llist_element *elm = pos;
-                               if (elm->prev) {
-                                       elm->prev->next = elm->next;
-                               } else {
-                                       zend_extensions.head = elm->next;
-                               }
-                               if (elm->next) {
-                                       elm->next->prev = elm->prev;
-                               } else {
-                                       zend_extensions.tail = elm->prev;
-                               }
-#if ZEND_EXTENSIONS_SUPPORT
-                               if (extension->shutdown) {
-                                       extension->shutdown(extension);
-                               }
-#endif
-                               if (zend_extensions.dtor) {
-                                       zend_extensions.dtor(elm->data);
-                               }
-                               pefree(elm, zend_extensions.persistent);
-                               zend_extensions.count--;
-                       } else {
-                               zend_hash_get_current_key_zval_ex(Z_ARRVAL_PP(zvpp), &key, &hpos);
-                               if (Z_TYPE(key) == IS_LONG) {
-                                       zend_hash_index_del(Z_ARRVAL_PP(zvpp), Z_LVAL(key));
-                               }
-                       }
-
-                       for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(zvpp), &hpos);
-                            zend_hash_get_current_data_ex(Z_ARRVAL_PP(zvpp), (void **) &name, &hpos) == SUCCESS;
-                            zend_hash_move_forward_ex(Z_ARRVAL_PP(zvpp), &hpos)) {
-                               phpdbg_notice("wait", "missingextension=\"%.*s\"", "The Zend extension %.*s isn't present in " PHPDBG_NAME ", you still can load via dl /path/to/extension.so", Z_STRLEN_PP(name), Z_STRVAL_PP(name));
-                       }
-               }
-       }
-
-       zend_ini_deactivate(TSRMLS_C);
-
-       if (zend_hash_find(ht, "systemini", sizeof("systemini"), (void **) &zvpp) == SUCCESS && Z_TYPE_PP(zvpp) == IS_ARRAY) {
-               HashPosition position;
-               zval **ini_entry;
-               zend_ini_entry *original_ini;
-               zval key;
-
-               for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(zvpp), &position);
-                    zend_hash_get_current_data_ex(Z_ARRVAL_PP(zvpp), (void**) &ini_entry, &position) == SUCCESS;
-                    zend_hash_move_forward_ex(Z_ARRVAL_PP(zvpp), &position)) {
-                       zend_hash_get_current_key_zval_ex(Z_ARRVAL_PP(zvpp), &key, &position);
-                       if (Z_TYPE(key) == IS_STRING) {
-                               if (Z_TYPE_PP(ini_entry) == IS_STRING) {
-                                       if (zend_hash_find(EG(ini_directives), Z_STRVAL(key), Z_STRLEN(key) + 1, (void **) &original_ini) == SUCCESS) {
-                                               if (!original_ini->on_modify || original_ini->on_modify(original_ini, Z_STRVAL_PP(ini_entry), Z_STRLEN_PP(ini_entry), original_ini->mh_arg1, original_ini->mh_arg2, original_ini->mh_arg3, ZEND_INI_STAGE_ACTIVATE TSRMLS_CC) == SUCCESS) {
-                                                       if (original_ini->modified && original_ini->orig_value != original_ini->value) {
-                                                               efree(original_ini->value);
-                                                       }
-                                                       original_ini->value = Z_STRVAL_PP(ini_entry);
-                                                       original_ini->value_length = Z_STRLEN_PP(ini_entry);
-                                                       Z_TYPE_PP(ini_entry) = IS_NULL; /* don't free the value */
-                                               }
-                                       }
-                               }
-                               efree(Z_STRVAL(key));
-                       }
-               }
-       }
-
-       if (zend_hash_find(ht, "userini", sizeof("userini"), (void **) &zvpp) == SUCCESS && Z_TYPE_PP(zvpp) == IS_ARRAY) {
-               HashPosition position;
-               zval **ini_entry;
-               zval key;
-
-               for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(zvpp), &position);
-                    zend_hash_get_current_data_ex(Z_ARRVAL_PP(zvpp), (void**) &ini_entry, &position) == SUCCESS;
-                    zend_hash_move_forward_ex(Z_ARRVAL_PP(zvpp), &position)) {
-                       zend_hash_get_current_key_zval_ex(Z_ARRVAL_PP(zvpp), &key, &position);
-                       if (Z_TYPE(key) == IS_STRING) {
-                               if (Z_TYPE_PP(ini_entry) == IS_STRING) {
-                                       zend_alter_ini_entry_ex(Z_STRVAL(key), Z_STRLEN(key) + 1, Z_STRVAL_PP(ini_entry), Z_STRLEN_PP(ini_entry), ZEND_INI_PERDIR, ZEND_INI_STAGE_HTACCESS, 1 TSRMLS_CC);
-                               }
-                               efree(Z_STRVAL(key));
-                       }
-               }
-       }
-
-       zval_dtor(&zv);
-       if (free_zv) {
-               /* separate freeing to not dtor the symtable too, just the container zval... */
-               efree(free_zv);
-       }
-
-       /* Reapply raw input */
-       /* ??? */
-}
-
-PHPDBG_COMMAND(wait) /* {{{ */
-{
-#if PHPDBG_IN_DEV
-       struct sockaddr_un local, remote;
-       int rlen, sr, sl;
-       unlink(PHPDBG_G(socket_path));
-       if (PHPDBG_G(socket_server_fd) == -1) {
-               int len;
-               PHPDBG_G(socket_server_fd) = sl = socket(AF_UNIX, SOCK_STREAM, 0);
-
-               local.sun_family = AF_UNIX;
-               strcpy(local.sun_path, PHPDBG_G(socket_path));
-               len = strlen(local.sun_path) + sizeof(local.sun_family);
-               if (bind(sl, (struct sockaddr *)&local, len) == -1) {
-                       phpdbg_error("wait", "type=\"nosocket\" import=\"fail\"", "Unable to connect to UNIX domain socket at %s defined by phpdbg.path ini setting", PHPDBG_G(socket_path));
-                       return FAILURE;
-               }
-
-               chmod(PHPDBG_G(socket_path), 0666);
-
-               listen(sl, 2);
-       } else {
-               sl = PHPDBG_G(socket_server_fd);
-       }
-
-       rlen = sizeof(remote);
-       sr = accept(sl, (struct sockaddr *) &remote, (socklen_t *) &rlen);
-
-       char msglen[5];
-       int recvd = 4;
-
-       do {
-               recvd -= recv(sr, &(msglen[4 - recvd]), recvd, 0);
-       } while (recvd > 0);
-
-       recvd = *(size_t *) msglen;
-       char *data = emalloc(recvd);
-
-       do {
-               recvd -= recv(sr, &(data[(*(int *) msglen) - recvd]), recvd, 0);
-       } while (recvd > 0);
-
-       phpdbg_webdata_decompress(data, *(int *) msglen TSRMLS_CC);
-
-       if (PHPDBG_G(socket_fd) != -1) {
-               close(PHPDBG_G(socket_fd));
-       }
-       PHPDBG_G(socket_fd) = sr;
-
-       efree(data);
-
-       phpdbg_notice("wait", "import=\"success\"", "Successfully imported request data, stopped before executing");
-#endif
-
-       return SUCCESS;
-} /* }}} */
diff --git a/sapi/phpdbg/phpdbg_wait.h b/sapi/phpdbg/phpdbg_wait.h
deleted file mode 100644 (file)
index 7cf9591..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-   +----------------------------------------------------------------------+
-   | PHP Version 5                                                        |
-   +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2014 The PHP Group                                |
-   +----------------------------------------------------------------------+
-   | This source file is subject to version 3.01 of the PHP license,      |
-   | that is bundled with this package in the file LICENSE, and is        |
-   | available through the world-wide-web at the following url:           |
-   | http://www.php.net/license/3_01.txt                                  |
-   | If you did not receive a copy of the PHP license and are unable to   |
-   | obtain it through the world-wide-web, please send a note to          |
-   | license@php.net so we can mail you a copy immediately.               |
-   +----------------------------------------------------------------------+
-   | Authors: Bob Weinand <bwoebi@php.net>                                |
-   +----------------------------------------------------------------------+
-*/
-
-#ifndef PHPDBG_WAIT_H
-#define PHPDBG_WAIT_H
-
-#include "zend.h"
-#include "phpdbg.h"
-
-PHPDBG_COMMAND(wait);
-
-void phpdbg_webdata_decompress(char *msg, int len TSRMLS_DC);
-
-#endif /* PHPDBG_WAIT_H */
index de6cddf5b3cb016160ed88606f94857218147ea8..e88622444bf7d741bcff1413bc373662731c8ed0 100644 (file)
@@ -30,6 +30,7 @@
 
 ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
 
+
 typedef struct {
        void *page;
        size_t size;
@@ -137,6 +138,13 @@ static int phpdbg_create_array_watchpoint(phpdbg_watchpoint_t *watch TSRMLS_DC)
        return SUCCESS;
 }
 
+static char *phpdbg_get_property_key(char *key) {
+       if (*key != 0) {
+               return key;
+       }
+       return strchr(key + 1, 0) + 1;
+}
+
 static int phpdbg_create_recursive_watchpoint(phpdbg_watchpoint_t *watch TSRMLS_DC) {
        HashTable *ht;
 
@@ -182,7 +190,7 @@ static int phpdbg_create_recursive_watchpoint(phpdbg_watchpoint_t *watch TSRMLS_
                        }
 
                        new_watch->str = NULL;
-                       new_watch->str_len = asprintf(&new_watch->str, "%.*s%s%s%s", (int) watch->str_len, watch->str, Z_TYPE_P(watch->addr.zv) == IS_ARRAY ? "[" : "->", phpdbg_get_property_key(new_watch->name_in_parent), Z_TYPE_P(watch->addr.zv) == IS_ARRAY ? "]" : "");
+                       new_watch->str_len = asprintf(&new_watch->str, "%.*s%s%s%s", (int)watch->str_len, watch->str, Z_TYPE_P(watch->addr.zv) == IS_ARRAY?"[":"->", phpdbg_get_property_key(new_watch->name_in_parent), Z_TYPE_P(watch->addr.zv) == IS_ARRAY?"]":"");
 
                        phpdbg_create_zval_watchpoint(*zv, new_watch);
                        phpdbg_create_recursive_watchpoint(new_watch TSRMLS_CC);
@@ -228,9 +236,9 @@ static int phpdbg_delete_watchpoint_recursive(phpdbg_watchpoint_t *watch, zend_b
                                zend_hash_get_current_key_zval_ex(ht, &key, &position);
                                str = NULL;
                                if (Z_TYPE(key) == IS_STRING) {
-                                       str_len = asprintf(&str, "%.*s%s%s%s", (int) watch->parent->str_len, watch->parent->str, Z_TYPE_P(watch->parent->addr.zv) == IS_ARRAY ? "[" : "->", phpdbg_get_property_key(Z_STRVAL(key)), Z_TYPE_P(watch->parent->addr.zv) == IS_ARRAY ? "]" : "");
+                                       str_len = asprintf(&str, "%.*s%s%s%s", (int)watch->parent->str_len, watch->parent->str, Z_TYPE_P(watch->parent->addr.zv) == IS_ARRAY?"[":"->", phpdbg_get_property_key(Z_STRVAL(key)), Z_TYPE_P(watch->parent->addr.zv) == IS_ARRAY?"]":"");
                                } else {
-                                       str_len = asprintf(&str, "%.*s%s%li%s", (int) watch->parent->str_len, watch->parent->str, Z_TYPE_P(watch->parent->addr.zv) == IS_ARRAY ? "[" : "->", Z_LVAL(key), Z_TYPE_P(watch->parent->addr.zv) == IS_ARRAY ? "]" : "");
+                                       str_len = asprintf(&str, "%.*s%s%li%s", (int)watch->parent->str_len, watch->parent->str, Z_TYPE_P(watch->parent->addr.zv) == IS_ARRAY?"[":"->", Z_LVAL(key), Z_TYPE_P(watch->parent->addr.zv) == IS_ARRAY?"]":"");
                                }
 
                                if (zend_hash_find(&PHPDBG_G(watchpoints), str, str_len, (void **) &watchpoint) == SUCCESS) {
@@ -273,37 +281,118 @@ static int phpdbg_delete_watchpoint(phpdbg_watchpoint_t *tmp_watch TSRMLS_DC) {
                ret = zend_hash_del(&PHPDBG_G(watchpoints), watch->str, watch->str_len);
        }
 
-       efree(tmp_watch->str);
-       efree(tmp_watch->name_in_parent);
+       free(tmp_watch->str);
        efree(tmp_watch);
 
        return ret;
 }
 
-static int phpdbg_watchpoint_parse_wrapper(char *name, size_t len, char *keyname, size_t keylen, HashTable *parent, zval **zv, int (*callback)(phpdbg_watchpoint_t * TSRMLS_DC) TSRMLS_DC) {
-       int ret;
-       phpdbg_watchpoint_t *watch = emalloc(sizeof(phpdbg_watchpoint_t));
-       watch->flags = 0;
-       watch->str = name;
-       watch->str_len = len;
-       watch->name_in_parent = keyname;
-       watch->name_in_parent_len = keylen;
-       watch->parent_container = parent;
-       phpdbg_create_zval_watchpoint(*zv, watch);
-
-       ret = callback(watch TSRMLS_CC);
-
-       if (ret != SUCCESS) {
-               efree(watch);
-               efree(name);
-               efree(keyname);
+static int phpdbg_watchpoint_parse_input(char *input, size_t len, HashTable *parent, size_t i, int (*callback)(phpdbg_watchpoint_t * TSRMLS_DC), zend_bool silent TSRMLS_DC) {
+       int ret = FAILURE;
+       zend_bool new_index = 1;
+       char *last_index;
+       int index_len = 0;
+       zval **zv;
+
+       if (len < 2 || *input != '$') {
+               goto error;
        }
 
-       return ret;
-}
+       while (i++ < len) {
+               if (i == len) {
+                       new_index = 1;
+               } else {
+                       switch (input[i]) {
+                               case '[':
+                                       new_index = 1;
+                                       break;
+                               case ']':
+                                       break;
+                               case '>':
+                                       if (last_index[index_len - 1] == '-') {
+                                               new_index = 1;
+                                               index_len--;
+                                       }
+                                       break;
+
+                               default:
+                                       if (new_index) {
+                                               last_index = input + i;
+                                               new_index = 0;
+                                       }
+                                       if (input[i - 1] == ']') {
+                                               goto error;
+                                       }
+                                       index_len++;
+                       }
+               }
 
-PHPDBG_API int phpdbg_watchpoint_parse_input(char *input, size_t len, HashTable *parent, size_t i, int (*callback)(phpdbg_watchpoint_t * TSRMLS_DC), zend_bool silent TSRMLS_DC) {
-       return phpdbg_parse_variable_with_arg(input, len, parent, i, (phpdbg_parse_var_with_arg_func) phpdbg_watchpoint_parse_wrapper, 0, callback TSRMLS_CC);
+               if (new_index && index_len == 0) {
+                       HashPosition position;
+                       for (zend_hash_internal_pointer_reset_ex(parent, &position);
+                            zend_hash_get_current_data_ex(parent, (void **)&zv, &position) == SUCCESS;
+                            zend_hash_move_forward_ex(parent, &position)) {
+                               if (i == len || (i == len - 1 && input[len - 1] == ']')) {
+                                       zval *key = emalloc(sizeof(zval));
+                                       phpdbg_watchpoint_t *watch = emalloc(sizeof(phpdbg_watchpoint_t));
+                                       watch->flags = 0;
+                                       zend_hash_get_current_key_zval_ex(parent, key, &position);
+                                       convert_to_string(key);
+                                       watch->str = malloc(i + Z_STRLEN_P(key) + 2);
+                                       watch->str_len = sprintf(watch->str, "%.*s%s%s", (int)i, input, phpdbg_get_property_key(Z_STRVAL_P(key)), input[len - 1] == ']'?"]":"");
+                                       efree(key);
+                                       watch->name_in_parent = zend_strndup(last_index, index_len);
+                                       watch->name_in_parent_len = index_len;
+                                       watch->parent_container = parent;
+                                       phpdbg_create_zval_watchpoint(*zv, watch);
+
+                                       ret = callback(watch TSRMLS_CC) == SUCCESS || ret == SUCCESS?SUCCESS:FAILURE;
+                               } else if (Z_TYPE_PP(zv) == IS_OBJECT) {
+                                       phpdbg_watchpoint_parse_input(input, len, Z_OBJPROP_PP(zv), i, callback, silent TSRMLS_CC);
+                               } else if (Z_TYPE_PP(zv) == IS_ARRAY) {
+                                       phpdbg_watchpoint_parse_input(input, len, Z_ARRVAL_PP(zv), i, callback, silent TSRMLS_CC);
+                               } else {
+                                       /* Ignore silently */
+                               }
+                       }
+                       return ret;
+               } else if (new_index) {
+                       char last_chr = last_index[index_len];
+                       last_index[index_len] = 0;
+                       if (zend_symtable_find(parent, last_index, index_len + 1, (void **)&zv) == FAILURE) {
+                               if (!silent) {
+                                       phpdbg_error("%.*s is undefined", (int)i, input);
+                               }
+                               return FAILURE;
+                       }
+                       last_index[index_len] = last_chr;
+                       if (i == len) {
+                               phpdbg_watchpoint_t *watch = emalloc(sizeof(phpdbg_watchpoint_t));
+                               watch->flags = 0;
+                               watch->str = zend_strndup(input, len);
+                               watch->str_len = len;
+                               watch->name_in_parent = zend_strndup(last_index, index_len);
+                               watch->name_in_parent_len = index_len;
+                               watch->parent_container = parent;
+                               phpdbg_create_zval_watchpoint(*zv, watch);
+
+                               ret = callback(watch TSRMLS_CC) == SUCCESS || ret == SUCCESS?SUCCESS:FAILURE;
+                       } else if (Z_TYPE_PP(zv) == IS_OBJECT) {
+                               parent = Z_OBJPROP_PP(zv);
+                       } else if (Z_TYPE_PP(zv) == IS_ARRAY) {
+                               parent = Z_ARRVAL_PP(zv);
+                       } else {
+                               phpdbg_error("%.*s is nor an array nor an object", (int)i, input);
+                               return FAILURE;
+                       }
+                       index_len = 0;
+               }
+       }
+
+       return ret;
+       error:
+               phpdbg_error("Malformed input");
+               return FAILURE;
 }
 
 static int phpdbg_watchpoint_parse_symtables(char *input, size_t len, int (*callback)(phpdbg_watchpoint_t * TSRMLS_DC) TSRMLS_DC) {
@@ -323,9 +412,9 @@ PHPDBG_WATCH(delete) /* {{{ */
        switch (param->type) {
                case STR_PARAM:
                        if (phpdbg_delete_var_watchpoint(param->str, param->len TSRMLS_CC) == FAILURE) {
-                               phpdbg_error("watchdelete", "type=\"nowatch\"", "Nothing was deleted, no corresponding watchpoint found");
+                               phpdbg_error("Nothing was deleted, no corresponding watchpoint found");
                        } else {
-                               phpdbg_notice("watchdelete", "variable=\"%.*s\"", "Removed watchpoint %.*s", (int) param->len, param->str);
+                               phpdbg_notice("Removed watchpoint %.*s", (int)param->len, param->str);
                        }
                        break;
 
@@ -344,7 +433,7 @@ PHPDBG_WATCH(recursive) /* {{{ */
        switch (param->type) {
                case STR_PARAM:
                        if (phpdbg_watchpoint_parse_symtables(param->str, param->len, phpdbg_create_recursive_watchpoint TSRMLS_CC) != FAILURE) {
-                               phpdbg_notice("watchrecursive", "variable=\"%.*s\"", "Set recursive watchpoint on %.*s", (int)param->len, param->str);
+                               phpdbg_notice("Set recursive watchpoint on %.*s", (int)param->len, param->str);
                        }
                        break;
 
@@ -363,7 +452,7 @@ PHPDBG_WATCH(array) /* {{{ */
        switch (param->type) {
                case STR_PARAM:
                        if (phpdbg_watchpoint_parse_symtables(param->str, param->len, phpdbg_create_array_watchpoint TSRMLS_CC) != FAILURE) {
-                               phpdbg_notice("watcharray", "variable=\"%.*s\"", "Set array watchpoint on %.*s", (int)param->len, param->str);
+                               phpdbg_notice("Set array watchpoint on %.*s", (int)param->len, param->str);
                        }
                        break;
 
@@ -384,7 +473,7 @@ void phpdbg_watch_HashTable_dtor(zval **zv) {
 
                PHPDBG_G(watchpoint_hit) = 1;
 
-               phpdbg_notice("watchdelete", "variable=\"%.*s\" recursive=\"%s\"", "%.*s was removed, removing watchpoint%s", (int)watch->str_len, watch->str, watch->flags & PHPDBG_WATCH_RECURSIVE ? " recursively" : "");
+               phpdbg_notice("%.*s was removed, removing watchpoint%s", (int)watch->str_len, watch->str, (watch->flags & PHPDBG_WATCH_RECURSIVE)?" recursively":"");
 
                if (watch->flags & PHPDBG_WATCH_RECURSIVE) {
                        phpdbg_delete_watchpoint_recursive(watch, 0 TSRMLS_CC);
@@ -461,8 +550,8 @@ static void phpdbg_watch_dtor(void *pDest) {
        phpdbg_deactivate_watchpoint(watch TSRMLS_CC);
        phpdbg_remove_watchpoint(watch TSRMLS_CC);
 
-       efree(watch->str);
-       efree(watch->name_in_parent);
+       free(watch->str);
+       free(watch->name_in_parent);
        efree(watch);
 }
 
@@ -496,7 +585,7 @@ void phpdbg_setup_watchpoints(TSRMLS_D) {
 
 static void phpdbg_print_changed_zval(phpdbg_watch_memdump *dump TSRMLS_DC) {
        /* fetch all changes between dump->page and dump->page + dump->size */
-       phpdbg_btree_position pos = phpdbg_btree_find_between(&PHPDBG_G(watchpoint_tree), (zend_ulong) dump->page, (zend_ulong) dump->page + dump->size);
+       phpdbg_btree_position pos = phpdbg_btree_find_between(&PHPDBG_G(watchpoint_tree), (zend_ulong)dump->page, (zend_ulong)dump->page + dump->size);
        phpdbg_btree_result *result, *htresult;
        int elementDiff;
        void *curTest;
@@ -508,7 +597,7 @@ static void phpdbg_print_changed_zval(phpdbg_watch_memdump *dump TSRMLS_DC) {
                void *oldPtr = (char *)&dump->data + ((size_t)watch->addr.ptr - (size_t)dump->page);
                char reenable = 1;
 
-               if ((size_t)watch->addr.ptr < (size_t)dump->page || (size_t)watch->addr.ptr + watch->size > (size_t) dump->page + dump->size) {
+               if ((size_t)watch->addr.ptr < (size_t)dump->page || (size_t)watch->addr.ptr + watch->size > (size_t)dump->page + dump->size) {
                        continue;
                }
 
@@ -540,17 +629,14 @@ static void phpdbg_print_changed_zval(phpdbg_watch_memdump *dump TSRMLS_DC) {
 
                /* Show to the user what changed and delete watchpoint upon removal */
                if (memcmp(oldPtr, watch->addr.ptr, watch->size) != SUCCESS) {
-                       zend_bool do_break = PHPDBG_G(flags) & PHPDBG_SHOW_REFCOUNTS || (watch->type == WATCH_ON_ZVAL && memcmp(oldPtr, watch->addr.zv, sizeof(zvalue_value))) || (watch->type == WATCH_ON_HASHTABLE
+                       if (PHPDBG_G(flags) & PHPDBG_SHOW_REFCOUNTS || (watch->type == WATCH_ON_ZVAL && memcmp(oldPtr, watch->addr.zv, sizeof(zvalue_value))) || (watch->type == WATCH_ON_HASHTABLE
 #if ZEND_DEBUG
                            && !watch->addr.ht->inconsistent
 #endif
-                           && zend_hash_num_elements((HashTable *)oldPtr) != zend_hash_num_elements(watch->addr.ht));
-
-                       if (do_break) {
+                           && zend_hash_num_elements((HashTable *)oldPtr) != zend_hash_num_elements(watch->addr.ht))) {
                                PHPDBG_G(watchpoint_hit) = 1;
 
-                               phpdbg_notice("watchhit", "variable=\"%s\"", "Breaking on watchpoint %.*s", (int) watch->str_len, watch->str);
-                               phpdbg_xml("<watchdata %r>");
+                               phpdbg_notice("Breaking on watchpoint %s", watch->str);
                        }
 
                        switch (watch->type) {
@@ -560,28 +646,26 @@ static void phpdbg_print_changed_zval(phpdbg_watch_memdump *dump TSRMLS_DC) {
                                        int show_ref = ((zval *)oldPtr)->refcount__gc != watch->addr.zv->refcount__gc || ((zval *)oldPtr)->is_ref__gc != watch->addr.zv->is_ref__gc;
 
                                        if (removed || show_value) {
+                                               phpdbg_write("Old value: ");
                                                if ((Z_TYPE_P((zval *)oldPtr) == IS_ARRAY || Z_TYPE_P((zval *)oldPtr) == IS_OBJECT) && removed) {
-                                                       phpdbg_writeln("watchvalue", "type=\"old\" inaccessible=\"inaccessible\"", "Old value inaccessible, array or object (HashTable) already destroyed");
+                                                       phpdbg_writeln("Value inaccessible, HashTable already destroyed");
                                                } else {
-                                                       phpdbg_out("Old value: ");
-                                                       phpdbg_xml("<watchvalue %r type=\"old\">");
-                                                       zend_print_flat_zval_r((zval *) oldPtr TSRMLS_CC);
-                                                       phpdbg_xml("</watchvalue>");
-                                                       phpdbg_out("\n");
+                                                       zend_print_flat_zval_r((zval *)oldPtr TSRMLS_CC);
+                                                       phpdbg_writeln("");
                                                }
                                        }
                                        if (PHPDBG_G(flags) & PHPDBG_SHOW_REFCOUNTS && (removed || show_ref)) {
-                                               phpdbg_write("watchrefcount", "type=\"old\" refcount=\"%d\" isref=\"%d\"", "Old refcount: %d; Old is_ref: %d", ((zval *) oldPtr)->refcount__gc, ((zval *) oldPtr)->is_ref__gc);
+                                               phpdbg_writeln("Old refcount: %d; Old is_ref: %d", ((zval *)oldPtr)->refcount__gc, ((zval *)oldPtr)->is_ref__gc);
                                        }
 
                                        /* check if zval was removed */
                                        if (removed) {
-                                               phpdbg_notice("watchdelete", "variable=\"%.*s\"", "Watchpoint %.*s was unset, removing watchpoint", (int) watch->str_len, watch->str);
+                                               phpdbg_notice("Watchpoint %s was unset, removing watchpoint", watch->str);
                                                zend_hash_del(&PHPDBG_G(watchpoints), watch->str, watch->str_len);
 
                                                reenable = 0;
 
-                                               if (Z_TYPE_P((zval *) oldPtr) == IS_ARRAY || Z_TYPE_P((zval *) oldPtr) == IS_OBJECT) {
+                                               if (Z_TYPE_P((zval *)oldPtr) == IS_ARRAY || Z_TYPE_P((zval *)oldPtr) == IS_OBJECT) {
                                                        goto remove_ht_watch;
                                                }
 
@@ -589,24 +673,22 @@ static void phpdbg_print_changed_zval(phpdbg_watch_memdump *dump TSRMLS_DC) {
                                        }
 
                                        if (show_value) {
-                                               phpdbg_out("New value: ");
-                                               phpdbg_xml("<watchvalue %r type=\"new\">");
+                                               phpdbg_write("New value: ");
                                                zend_print_flat_zval_r(watch->addr.zv TSRMLS_CC);
-                                               phpdbg_xml("</watchvalue>");
-                                               phpdbg_out("\n");
+                                               phpdbg_writeln("");
                                        }
                                        if (PHPDBG_G(flags) & PHPDBG_SHOW_REFCOUNTS && show_ref) {
-                                               phpdbg_writeln("watchrefcount", "type=\"new\" refcount=\"%d\" isref=\"%d\"", "New refcount: %d; New is_ref: %d", watch->addr.zv->refcount__gc, watch->addr.zv->is_ref__gc);
+                                               phpdbg_writeln("New refcount: %d; New is_ref: %d", watch->addr.zv->refcount__gc, watch->addr.zv->is_ref__gc);
                                        }
 
-                                       if ((Z_TYPE_P(watch->addr.zv) == IS_ARRAY && Z_ARRVAL_P(watch->addr.zv) != Z_ARRVAL_P((zval *) oldPtr)) || (Z_TYPE_P(watch->addr.zv) != IS_OBJECT && Z_OBJ_HANDLE_P(watch->addr.zv) == Z_OBJ_HANDLE_P((zval *) oldPtr))) {
+                                       if ((Z_TYPE_P(watch->addr.zv) == IS_ARRAY && Z_ARRVAL_P(watch->addr.zv) != Z_ARRVAL_P((zval *)oldPtr)) || (Z_TYPE_P(watch->addr.zv) != IS_OBJECT && Z_OBJ_HANDLE_P(watch->addr.zv) == Z_OBJ_HANDLE_P((zval *)oldPtr))) {
                                                /* add new watchpoints if necessary */
                                                if (watch->flags & PHPDBG_WATCH_RECURSIVE) {
                                                        phpdbg_create_recursive_watchpoint(watch TSRMLS_CC);
                                                }
                                        }
 
-                                       if ((Z_TYPE_P((zval *) oldPtr) != IS_ARRAY || Z_ARRVAL_P(watch->addr.zv) == Z_ARRVAL_P((zval *) oldPtr)) && (Z_TYPE_P((zval *)oldPtr) != IS_OBJECT || Z_OBJ_HANDLE_P(watch->addr.zv) == Z_OBJ_HANDLE_P((zval *) oldPtr))) {
+                                       if ((Z_TYPE_P((zval *)oldPtr) != IS_ARRAY || Z_ARRVAL_P(watch->addr.zv) == Z_ARRVAL_P((zval *)oldPtr)) && (Z_TYPE_P((zval *)oldPtr) != IS_OBJECT || Z_OBJ_HANDLE_P(watch->addr.zv) == Z_OBJ_HANDLE_P((zval *)oldPtr))) {
                                                break;
                                        }
 
@@ -622,7 +704,7 @@ remove_ht_watch:
 
 #if ZEND_DEBUG
                                        if (watch->addr.ht->inconsistent) {
-                                               phpdbg_notice("watchdelete", "variable=\"%.*s\"", "Watchpoint %.*s was unset, removing watchpoint", (int) watch->str_len, watch->str);
+                                               phpdbg_notice("Watchpoint %s was unset, removing watchpoint", watch->str);
                                                zend_hash_del(&PHPDBG_G(watchpoints), watch->str, watch->str_len);
 
                                                reenable = 0;
@@ -631,12 +713,12 @@ remove_ht_watch:
                                        }
 #endif
 
-                                       elementDiff = zend_hash_num_elements((HashTable *) oldPtr) - zend_hash_num_elements(watch->addr.ht);
+                                       elementDiff = zend_hash_num_elements((HashTable *)oldPtr) - zend_hash_num_elements(watch->addr.ht);
                                        if (elementDiff) {
                                                if (elementDiff > 0) {
-                                                       phpdbg_writeln("watchsize", "removed=\"%d\"", "%d elements were removed from the array", elementDiff);
+                                                       phpdbg_writeln("%d elements were removed from the array", elementDiff);
                                                } else {
-                                                       phpdbg_writeln("watchsize", "added=\"%d\"", "%d elements were added to the array", -elementDiff);
+                                                       phpdbg_writeln("%d elements were added to the array", -elementDiff);
 
                                                        /* add new watchpoints if necessary */
                                                        if (watch->flags & PHPDBG_WATCH_RECURSIVE) {
@@ -644,15 +726,11 @@ remove_ht_watch:
                                                        }
                                                }
                                        }
-                                       if (((HashTable *) oldPtr)->pInternalPointer != watch->addr.ht->pInternalPointer) {
-                                               phpdbg_writeln("watcharrayptr", "", "Internal pointer of array was changed");
+                                       if (((HashTable *)oldPtr)->pInternalPointer != watch->addr.ht->pInternalPointer) {
+                                               phpdbg_writeln("Internal pointer of array was changed");
                                        }
                                        break;
                        }
-
-                       if (do_break) {
-                               phpdbg_xml("</watchdata>");
-                       }
                }
 
                dump->reenable_writing = dump->reenable_writing | reenable;
@@ -668,15 +746,15 @@ int phpdbg_print_changed_zvals(TSRMLS_D) {
                return FAILURE;
        }
 
-       dump = (phpdbg_watch_memdump **) zend_llist_get_last_ex(&PHPDBG_G(watchlist_mem), &pos);
+       dump = (phpdbg_watch_memdump **)zend_llist_get_last_ex(&PHPDBG_G(watchlist_mem), &pos);
 
        do {
                phpdbg_print_changed_zval(*dump TSRMLS_CC);
-       } while ((dump = (phpdbg_watch_memdump **) zend_llist_get_prev_ex(&PHPDBG_G(watchlist_mem), &pos)));
+       } while ((dump = (phpdbg_watch_memdump **)zend_llist_get_prev_ex(&PHPDBG_G(watchlist_mem), &pos)));
 
        zend_llist_clean(&PHPDBG_G(watchlist_mem));
 
-       ret = PHPDBG_G(watchpoint_hit) ? SUCCESS : FAILURE;
+       ret = PHPDBG_G(watchpoint_hit)?SUCCESS:FAILURE;
        PHPDBG_G(watchpoint_hit) = 0;
 
        return ret;
@@ -686,27 +764,23 @@ void phpdbg_list_watchpoints(TSRMLS_D) {
        HashPosition position;
        phpdbg_watchpoint_t **watch;
 
-       phpdbg_xml("<watchlist %r>");
-
        for (zend_hash_internal_pointer_reset_ex(&PHPDBG_G(watchpoints), &position);
             zend_hash_get_current_data_ex(&PHPDBG_G(watchpoints), (void**) &watch, &position) == SUCCESS;
             zend_hash_move_forward_ex(&PHPDBG_G(watchpoints), &position)) {
-               phpdbg_writeln("watchvariable", "variable=\"%.*s\" on=\"%s\" type=\"%s\"", "%.*s (%s, %s)", (int) (*watch)->str_len, (*watch)->str, (*watch)->type == WATCH_ON_HASHTABLE ? "array" : "variable", (*watch)->flags == PHPDBG_WATCH_RECURSIVE ? "recursive" : "simple");
+               phpdbg_writeln("%.*s", (int)(*watch)->str_len, (*watch)->str);
        }
-
-       phpdbg_xml("</watchlist>");
 }
 
 void phpdbg_watch_efree(void *ptr) {
        phpdbg_btree_result *result;
        TSRMLS_FETCH();
 
-       result = phpdbg_btree_find_closest(&PHPDBG_G(watchpoint_tree), (zend_ulong) ptr);
+       result = phpdbg_btree_find_closest(&PHPDBG_G(watchpoint_tree), (zend_ulong)ptr);
 
        if (result) {
                phpdbg_watchpoint_t *watch = result->ptr;
 
-               if ((size_t)watch->addr.ptr + watch->size > (size_t) ptr) {
+               if ((size_t)watch->addr.ptr + watch->size > (size_t)ptr) {
                        zend_hash_del(&PHPDBG_G(watchpoints), watch->str, watch->str_len);
                }
        }
index 5c0079057cfede2e0937c8e3fca619f4ea6117c8..d00bcff77e5f4b5589ddc2e087a130032458962d 100644 (file)
@@ -42,9 +42,9 @@ PHPDBG_WATCH(recursive);
  */
 
 static const phpdbg_command_t phpdbg_watch_commands[] = {
-       PHPDBG_COMMAND_D_EX(array,      "create watchpoint on an array", 'a', watch_array,     NULL, "s", 0),
-       PHPDBG_COMMAND_D_EX(delete,     "delete watchpoint",             'd', watch_delete,    NULL, "s", 0),
-       PHPDBG_COMMAND_D_EX(recursive,  "create recursive watchpoints",  'r', watch_recursive, NULL, "s", 0),
+       PHPDBG_COMMAND_D_EX(array,      "create watchpoint on an array", 'a', watch_array,     NULL, "s"),
+       PHPDBG_COMMAND_D_EX(delete,     "delete watchpoint",             'd', watch_delete,    NULL, "s"),
+       PHPDBG_COMMAND_D_EX(recursive,  "create recursive watchpoints",  'r', watch_recursive, NULL, "s"),
        PHPDBG_END_COMMAND
 };
 
diff --git a/sapi/phpdbg/phpdbg_webdata_transfer.c b/sapi/phpdbg/phpdbg_webdata_transfer.c
deleted file mode 100644 (file)
index 7c169ee..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
-   +----------------------------------------------------------------------+
-   | PHP Version 5                                                        |
-   +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2014 The PHP Group                                |
-   +----------------------------------------------------------------------+
-   | This source file is subject to version 3.01 of the PHP license,      |
-   | that is bundled with this package in the file LICENSE, and is        |
-   | available through the world-wide-web at the following url:           |
-   | http://www.php.net/license/3_01.txt                                  |
-   | If you did not receive a copy of the PHP license and are unable to   |
-   | obtain it through the world-wide-web, please send a note to          |
-   | license@php.net so we can mail you a copy immediately.               |
-   +----------------------------------------------------------------------+
-   | Authors: Bob Weinand <bwoebi@php.net>                                |
-   +----------------------------------------------------------------------+
-*/
-
-#include "phpdbg_webdata_transfer.h"
-#include "ext/standard/php_var.h"
-
-PHPDBG_API void phpdbg_webdata_compress(char **msg, int *len TSRMLS_DC) {
-       zval array;
-       HashTable *ht;
-       /* I really need to change that to an array of zvals... */
-       zval zv1 = {{0}}, *zvp1 = &zv1;
-       zval zv2 = {{0}}, *zvp2 = &zv2;
-       zval zv3 = {{0}}, *zvp3 = &zv3;
-       zval zv4 = {{0}}, *zvp4 = &zv4;
-       zval zv5 = {{0}}, *zvp5 = &zv5;
-       zval zv6 = {{0}}, *zvp6 = &zv6;
-       zval zv7 = {{0}}, *zvp7 = &zv7;
-       zval zv8 = {{0}}, *zvp8 = &zv8;
-
-       array_init(&array);
-       ht = Z_ARRVAL(array);
-
-       /* fetch superglobals */
-       {
-               zend_is_auto_global(ZEND_STRL("GLOBALS") TSRMLS_CC);
-               /* might be JIT */
-               zend_is_auto_global(ZEND_STRL("_ENV") TSRMLS_CC);
-               zend_is_auto_global(ZEND_STRL("_SERVER") TSRMLS_CC);
-               zend_is_auto_global(ZEND_STRL("_REQUEST") TSRMLS_CC);
-               array_init(&zv1);
-               zend_hash_copy(Z_ARRVAL(zv1), &EG(symbol_table), NULL, (void *) NULL, sizeof(zval *));
-               Z_ARRVAL(zv1)->pDestructor = NULL; /* we're operating on a copy! Don't double free zvals */
-               zend_hash_del(Z_ARRVAL(zv1), "GLOBALS", sizeof("GLOBALS")); /* do not use the reference to itself in json */
-               zend_hash_add(ht, "GLOBALS", sizeof("GLOBALS"), &zvp1, sizeof(zval *), NULL);
-       }
-
-#if PHP_VERSION_ID >= 50600
-       /* save php://input */
-       {
-               php_stream *stream;
-               int len;
-               char *contents;
-
-               stream = php_stream_temp_create_ex(TEMP_STREAM_DEFAULT, SAPI_POST_BLOCK_SIZE, PG(upload_tmp_dir));
-               if ((len = php_stream_copy_to_mem(stream, &contents, PHP_STREAM_COPY_ALL, 0)) > 0) {
-                       ZVAL_STRINGL(&zv2, contents, len, 0);
-               } else {
-                       ZVAL_EMPTY_STRING(&zv2);
-               }
-               Z_SET_REFCOUNT(zv2, 2);
-               zend_hash_add(ht, "input", sizeof("input"), &zvp2, sizeof(zval *), NULL);
-       }
-#endif
-
-       /* change sapi name */
-       {
-               if (sapi_module.name) {
-                       ZVAL_STRING(&zv6, sapi_module.name, 0);
-               } else {
-                       Z_TYPE(zv6) = IS_NULL;
-               }
-               Z_SET_REFCOUNT(zv6, 2);
-               zend_hash_add(ht, "sapi_name", sizeof("sapi_name"), &zvp6, sizeof(zval *), NULL);
-       }
-
-       /* handle modules / extensions */
-       {
-               HashPosition position;
-               zend_module_entry *module;
-               zend_extension *extension;
-               zend_llist_position pos;
-
-               array_init(&zv7);
-               for (zend_hash_internal_pointer_reset_ex(&module_registry, &position);
-                    zend_hash_get_current_data_ex(&module_registry, (void**) &module, &position) == SUCCESS;
-                    zend_hash_move_forward_ex(&module_registry, &position)) {
-                       zval **value = emalloc(sizeof(zval *));
-                       ALLOC_ZVAL(*value);
-                       ZVAL_STRING(*value, module->name, 1);
-                       zend_hash_next_index_insert(Z_ARRVAL(zv7), value, sizeof(zval *), NULL);
-               }
-               zend_hash_add(ht, "modules", sizeof("modules"), &zvp7, sizeof(zval *), NULL);
-
-               array_init(&zv8);
-               extension = (zend_extension *) zend_llist_get_first_ex(&zend_extensions, &pos);
-               while (extension) {
-                       zval **value = emalloc(sizeof(zval *));
-                       ALLOC_ZVAL(*value);
-                       ZVAL_STRING(*value, extension->name, 1);
-                       zend_hash_next_index_insert(Z_ARRVAL(zv8), value, sizeof(zval *), NULL);
-                       extension = (zend_extension *) zend_llist_get_next_ex(&zend_extensions, &pos);
-               }
-               zend_hash_add(ht, "extensions", sizeof("extensions"), &zvp8, sizeof(zval *), NULL);
-       }
-
-       /* switch cwd */
-       if (SG(options) & SAPI_OPTION_NO_CHDIR) {
-               char *ret = NULL;
-               char path[MAXPATHLEN];
-
-#if HAVE_GETCWD
-               ret = VCWD_GETCWD(path, MAXPATHLEN);
-#elif HAVE_GETWD
-               ret = VCWD_GETWD(path);
-#endif
-               if (ret) {
-                       ZVAL_STRING(&zv5, path, 1);
-                       Z_SET_REFCOUNT(zv5, 1);
-                       zend_hash_add(ht, "cwd", sizeof("cwd"), &zvp5, sizeof(zval *), NULL);
-               }
-       }
-
-       /* get system ini entries */
-       {
-               HashPosition position;
-               zend_ini_entry *ini_entry;
-
-               array_init(&zv3);
-               for (zend_hash_internal_pointer_reset_ex(EG(ini_directives), &position);
-                    zend_hash_get_current_data_ex(EG(ini_directives), (void**) &ini_entry, &position) == SUCCESS;
-                    zend_hash_move_forward_ex(EG(ini_directives), &position)) {
-                       zval **value = emalloc(sizeof(zval *));
-                       if (ini_entry->modified) {
-                               if (!ini_entry->orig_value) {
-                                       efree(value);
-                                       continue;
-                               }
-                               ALLOC_ZVAL(*value);
-                               ZVAL_STRINGL(*value, ini_entry->orig_value, ini_entry->orig_value_length, 1);
-                       } else {
-                               if (!ini_entry->value) {
-                                       efree(value);
-                                       continue;
-                               }
-                               ALLOC_ZVAL(*value);
-                               ZVAL_STRINGL(*value, ini_entry->value, ini_entry->value_length, 1);
-                       }
-                       zend_hash_add(Z_ARRVAL(zv3), ini_entry->name, ini_entry->name_length, value, sizeof(zval *), NULL);
-               }
-               zend_hash_add(ht, "systemini", sizeof("systemini"), &zvp3, sizeof(zval *), NULL);
-       }
-
-       /* get perdir ini entries */
-       if (EG(modified_ini_directives)) {
-               HashPosition position;
-               zend_ini_entry *ini_entry;
-
-               array_init(&zv4);
-               for (zend_hash_internal_pointer_reset_ex(EG(modified_ini_directives), &position);
-                    zend_hash_get_current_data_ex(EG(modified_ini_directives), (void**) &ini_entry, &position) == SUCCESS;
-                    zend_hash_move_forward_ex(EG(modified_ini_directives), &position)) {
-                       zval **value = emalloc(sizeof(zval *));
-                       if (!ini_entry->value) {
-                               efree(value);
-                               continue;
-                       }
-                       ALLOC_ZVAL(*value);
-                       ZVAL_STRINGL(*value, ini_entry->value, ini_entry->value_length, 1);
-                       zend_hash_add(Z_ARRVAL(zv4), ini_entry->name, ini_entry->name_length, value, sizeof(zval *), NULL);
-               }
-               zend_hash_add(ht, "userini", sizeof("userini"), &zvp4, sizeof(zval *), NULL);
-       }
-
-       /* encode data */
-       {
-               php_serialize_data_t var_hash;
-               smart_str buf = {0};
-               zval *arrayptr = &array;
-
-               PHP_VAR_SERIALIZE_INIT(var_hash);
-               php_var_serialize(&buf, &arrayptr, &var_hash TSRMLS_CC);
-               PHP_VAR_SERIALIZE_DESTROY(var_hash);
-               *msg = buf.c;
-               *len = buf.len;
-       }
-
-       zval_dtor(&array);
-}
diff --git a/sapi/phpdbg/phpdbg_webdata_transfer.h b/sapi/phpdbg/phpdbg_webdata_transfer.h
deleted file mode 100644 (file)
index d70175a..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-   +----------------------------------------------------------------------+
-   | PHP Version 5                                                        |
-   +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2014 The PHP Group                                |
-   +----------------------------------------------------------------------+
-   | This source file is subject to version 3.01 of the PHP license,      |
-   | that is bundled with this package in the file LICENSE, and is        |
-   | available through the world-wide-web at the following url:           |
-   | http://www.php.net/license/3_01.txt                                  |
-   | If you did not receive a copy of the PHP license and are unable to   |
-   | obtain it through the world-wide-web, please send a note to          |
-   | license@php.net so we can mail you a copy immediately.               |
-   +----------------------------------------------------------------------+
-   | Authors: Bob Weinand <bwoebi@php.net>                                |
-   +----------------------------------------------------------------------+
-*/
-
-#ifndef PHPDBG_WEBDATA_TRANSFER_H
-#define PHPDBG_WEBDATA_TRANSFER_H
-
-#include "zend.h"
-#include "phpdbg.h"
-
-PHPDBG_API void phpdbg_webdata_compress(char **msg, int *len TSRMLS_DC);
-
-#endif /* PHPDBG_WEBDATA_TRANSFER_H */
index 6a14a15adc2fb2b0b4f4a88afdd934beb1baef23..468ac6d9ea04fe61b4e477f590d2d9045747980f 100644 (file)
@@ -8,7 +8,7 @@
 # setting error color
 # setting notice color
 # Failed to find breakpoint #0
-# [Oplog off]
+# oplog disabled
 # opened oplog test.log
 # nothing
 #################################################
index c174564e07fff38c47622c05fde86277ebf75566..de4acb7651b0c6ebe50b7aabb95db7a7829744da 100644 (file)
@@ -4,14 +4,15 @@
 # expect: TEST::FORMAT
 # options: -rr
 #################################################
-#[User Class: test (3 methods)]
+#[User Class: test]
+#Methods (3):
 #L%d-%d test::testMethod() %s
 #              L%d     %s ZEND_RETURN                    C%d                   <unused>             <unused>            
 #      L%d-%d test::testPrivateMethod() %s
 #              L%d     %s ZEND_RETURN                    C%d                   <unused>             <unused>            
 #      L%d-%d test::testProtectedMethod() %s
 #              L%d     %s ZEND_RETURN                    C%d                   <unused>             <unused>            
-#[User Method testMethod (1 ops)]
+#[User Method testMethod]
 #      L%d-%d test::testMethod() %s
 #              L%d     %s ZEND_RETURN                    C%d                   <unused>             <unused>   
 #################################################
index 2c7660ad60ebc33d3cdead53463560d9f0f18896..c7a579be17926f1f8a29adf76343e4667ec0dd7c 100644 (file)
@@ -4,11 +4,12 @@
 # expect: TEST::FORMAT
 # options: -rr
 #################################################
-#Cleaning Execution Environment
-#Classes    %d
-#Functions  %d
-#Constants  %d
-#Includes   %d
+#[Cleaning Execution Environment]
+#Classes                       %d
+#Functions             %d
+#Constants             %d
+#Includes              %d
+#[Nothing to execute!]
 #################################################
 clean
 quit
index 8ce100249131f9e18ff4010f452a30a6e1798244..b547b0d6ba1b1acd90a47f80020b352aa16c8d6a 100644 (file)
@@ -4,7 +4,7 @@
 # expect: TEST::FORMAT
 # options: -rr
 #################################################
-#Clearing Breakpoints
+#[Clearing Breakpoints]
 #File%w%d
 #Functions%w%d
 #Methods%w%d
index b4d801670bcdc61a53e73f8897817176ff5f7dc3..7193600ea3db7018b75f90b84f649398ce0a9c01 100644 (file)
@@ -4,9 +4,9 @@
 # expect: TEST::FORMAT
 # options: -rr
 #################################################
-#[Successful compilation of %s]
+#[Attempting compilation of %s]
+#[Success]
 #Hello World
-#[Script ended normally]
 #################################################
 <:
 define('OUT', 
diff --git a/sapi/phpdbg/xml.md b/sapi/phpdbg/xml.md
deleted file mode 100644 (file)
index b1203ea..0000000
+++ /dev/null
@@ -1,759 +0,0 @@
-phpdbg XML format
-=================
-
-Common attributes
-=================
-
-severity
---------
-
-- indicates the genre of phpdbg system output
-- usually one of these values:
- - normal
- - notice
- - error
-
-msgout
-------
-
-- text message output related to the xml data (e.g. &lt;intro severity="normal" help="help" msgout="To get help using phpdbg type &amp;quot;help&amp;quot; and press enter" />)
-
-req
----
-
-- the request id, if one was passed to the last command (via -r %d, where %d is the id) (and the output is related to that message)
-
-file
-----
-
-- refers to a filename
-
-method
-------
-
-- format classname::methodname
-- refers to a method
-
-function
---------
-
-- refers to a function
-
-symbol
-------
-
-- either function or method (is method if "::" are present)
-
-opline
-------
-
-- in hexadecimal format
-- refers to a specific pointer to a (zend_)op
-
-opcode
-------
-
-- refers to an opcode (ZEND_*)
-
-type
-----
-
-- general attribute for most errors, describes the genre of the error
-
-
-General tags
-============
-
-intro
------
-
-- appears on startup if -q flag wasn't provided as command line arg
-- before any input possibility
-- attributes may be spread over multiple tags
-- wrapped in &lt;intros> tag
-
-### attributes ###
-
-- version: current phpdbg version (as string)
-- help: command name for help
-- report: URL for bug reporting
-
-prompt
-------
-
-- msg tag contains the text prompt
-- indicates that a new command may be accepted
-
-phpdbg
-------
-
-- general text message output from phpdbg system
-
-stream
-------
-
-- any output by PHP itself (e.g. &lt;stream type="stdout">test&lt;/stream>)
-
-### attributes ###
-
-- type: stderr or stdout
-
-php
----
-
-- php error output
-
-### attributes ###
-
-- msg: the error message
-
-
-General error tags
-==================
-
-command
--------
-
-- general errors about commands
-
-### possible attributes ###
-
-- type
- - toomanyargs: more arguments than allowed
- - noarg: argument missing
- - wrongarg: wrong type of argument (e.g. letters instead of integer)
- - toofewargs: not enough arguments
- - notfound: command (or subcommand) doesn't exist
- - ambiguous: command was ambiguous
- - invalidcommand: command input is totally invalid
- - (nostack: should not happen: is an internal error)
- - (emptystack: should not happen: is an internal error)
-- command: passed command
-- subcommand: passed subcommand (present if the error is related to the subcommand)
-- expected: count of expected arguments
-- got: type of argument for type "wrongarg"
-- num: if possible, information about which parameter had a wrong argument
-
-inactive
---------
-
-- by type
- - op_array: nothing was yet compiled (probably because no execution context set)
- - symbol_table: no symbol table present (not yet initiailized or already destructed)
- - noexec: not in execution
- - memory_manager: using the native memory manager (malloc, free, realloc) instead of e.g. the Zend MM
- - notfound: file not found
- - nocontext: execution context was not set (or compilation had failed)
- - isrunning: command requires no running script
-
-
-Commands
-========
-
-export
-------
-
-- tag: &lt;exportbreakpoint />
-- usually triggered by successful export command
-- may appear when cleaning to temporary store breakpoints
-- errors by type
- - openfailure: could not create file
-
-### attributes ###
-
-- count: number of exported breakpoints
-
-break / info break
-------------------
-
-- General tag for breakpoint creation, deletion and hits is "&lt;breakpoint />"
-
-### possible attributes ###
-
-- id: the breakpoint id (if the leave command was executed, the id has the value "leave")
-- num: the nth opline of a function/method/file
-- add: has value "success"/"fail": a brekpoint was successfully/not added
-- pending: the breakpoint is waiting for resolving (e.g. a file opline on a not yet loaded file)
-- deleted: has value "success"/"fail": a breakpoint was successfully/not deleted
-- eval: the condition on conditional breakpoints
-- file
-- opline
-- opcode
-- symbol
-- function
-- method
-- line
-
-
-- listing breakpoints always in a container element "&lt;breakpoints>"
- - Child nodes:
-  - function
-  - method
-  - file
-  - opline
-  - methodopline
-  - functionopline
-  - fileopline
-  - evalfunction
-  - evalfunctionopline
-  - evalmethod
-  - evalmethodopline
-  - evalfile
-  - evalopline
-  - eval
-  - opcode
- - attributes:
-  - name: name of the symbol (function/method/file/opcode)
-  - disabled: empty value if enabled, non-empty if enabled
-
-- errors (by type)
- - exists: the breakpoint already exists
- - maxoplines: tries to break at an opline (usedoplinenum) higher than the number of present oplines (in maxoplinenum)
- - nomethod: method doesn't exist
- - internalfunction: one cannot break on an opline of an internal function
- - notregular: tries to set a breakpoint in not a regular file
- - (invalidparameter: should not happen: is an internal error)
-
-frame
------
-
-- General tag for frames is "&lt;frame>"
-- always has id attribute; if it only has id attribute, it just indicates current frame number, no other elements follow
-- may contain other elements (of type &lt;arg>) when contained in &lt;backtrace> tag
-- &lt;arg> always contains a &lt;stream> element, the value of the variable
-
-### possible attributes ###
-
-- id: the frame id, current frame has id 0 (frames with internal function calls have the same id than their called frame)
-- symbol ("{main}" is root frame)
-- file
-- line
-- internal: has value "internal" when being an internal function call (one cannot inspect that frame)
-
-- being an error: (by type)
- - maxnum: tried to access a frame with a number higher than existing (or &lt; 0)
-
-### attributes on &lt;arg> ###
-
-- variadic: has a non-empty value if the argument is variadic
-- name: variable name of parameter
-
-info (subcommands)
-------------------
-
-### break ###
-
-- See above ("break / info break")
-
-### files ###
-
-- lists included files
-- &lt;includedfileinfo num="" /> with num having an integer value, indicating the number of included files
-- &lt;includedfile name=""/>: one per file, with name being the file path of the included file
-
-### error ###
-
-- gets last error
-- &lt;lasterror error="" (file="" line="") />
-- error attribute contains the last error as a string, is empty if there's no last error
-
-### constants ###
-
-- &lt;constantinfo num="" /> with num having an integer value, indicating the number of (local or superglobal) variables
-- if info vars was used it'll have also one of these attributes:
- - method
- - function
- - file
- - opline
-- for each variable there is a &lt;constant> element
-- &lt;constant address="" refcount="" type="" name="" />
- - address: pointer to zval (hexadecimal)
- - refcount: refcount of zval
- - type: the variable type (long, string, ...). If the value is "unknown", the other attributes are meaningless
- - name: the name of the variable
- - value: the value of primitive types (scalars) => string/int/bool/double
- - length: if string, then the length of that string
-
-### vars / globals ###
-
-- &lt;variableinfo num="" /> with num having an integer value, indicating the number of (local or superglobal) variables
-- if info vars was used it'll have also one of these attributes:
- - method
- - function
- - file
- - opline
-- for each variable there is a &lt;variable> element
-- &lt;variable address="" refcount="" type="" name="" />
- - address: pointer to zval (hexadecimal)
- - refcount: refcount of zval
- - type: the variable type (long, string, ...). If the value is "unknown", the other attributes are meaningless
- - name: the name of the variable
- - refstatus: empty if the zval is not a reference
- - class: the class the object in the zval is an instance of
- - resource: the type of the resource in the zval
- - value: the value of primitive types (scalars) => string/int/bool/double
- - length: if string, then the length of that string
-
-### literal ###
-
-- &lt;literalinfo num="" /> with num having an integer value, indicating the number of literals, optional arguments are:
- - method
- - function
- - file
- - opline
-- for each literal there is a &lt;literal> followed by a &lt;stream type="stdout"> which prints the value of the literal
-- &lt;literal id="" />: where id is the internal identifier of the literal
-
-### memory ###
-
-- Format:
-
-    &lt;meminfo />
-    &lt;current />
-    &lt;used mem="" />
-    &lt;real mem="" />
-    &lt;peak />
-    &lt;used mem="" />
-    &lt;real mem="" />
-
-- mem is an attribute whose value is a float. The memory is given in kilobytes (1 kB == 1024 bytes)
-
-### classes ###
-
-- &lt;classinfo num="" /> with num having an integer value, indicating the number of loaded user-defined classes
-- Each class is enumerated with first a &lt;class>, then an optional &lt;parents> container and then a &lt;classsource> element
-- The &lt;parents> container contains the &lt;class> elements of the parent of the last &lt;class> element. 
-- &lt;class type="" flags="" name="" methodcount="" />
- - type: either "User" or "Internal"
- - flags: either "Interface", "Class" or "Abstract Class"
-- &lt;classsource /> where the class was defined, if there are no attributes, location is unknown, usually defined by
- - file
- - line
-
-### funcs ###
-
-- &lt;functioninfo num="" /> with num having an integer value, indicating the number of loaded user-defined functions
-- Each class is enumerated with first a &lt;function> and then a &lt;functionsource> element
-- &lt;function name="" />
-- &lt;functionsource /> where the function was defined, if there are no attributes, location is unknown, usually defined by
- - file
- - line
-
-list
-----
-
-- consists of &lt;line> elements wrapped in a &lt;list> container
-- &lt;list file=""> is the container element with file being the filename
-- &lt;line line="" code="" /> with value of code being the whole line of code in the line specified in the line attribute
- - current: this attribute is set to "current" if that line is the line where the executor currently is
-
-print
------
-
-### without a subcommand ###
-
-- &lt;print> elements are wrapped in a &lt;printinfo> element
-- there may be a variable number of &lt;print> elements with a variable count of args inside the &lt;printinfo> element
-- possible args are:
- - readline: yes/no - readline enabled or disabled
- - libedit: yes/no - libedit enabled or disabled
- - context: current executing context
- - compiled: yes/no - are there actual compiled ops?
- - stepping: @@ TODO (meaningless for now) @@
- - quiet: on/off - should it always print the opline being currently executed?
- - oplog: on/off - are oplines logged in a file?
- - ops: number of opcodes in current executing context
- - vars: number of compiled variables (CV)
- - executing: yes/no - in executor?
- - vmret: the return value of the last executed opcode
-  - default: continue
-  - 1: return from vm
-  - 2: enter stack frame
-  - 3: leave stack frame
- - classes: number of classes
- - functions: number of functions
- - constants: number of constants
- - includes: number of included files
-
-### with a subcommand ###
-
-- introduced by &lt;printinfo num="" /> (except for print opline) with num being the number of opcodes and one of these args:
- - file
- - method
- - function
- - class (then also type and flags attributes, see info classes command for their meanings)
- - symbol (also type and flags attributes; here the value of flags is either "Method" or "Function")
-- if there is a class method, the methods are all wrapped in a &lt;printmethods> container
-- then comes a &lt;printoplineinfo type="" /> where type is either "User" or "Internal"
-- the &lt;printoplineinfo> has either a method or a function attribute
-- if the type is "Internal"
- - there are no oplines, it's an internal method or function
-- if the type is "User"
- - it has these attributes
-   - startline: the first line of code where the method or function is defined
-   - endline: the lastt line of code where the method or function is defined
-   - file: the file of code where the method or function is defined
- - is followed by the oplines of that method or function (&lt;print> elements)
-- &lt;print line="%u" opline="%p" opcode="%s" op="%s" />
-- in case of print opline it emits a single &lt;opline line="" opline="" opcode="" op="" file="" />
-
-exec
-----
-
-- command executing and compiling a given file
- - &lt;exec type="unset" context="" />: indicates unsetting of the old context
- - &lt;exec type="unsetops" />: indicates unsetting of the old compiled opcodes
- - &lt;exec type="unchanged" />: same execution context chosen again
- - &lt;exec type="set" context="" />: indicates setting of the new context
-- errors by tag
- - &lt;compile>
-  - openfailure: couldn't open file
-  - compilefailure: The file indicated in context couldn't be compiled
- - &lt;exec>
-  - invalid: given context (attribute) is not matching a valid file or symlink
-  - notfound: given context (attribute) does not exist
-
-run / &lt;stop> tag
--------------------
-
-- runs the script (set via exec command)
-- &lt;stop type="end" />: script execution ended normally
-- (error) &lt;stop type="bailout" /> the VM bailed out (usually because there was some error)
-- compile failures see under exec, errors, &lt;compile>
-
-step
-----
-
-- steps by one line or opcode (as defined via set stepping) default is one line
-- returns back to the executor
-
-continue
---------
-
-- returns back to the executor
-
-until
------
-
-- temporarily disables all the breakpoints on that line until that line was left once
-- returns back to the executor
-
-finish
-------
-
-- temporarily disables all the breakpoints until the end of the current frame
-- returns back to the executor
-
-leave
-------
-
-- temporarily disables all the breakpoints past the end of the current frame and then stops
-- returns back to the executor
-
-back
-----
-
-- prints backtrace
-- see frame command
-
-ev
---
-
-- eval()uates some code
-- output wrapped in &lt;eval> tags
-- output is here first a dump of xml tags (see "Variable Dump" section), then a dump wrapped in <stream> tags
-- if there's an error, the tag will be <eval>, instead of the usual <php> tag
-
-sh
---
-
-- executes shell command
-- still pipes to stdout ... without wrapping &lt;stream> !!! (@@ TODO @@)
-
-source
-------
-
-- executes a file in .phpdbginit format
-- errors by type
- - notfound: file not found
-
-register
---------
-
-- registers a function to be used like a command
-- &lt;register function="" />: successfully registered function
-- errors by type
- - notfound: no such function
- - inuse: function already registered
-
-quit
-----
-
-- quits phpdbg
-- if successful connection will be closed...
-
-clean
------
-
-- cleans environment (basically a shutdown + new startup)
-- &lt;clean> tags wrapped in a &lt;cleaninfo> container
-- possible attributes of &lt;clean> tag
- - classes: number of classes
- - functions: number of functions
- - constants: number of constants
- - includes: number of included files
-
-clear
------
-
-- removes all breakpoints
-- &lt;clear> tags wrapped in a &lt;clearinfo> container
-- possible attributes of &lt;clear> tag (value is always the number of defined breakpoints of that type)
- - files
- - functions
- - methods
- - oplines
- - fileoplines
- - functionoplines
- - methodoplines
- - eval
-
-watch
------
-
-- watchpoints generally are identified by a variable (one may need to switch frames first...)
-- &lt;watch variable="" />, &lt;watchrecursive variable="" /> and &lt;watcharray variable="" /> (normal, array, recursive)
-- &lt;watch> if error, by type:
- - undefined: tried to set a watchpoint on a not (yet) defined variable
- - notiterable: element which is tried to be accessed as an object or array is nor array nor object
- - invalidinput: generally malformed input
-- &lt;watchdelete variable="" />: when "watch delete" was used on a watchpoint
-- (error) &lt;watchdelete type="nowatch" />: that watchpoint doesn't exist, so couldn't be deleted
-- for hit watchpoints etc., see Other tags, &lt;watch*>
-- when using watch list, &lt;watchvariable> elements are wrapped in a &lt;watchlist> container
- - &lt;watchvariable variable="" on="" type="" />
-  - variable: watched variable (may be a variable of another scope!)
-  - on: values are array or variable, depending on what is watched
-  - type: values are recursive or simple, depending on whether the watchpoint is checked recursively or not
-
-set
----
-
-- a general error is type="wrongargs" where a wrong argument was passed to a subcommand; tag is then &lt;set*>
-
-### prompt ###
-
-- without other args, a &lt;setpromt str="" /> tag is emitted where the value of the str attribue is the value of the prompt
-- when there is another arg, the prompt is changed to that arg, no further xml answer
-
-### break ###
-
-- enables / disables a given breakpoint silently with no further xml answer
-- if the boolean switch is omitted, it emits current state in a &lt;setbreak id="" active="" /> where active is on or off
-- error with type="nobreak", when no breakpoint with the given id exists
-
-### breaks ###
-
-- generally enables / disables breakpoint functionality silently with no further xml answer
-- if the boolean switch is omitted, it emits current state in a &lt;setbreaks active="" /> where active is on or off
-
-### color ###
-
-- sets the color on prompt, error or notices
-- &lt;setcolor type="" color="" code="" />: code is the color code of color, type is either:
- - prompt
- - error
- - notice
-- errors by type:
- - nocolor: color doesn't exist
- - invalidtype: type wasn't one of the three allowed types
-
-### colors ###
-
-- generally enables / disables colors silently with no further xml answer
-- if the boolean switch is omitted, it emits current state in a &lt;setcolors active="" /> where active is on or off
-
-### oplog ###
-
-- sets oplog
-- (error) &lt;setoplog type="openfailure" file="" /> when it couldn't open the passed file path
-- &lt;setoplog type="closingold" /> is emitted when there was a previous open oplog (and a file is passed)
-- if no further argument is passed, it emits current state in a &lt;setoplog active="" /> where active is on or off
-
-### quiet ###
-
-- generally enables / disables quietness silently with no further xml answer
-- if the boolean switch is omitted, it emits current state in a &lt;setquiet active="" /> where active is on or off
-
-### setpping ###
-
-- sets stepping to either opcode or line (so a step command will either advance one op or one line)
-- if no further argument is passed, it emits current state in a &lt;setoplog type="" /> where active is opcode or line
-
-### refcount ###
-
-- generally enables / disables showing of refcount in watchpoint breaks silently with no further xml answer
-- if the boolean switch is omitted, it emits current state in a &lt;setrefcount active="" /> where active is on or off
-
-wait
-----
-
-- internally executes exec, so exec will output first (if binding to socket worked)
-
-### attributes ###
-
-- import: has value "success"/"fail"
-- missingmodule/missingextension: modules/extensions loaded in the target SAPI, but not in phpdbg
-
-### errors (by type) ###
-
-- nosocket: couldn't establish socket
-- invaliddata: invalid JSON passed to socket
-
-dl
---
-
-- loads a module or Zend extension at a given path
-- if a relative path is passed, it's relative to the extension_dir ini setting
-
-### attributes ###
-
-- extensiontype: "Zend extension" or "module"
-- name: the extension name
-- path: the path where it was loaded
-
-### errors (by type) ###
-
-- unsupported: dynamic extension loading is unsupported
-- relpath: relative path given, but no extension_dir defined
-- unknown: general error with internal DL_LOAD() (for message see msg attribute)
-- wrongapi: wrong Zend engine version (apineeded / apiinstalled attributes give information about the API versions)
-- wrongbuild: unmatched build versions (buildneeded / buildinstalled attributes give information about the build versions)
-- registerfailure: registering module failed
-- startupfailure: couldn't startup Zend extension / module
-- initfailure: couldn't initialize module
-- nophpso: passed shared object is not a valid Zend extension nor module
-
-- errors may have the module or extension attribute when their name is already known at the point of failure
-
-
-Other tags
-==========
-
-&lt;signal>
------------
-
-- received caught signal
-
-### attributes ###
-
-- type: type of signal (e.g. SIGINT)
-
-### by type ###
-
-- SIGINT: interactive mode is entered...
-
-&lt;watch*>
------------
-
-- generally emitted on hit watchpoint
-- &lt;watchdelete variable="" />: when a variable was unset, the watchpoint is removed too
-- &lt;watchhit variable="" />: when ever a watched variable is changed, followed by a &lt;watchdata> container
-- &lt;watchdata> may contain
- - for watchpoints on variables:
-  - each of these &lt;watch*> tags conatins a type attribute whose value is either "old" or "new")
-  - &lt;watchvalue type="" inaccessible="inaccessible" />: old value is inaccessible
-  - &lt;watchvalue type=""> may contain a &lt;stream> element which indicates the old/new (type attribute) value of the variable
-  - &lt;watchrefcount type="" refcount="" isref="" />: old/new (type attribute) refcount and isref, both numbers
-   - isref: if the value is 0, it's not a reference, else it is one
- - for watchpoints on arrays:
-  - &lt;watchsize> inspects size variations of an array (the sum):
-   - removed: number of elements removed
-   - added: number of elements added
-  - &lt;watcharrayptr>: if this tag appears, the internal pointer of the array way changed
-
-&lt;signalsegv>
----------------
-
-- generally emitted when data couldn't be fetched (e.g. by accessing inconsistent data); only used in hard interrupt mode
-- it might mean that data couldn't be fetched at all, or that only incomplete data was fetched (e.g. when a fixed number of following attributes are fetched, this tag will mark a stop of fetching if none or not all tags were printed)
-
-
-Variable Dump
-=============
-
-- all except property and element tags have a refstatus attribute, is set to non-empty if it's a reference
-
-object properties
------------------
-
-- wrapped in a property tag &lt;property name="" protection="">
- - name: name of key
- - protection: one of these three values: public / protected / private
- - class: only present if protection attribute is set to "private", contains the name of the class to which the property belongs
-- if the property tag contains any serverity="error" attribute, there was some crucial error to read it, just skip it
-
-array elements
---------------
-- wrapped in an element tag &lt;property name="" protection="">
- - name: name of key
-- if the element tag contains any serverity="error" attribute, there was some crucial error to read it, jsut skip it
-
-int
----
-
-- &lt;int refstatus="" value="" />
- - value is the integer
-
-float
------
-
-- &lt;float refstatus="" value="" />
- - value is the float
-
-bool
-----
-
-- &lt;bool refstatus="" value="" />
- -value: true or false
-
-string
-------
-
-- &lt;string refstatus="" length="" value="" />
- - length: length or string
- - value: the string
-
-null
-----
-
-- &lt;null refstatus="" />
-
-array
------
-
-- &lt;array refstatus="" num="">
- - num: number of elements
- - contains &lt;element> tags
-object
-------
-
-- &lt;object refstatus="" class="" id="" num="">
- - class: name of the class the object is an instance of (may be empty if unknown)
- - id: id of the object
- - num: number of properties
- - contains &lt;property> tags
-
-resource
---------
-
-- &lt;resource refstatus="" id="" type="" />
- - id: resource id
- - type: type of resource
-
-recursion
----------
-
-- &lt;recursion />
-- if that tag appears, there's a recursive reference inside the value to be printed
diff --git a/sapi/phpdbg/zend_mm_structs.h b/sapi/phpdbg/zend_mm_structs.h
deleted file mode 100644 (file)
index ca64069..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-#ifndef ZEND_MM_STRUCTS_H
-#define ZEND_MM_STRUCTS_H
-
-/* structs and macros defined in Zend/zend_alloc.c
-   Needed for realizing watchpoints and sigsafe memory */
-
-#include "zend.h"
-
-#ifndef ZEND_MM_COOKIES
-#      define ZEND_MM_COOKIES ZEND_DEBUG
-#endif
-
-#define ZEND_MM_CACHE 1
-#ifndef ZEND_MM_CACHE_STAT
-#      define ZEND_MM_CACHE_STAT 0
-#endif
-
-typedef struct _zend_mm_block_info {
-#if ZEND_MM_COOKIES
-       size_t _cookie;
-#endif
-       size_t _size;
-       size_t _prev;
-} zend_mm_block_info;
-
-typedef struct _zend_mm_small_free_block {
-       zend_mm_block_info info;
-#if ZEND_DEBUG
-       unsigned int magic;
-#ifdef ZTS
-       THREAD_T thread_id;
-#endif
-#endif
-       struct _zend_mm_free_block *prev_free_block;
-       struct _zend_mm_free_block *next_free_block;
-} zend_mm_small_free_block;
-
-typedef struct _zend_mm_free_block {
-       zend_mm_block_info info;
-#if ZEND_DEBUG
-       unsigned int magic;
-#ifdef ZTS
-       THREAD_T thread_id;
-#endif
-#endif
-       struct _zend_mm_free_block *prev_free_block;
-       struct _zend_mm_free_block *next_free_block;
-
-       struct _zend_mm_free_block **parent;
-       struct _zend_mm_free_block *child[2];
-} zend_mm_free_block;
-
-#define ZEND_MM_SMALL_FREE_BUCKET(heap, index) \
-       (zend_mm_free_block *) ((char *)&heap->free_buckets[index * 2] + \
-               sizeof(zend_mm_free_block *) * 2 - \
-               sizeof(zend_mm_small_free_block))
-
-#define ZEND_MM_REST_BUCKET(heap) \
-       (zend_mm_free_block *)((char *)&heap->rest_buckets[0] + \
-               sizeof(zend_mm_free_block *) * 2 - \
-               sizeof(zend_mm_small_free_block))
-
-#define ZEND_MM_NUM_BUCKETS (sizeof(size_t) << 3)
-struct _zend_mm_heap {
-       int   use_zend_alloc;
-       void *(*_malloc)(size_t);
-       void  (*_free)(void *);
-       void *(*_realloc)(void *, size_t);
-       size_t              free_bitmap;
-       size_t              large_free_bitmap;
-       size_t              block_size;
-       size_t              compact_size;
-       zend_mm_segment    *segments_list;
-       zend_mm_storage    *storage;
-       size_t              real_size;
-       size_t              real_peak;
-       size_t              limit;
-       size_t              size;
-       size_t              peak;
-       size_t              reserve_size;
-       void               *reserve;
-       int                 overflow;
-       int                 internal;
-#if ZEND_MM_CACHE
-       unsigned int        cached;
-       zend_mm_free_block *cache[ZEND_MM_NUM_BUCKETS];
-#endif
-       zend_mm_free_block *free_buckets[ZEND_MM_NUM_BUCKETS*2];
-       zend_mm_free_block *large_free_buckets[ZEND_MM_NUM_BUCKETS];
-       zend_mm_free_block *rest_buckets[2];
-       int                 rest_count;
-#if ZEND_MM_CACHE_STAT
-       struct {
-               int count;
-               int max_count;
-               int hit;
-               int miss;
-       } cache_stat[ZEND_MM_NUM_BUCKETS+1];
-#endif
-};
-
-#endif