From: krakjoe Date: Wed, 20 Nov 2013 16:19:37 +0000 (+0000) Subject: -r option X-Git-Tag: php-5.6.0alpha1~110^2~167 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=12d969558d5ab369cf1f2330cb7fd8032151a13b;p=php -r option --- diff --git a/phpdbg.c b/phpdbg.c index 1052619cd9..5e9432e1e6 100644 --- a/phpdbg.c +++ b/phpdbg.c @@ -392,6 +392,7 @@ const opt_struct OPTIONS[] = { /* {{{ */ {'i', 1, "specify init"}, {'I', 0, "ignore init"}, {'O', 1, "opline log"}, + {'r', 0, "run"}, {'-', 0, NULL} }; /* }}} */ @@ -450,6 +451,7 @@ int main(int argc, char **argv) /* {{{ */ char *php_optarg; int php_optind, opt, show_banner = 1; long cleaning = 0; + int run = 0; #ifdef ZTS void ***tsrm_ls; #endif @@ -481,9 +483,13 @@ phpdbg_main: php_optarg = NULL; php_optind = 1; opt = 0; - + run = 0; + while ((opt = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0, 2)) != -1) { switch (opt) { + case 'r': + run++; + break; case 'n': phpdbg->php_ini_ignore = 1; break; @@ -646,6 +652,15 @@ phpdbg_main: goto phpdbg_out; } } zend_end_try(); + + if (run) { + /* no need to try{}, run does it ... */ + PHPDBG_COMMAND_HANDLER(run)(NULL, NULL TSRMLS_CC); + if (run > 1) { + /* if -r is on the command line more than once just quit */ + goto phpdbg_out; + } + } /* phpdbg main() */ do { @@ -664,7 +679,6 @@ phpdbg_main: } while(!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)); phpdbg_out: - if (ini_entries) { free(ini_entries); } diff --git a/phpdbg_prompt.c b/phpdbg_prompt.c index e0498e4440..3d5d42fcd5 100644 --- a/phpdbg_prompt.c +++ b/phpdbg_prompt.c @@ -33,31 +33,6 @@ #include "phpdbg_prompt.h" #include "phpdbg_cmd.h" -/* {{{ forward declarations */ -static PHPDBG_COMMAND(exec); -static PHPDBG_COMMAND(compile); -static PHPDBG_COMMAND(step); -static PHPDBG_COMMAND(next); -static PHPDBG_COMMAND(run); -static PHPDBG_COMMAND(eval); -static PHPDBG_COMMAND(until); -static PHPDBG_COMMAND(finish); -static PHPDBG_COMMAND(leave); -static PHPDBG_COMMAND(print); -static PHPDBG_COMMAND(break); -static PHPDBG_COMMAND(back); -static PHPDBG_COMMAND(list); -static PHPDBG_COMMAND(info); -static PHPDBG_COMMAND(clean); -static PHPDBG_COMMAND(clear); -static PHPDBG_COMMAND(help); -static PHPDBG_COMMAND(quiet); -static PHPDBG_COMMAND(aliases); -static PHPDBG_COMMAND(shell); -static PHPDBG_COMMAND(oplog); -static PHPDBG_COMMAND(register); -static PHPDBG_COMMAND(quit); /* }}} */ - /* {{{ command declarations */ static const phpdbg_command_t phpdbg_prompt_commands[] = { PHPDBG_COMMAND_D(exec, "set execution context", 'e', NULL, 1), @@ -186,7 +161,7 @@ next_line: } } /* }}} */ -static PHPDBG_COMMAND(exec) /* {{{ */ +PHPDBG_COMMAND(exec) /* {{{ */ { switch (param->type) { case STR_PARAM: { @@ -256,7 +231,7 @@ int phpdbg_compile(TSRMLS_D) /* {{{ */ return FAILURE; } /* }}} */ -static PHPDBG_COMMAND(compile) /* {{{ */ +PHPDBG_COMMAND(compile) /* {{{ */ { if (!PHPDBG_G(exec)) { phpdbg_error("No execution context"); @@ -275,7 +250,7 @@ static PHPDBG_COMMAND(compile) /* {{{ */ return SUCCESS; } /* }}} */ -static PHPDBG_COMMAND(step) /* {{{ */ +PHPDBG_COMMAND(step) /* {{{ */ { switch (param->type) { case EMPTY_PARAM: @@ -296,12 +271,12 @@ static PHPDBG_COMMAND(step) /* {{{ */ return SUCCESS; } /* }}} */ -static PHPDBG_COMMAND(next) /* {{{ */ +PHPDBG_COMMAND(next) /* {{{ */ { return PHPDBG_NEXT; } /* }}} */ -static PHPDBG_COMMAND(until) /* {{{ */ +PHPDBG_COMMAND(until) /* {{{ */ { if (!EG(in_execution)) { phpdbg_error("Not executing"); @@ -329,7 +304,7 @@ static PHPDBG_COMMAND(until) /* {{{ */ return PHPDBG_UNTIL; } /* }}} */ -static PHPDBG_COMMAND(finish) /* {{{ */ +PHPDBG_COMMAND(finish) /* {{{ */ { if (!EG(in_execution)) { phpdbg_error("Not executing"); @@ -362,7 +337,7 @@ static PHPDBG_COMMAND(finish) /* {{{ */ return PHPDBG_FINISH; } /* }}} */ -static PHPDBG_COMMAND(leave) /* {{{ */ +PHPDBG_COMMAND(leave) /* {{{ */ { if (!EG(in_execution)) { phpdbg_error("Not executing"); @@ -445,7 +420,7 @@ static inline void phpdbg_handle_exception(TSRMLS_D) /* }}} */ zval_dtor(&exception); } /* }}} */ -static PHPDBG_COMMAND(run) /* {{{ */ +PHPDBG_COMMAND(run) /* {{{ */ { if (EG(in_execution)) { phpdbg_error("Cannot start another execution while one is in progress"); @@ -508,7 +483,7 @@ out: return SUCCESS; } /* }}} */ -static PHPDBG_COMMAND(eval) /* {{{ */ +PHPDBG_COMMAND(eval) /* {{{ */ { switch (param->type) { case STR_PARAM: { @@ -554,7 +529,7 @@ static PHPDBG_COMMAND(eval) /* {{{ */ return SUCCESS; } /* }}} */ -static PHPDBG_COMMAND(back) /* {{{ */ +PHPDBG_COMMAND(back) /* {{{ */ { if (!EG(in_execution)) { phpdbg_error("Not executing!"); @@ -592,7 +567,7 @@ static PHPDBG_COMMAND(back) /* {{{ */ return SUCCESS; } /* }}} */ -static PHPDBG_COMMAND(print) /* {{{ */ +PHPDBG_COMMAND(print) /* {{{ */ { switch (param->type) { case EMPTY_PARAM: { @@ -644,12 +619,12 @@ static PHPDBG_COMMAND(print) /* {{{ */ return SUCCESS; } /* }}} */ -static PHPDBG_COMMAND(info) /* {{{ */ +PHPDBG_COMMAND(info) /* {{{ */ { return SUCCESS; } /* }}} */ -static PHPDBG_COMMAND(break) /* {{{ */ +PHPDBG_COMMAND(break) /* {{{ */ { switch (param->type) { case ADDR_PARAM: @@ -674,7 +649,7 @@ static PHPDBG_COMMAND(break) /* {{{ */ return SUCCESS; } /* }}} */ -static PHPDBG_COMMAND(shell) /* {{{ */ +PHPDBG_COMMAND(shell) /* {{{ */ { /* don't allow this to loop, ever ... */ switch (param->type) { @@ -710,7 +685,7 @@ static PHPDBG_COMMAND(shell) /* {{{ */ return SUCCESS; } /* }}} */ -static PHPDBG_COMMAND(register) /* {{{ */ +PHPDBG_COMMAND(register) /* {{{ */ { switch (param->type) { case STR_PARAM: { @@ -742,7 +717,7 @@ static PHPDBG_COMMAND(register) /* {{{ */ return SUCCESS; } /* }}} */ -static PHPDBG_COMMAND(quit) /* {{{ */ +PHPDBG_COMMAND(quit) /* {{{ */ { /* don't allow this to loop, ever ... */ if (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) { @@ -754,7 +729,7 @@ static PHPDBG_COMMAND(quit) /* {{{ */ return SUCCESS; } /* }}} */ -static PHPDBG_COMMAND(clean) /* {{{ */ +PHPDBG_COMMAND(clean) /* {{{ */ { if (EG(in_execution)) { phpdbg_error("Cannot clean environment while executing"); @@ -773,7 +748,7 @@ static PHPDBG_COMMAND(clean) /* {{{ */ return SUCCESS; } /* }}} */ -static PHPDBG_COMMAND(clear) /* {{{ */ +PHPDBG_COMMAND(clear) /* {{{ */ { phpdbg_notice("Clearing Breakpoints"); @@ -788,7 +763,7 @@ static PHPDBG_COMMAND(clear) /* {{{ */ return SUCCESS; } /* }}} */ -static PHPDBG_COMMAND(aliases) /* {{{ */ +PHPDBG_COMMAND(aliases) /* {{{ */ { const phpdbg_command_t *prompt_command = phpdbg_prompt_commands; @@ -821,7 +796,7 @@ static PHPDBG_COMMAND(aliases) /* {{{ */ return SUCCESS; } /* }}} */ -static PHPDBG_COMMAND(oplog) /* {{{ */ +PHPDBG_COMMAND(oplog) /* {{{ */ { switch (param->type) { case EMPTY_PARAM: @@ -860,7 +835,7 @@ static PHPDBG_COMMAND(oplog) /* {{{ */ return SUCCESS; } /* }}} */ -static PHPDBG_COMMAND(help) /* {{{ */ +PHPDBG_COMMAND(help) /* {{{ */ { switch (param->type) { case EMPTY_PARAM: { @@ -899,6 +874,9 @@ static PHPDBG_COMMAND(help) /* {{{ */ phpdbg_writeln(" -i\t-imy.init\t\tSet .phpdbginit file"); phpdbg_writeln(" -I\tN/A\t\t\tIgnore default .phpdbginit"); phpdbg_writeln(" -O\t-Omy.oplog\t\tSets oplog output file"); + phpdbg_writeln(" -r\tN/A\t\t\tRun execution context"); + phpdbg_notice( + "Note: passing -rr will cause phpdbg to quit after execution"); phpdbg_help_footer(); } break; @@ -908,7 +886,7 @@ static PHPDBG_COMMAND(help) /* {{{ */ return SUCCESS; } /* }}} */ -static PHPDBG_COMMAND(quiet) /* {{{ */ +PHPDBG_COMMAND(quiet) /* {{{ */ { switch (param->type) { case NUMERIC_PARAM: { @@ -927,7 +905,7 @@ static PHPDBG_COMMAND(quiet) /* {{{ */ return SUCCESS; } /* }}} */ -static PHPDBG_COMMAND(list) /* {{{ */ +PHPDBG_COMMAND(list) /* {{{ */ { switch (param->type) { case NUMERIC_PARAM: diff --git a/phpdbg_prompt.h b/phpdbg_prompt.h index 08997b5346..c26dec2c34 100644 --- a/phpdbg_prompt.h +++ b/phpdbg_prompt.h @@ -35,4 +35,29 @@ void phpdbg_execute_ex(zend_execute_data *execute_data TSRMLS_DC); void phpdbg_execute_ex(zend_op_array *op_array TSRMLS_DC); #endif +/* {{{ */ +PHPDBG_COMMAND(exec); +PHPDBG_COMMAND(compile); +PHPDBG_COMMAND(step); +PHPDBG_COMMAND(next); +PHPDBG_COMMAND(run); +PHPDBG_COMMAND(eval); +PHPDBG_COMMAND(until); +PHPDBG_COMMAND(finish); +PHPDBG_COMMAND(leave); +PHPDBG_COMMAND(print); +PHPDBG_COMMAND(break); +PHPDBG_COMMAND(back); +PHPDBG_COMMAND(list); +PHPDBG_COMMAND(info); +PHPDBG_COMMAND(clean); +PHPDBG_COMMAND(clear); +PHPDBG_COMMAND(help); +PHPDBG_COMMAND(quiet); +PHPDBG_COMMAND(aliases); +PHPDBG_COMMAND(shell); +PHPDBG_COMMAND(oplog); +PHPDBG_COMMAND(register); +PHPDBG_COMMAND(quit); /* }}} */ + #endif /* PHPDBG_PROMPT_H */