]> granicus.if.org Git - php/commitdiff
exec last command automatically on enter
authorkrakjoe <joe.watkins@live.co.uk>
Sun, 10 Nov 2013 21:49:37 +0000 (21:49 +0000)
committerkrakjoe <joe.watkins@live.co.uk>
Sun, 10 Nov 2013 21:49:37 +0000 (21:49 +0000)
phpdbg.c
phpdbg.h
phpdbg_prompt.c
phpdbg_prompt.h

index 997c273836620729fc70aad20c886916e8cbc577..744565fb48d051d41c4939dd40e7d7860aef0997 100644 (file)
--- a/phpdbg.c
+++ b/phpdbg.c
@@ -34,6 +34,9 @@ static inline void php_phpdbg_globals_ctor(zend_phpdbg_globals *pg) /* {{{ */
     pg->quitting = 0;
     pg->bp_count = 0;
     pg->quiet = 0;
+    pg->last = NULL;
+    pg->last_params = NULL;
+    pg->last_params_len = 0;
 } /* }}} */
 
 static PHP_MINIT_FUNCTION(phpdbg) /* {{{ */
index c9f3e5ee3df35401d31a979e38c9d5868abd922c..0ac807d98741398714239f444b5762966722f5ee 100644 (file)
--- a/phpdbg.h
+++ b/phpdbg.h
@@ -44,6 +44,8 @@
 
 #define PHPDBG_NEXT 2
 
+typedef struct _phpdbg_command_t phpdbg_command_t;
+
 ZEND_BEGIN_MODULE_GLOBALS(phpdbg)
        HashTable bp_files;
        HashTable bp_symbols;
@@ -58,6 +60,9 @@ ZEND_BEGIN_MODULE_GLOBALS(phpdbg)
        zend_bool has_sym_bp;   /* symbol-based breakpoint has been set */
        zend_bool quitting;     /* quitting flag */
        int quiet;              /* quiet */
+       phpdbg_command_t *last; /* last command */
+       const char *last_params;/* last expression */
+       size_t last_params_len; /* last expression length */
 ZEND_END_MODULE_GLOBALS(phpdbg)
 
 #endif /* PHPDBG_H */
index 684e88c64b5600c327e0c377fc3964854c963bfc..4c5b51712e1dd37cd8727f37ba5ef35f826a0158 100644 (file)
@@ -58,7 +58,7 @@ static inline int phpdbg_compile(TSRMLS_D) /* {{{ */
 
        if (!EG(in_execution)) {
            printf("Attempting compilation of %s\n", 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(
@@ -310,7 +310,10 @@ int phpdbg_do_cmd(const phpdbg_command_t *command, char *cmd_line, size_t cmd_le
 
        while (command && command->name) {
                if (command->name_len == expr_len
-                       && memcmp(cmd, command->name, expr_len) == 0) {
+                           && memcmp(cmd, command->name, expr_len) == 0) {
+                       PHPDBG_G(last) = command;
+                       PHPDBG_G(last_params) = params;
+                       PHPDBG_G(last_params_len) = cmd_len - expr_len;
                        return command->handler(params, cmd_len - expr_len TSRMLS_CC);
                }
                ++command;
@@ -346,11 +349,15 @@ int phpdbg_interactive(int argc, char **argv TSRMLS_DC) /* {{{ */
                            return PHPDBG_NEXT;
 
                    }
+               } else if (PHPDBG_G(last)) {
+                   PHPDBG_G(last)->handler(
+                       PHPDBG_G(last_params), PHPDBG_G(last_params_len) TSRMLS_CC);
                }
 
                if (!PHPDBG_G(quitting)) {
                    printf("phpdbg> ");
                }
+
        }
 
        return SUCCESS;
index b6921d671e446c223327bfd26f4cda130566bc54..c0590e25970925f6a6e389d1ab746e10b6cea9dd 100644 (file)
@@ -35,13 +35,13 @@ typedef int (*phpdbg_command_handler_t)(const char* expr, size_t expr_len TSRMLS
 /**
  * Command representation
  */
-typedef struct _phpdbg_command_t {
+struct _phpdbg_command_t {
        const char *name;                   /* Command name */
        size_t name_len;                    /* Command name length */
        const char *tip;                    /* Menu tip */
        size_t tip_len;                     /* Menu tip length */
        phpdbg_command_handler_t handler;   /* Command handler */
-} phpdbg_command_t;
+} ;
 
 /**
  * Command Executor