From adcabcc125094dae8fe1b62dca267e3fa302907d Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Thu, 17 Sep 2015 22:52:55 +0200 Subject: [PATCH] Add # delimiter to phpdbg commands --- sapi/phpdbg/phpdbg.c | 10 + sapi/phpdbg/phpdbg_cmd.c | 67 +- sapi/phpdbg/phpdbg_cmd.h | 1 + sapi/phpdbg/phpdbg_lexer.c | 1370 ++++++++++++++++-------------- sapi/phpdbg/phpdbg_lexer.l | 17 +- sapi/phpdbg/phpdbg_parser.c | 292 ++++--- sapi/phpdbg/phpdbg_parser.h | 38 +- sapi/phpdbg/phpdbg_parser.y | 16 +- sapi/phpdbg/tests/delimiter.phpt | 7 + 9 files changed, 986 insertions(+), 832 deletions(-) create mode 100644 sapi/phpdbg/tests/delimiter.phpt diff --git a/sapi/phpdbg/phpdbg.c b/sapi/phpdbg/phpdbg.c index a8247844c8..2d3a97a1a8 100644 --- a/sapi/phpdbg/phpdbg.c +++ b/sapi/phpdbg/phpdbg.c @@ -1244,6 +1244,11 @@ void phpdbg_signal_handler(int sig, siginfo_t *info, void *context) /* {{{ */ } /* }}} */ #endif +void phpdbg_sighup_handler(int sig) /* {{{ */ +{ + exit(0); +} /* }}} */ + void *phpdbg_malloc_wrapper(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) /* {{{ */ { return _zend_mm_alloc(zend_mm_get_heap(), size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); @@ -1613,6 +1618,11 @@ phpdbg_main: /* set remote flag to stop service shutting down upon quit */ remote = 1; +#ifndef _WIN32 + } else { + + signal(SIGHUP, phpdbg_sighup_handler); +#endif } mm_heap = zend_mm_get_heap(); diff --git a/sapi/phpdbg/phpdbg_cmd.c b/sapi/phpdbg/phpdbg_cmd.c index ed4cf3b6d6..d2dc89b09c 100644 --- a/sapi/phpdbg/phpdbg_cmd.c +++ b/sapi/phpdbg/phpdbg_cmd.c @@ -434,8 +434,9 @@ PHPDBG_API void phpdbg_stack_free(phpdbg_param_t *stack) { PHPDBG_API void phpdbg_stack_push(phpdbg_param_t *stack, phpdbg_param_t *param) { phpdbg_param_t *next = calloc(1, sizeof(phpdbg_param_t)); - if (!next) + if (!next) { return; + } *(next) = *(param); @@ -454,6 +455,16 @@ PHPDBG_API void phpdbg_stack_push(phpdbg_param_t *stack, phpdbg_param_t *param) stack->len++; } /* }}} */ +/* {{{ */ +PHPDBG_API void phpdbg_stack_separate(phpdbg_param_t *param) { + phpdbg_param_t *stack = calloc(1, sizeof(phpdbg_param_t)); + + stack->type = STACK_PARAM; + stack->next = param->next; + param->next = stack; + stack->top = param->top; +} /* }}} */ + PHPDBG_API int phpdbg_stack_verify(const phpdbg_command_t *command, phpdbg_param_t **stack) { if (command) { char buffer[128] = {0,}; @@ -466,7 +477,7 @@ PHPDBG_API int phpdbg_stack_verify(const phpdbg_command_t *command, phpdbg_param /* check for arg spec */ if (!(arg) || !(*arg)) { - if (!top) { + if (!top || top->type == STACK_PARAM) { return SUCCESS; } @@ -506,6 +517,10 @@ PHPDBG_API int phpdbg_stack_verify(const phpdbg_command_t *command, phpdbg_param } while (arg && *arg) { + if (top && top->type == STACK_PARAM) { + break; + } + current++; switch (*arg) { @@ -528,9 +543,11 @@ PHPDBG_API int phpdbg_stack_verify(const phpdbg_command_t *command, phpdbg_param case '*': { /* do nothing */ } break; } - if (top ) { + if (top) { top = top->next; - } else break; + } else { + break; + } received++; arg++; @@ -644,22 +661,9 @@ PHPDBG_API const phpdbg_command_t *phpdbg_stack_resolve(const phpdbg_command_t * return NULL; } /* }}} */ -/* {{{ */ -PHPDBG_API int phpdbg_stack_execute(phpdbg_param_t *stack, zend_bool allow_async_unsafe) { - phpdbg_param_t *top = NULL; +static int phpdbg_internal_stack_execute(phpdbg_param_t *stack, zend_bool allow_async_unsafe) { const phpdbg_command_t *handler = NULL; - - if (stack->type != STACK_PARAM) { - phpdbg_error("command", "type=\"nostack\"", "The passed argument was not a stack !"); - return FAILURE; - } - - if (!stack->len) { - phpdbg_error("command", "type=\"emptystack\"", "The stack contains nothing !"); - return FAILURE; - } - - top = (phpdbg_param_t *) stack->next; + phpdbg_param_t *top = (phpdbg_param_t *) stack->next; switch (top->type) { case EVAL_PARAM: @@ -709,6 +713,31 @@ PHPDBG_API int phpdbg_stack_execute(phpdbg_param_t *stack, zend_bool allow_async return SUCCESS; } /* }}} */ +/* {{{ */ +PHPDBG_API int phpdbg_stack_execute(phpdbg_param_t *stack, zend_bool allow_async_unsafe) { + phpdbg_param_t *top = stack; + + if (stack->type != STACK_PARAM) { + phpdbg_error("command", "type=\"nostack\"", "The passed argument was not a stack !"); + return FAILURE; + } + + if (!stack->len) { + phpdbg_error("command", "type=\"emptystack\"", "The stack contains nothing !"); + return FAILURE; + } + + do { + if (top->type == STACK_PARAM) { + if (phpdbg_internal_stack_execute(top, allow_async_unsafe) == FAILURE) { + return FAILURE; + } + } + } while ((top = top->next)); + + return SUCCESS; +} /* }}} */ + PHPDBG_API char *phpdbg_read_input(char *buffered) /* {{{ */ { char buf[PHPDBG_MAX_CMD]; diff --git a/sapi/phpdbg/phpdbg_cmd.h b/sapi/phpdbg/phpdbg_cmd.h index 957297600b..e09c2a2116 100644 --- a/sapi/phpdbg/phpdbg_cmd.h +++ b/sapi/phpdbg/phpdbg_cmd.h @@ -137,6 +137,7 @@ PHPDBG_API int phpdbg_ask_user_permission(const char *question); * Stack Management */ PHPDBG_API void phpdbg_stack_push(phpdbg_param_t *stack, phpdbg_param_t *param); +PHPDBG_API void phpdbg_stack_separate(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); PHPDBG_API int phpdbg_stack_verify(const phpdbg_command_t *command, phpdbg_param_t **stack); PHPDBG_API int phpdbg_stack_execute(phpdbg_param_t *stack, zend_bool allow_async_unsafe); diff --git a/sapi/phpdbg/phpdbg_lexer.c b/sapi/phpdbg/phpdbg_lexer.c index 05b6cc9e8c..0b954252e3 100644 --- a/sapi/phpdbg/phpdbg_lexer.c +++ b/sapi/phpdbg/phpdbg_lexer.c @@ -103,222 +103,235 @@ yyc_INITIAL: YYDEBUG(0, *YYCURSOR); YYFILL(4); yych = *YYCURSOR; - if (yych <= 'D') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy4; - if (yych <= 0x08) goto yy11; - if (yych >= '\n') goto yy5; + if (yych <= '#') { + if (yych <= '\f') { + if (yych <= 0x08) { + if (yych <= 0x00) goto yy8; + goto yy13; + } else { + if (yych <= '\t') goto yy2; + if (yych <= '\n') goto yy8; + goto yy13; + } } else { - if (yych <= '\r') { - if (yych <= '\f') goto yy11; + if (yych <= 0x1F) { + if (yych >= 0x0E) goto yy13; } else { - if (yych != ' ') goto yy11; + if (yych <= ' ') goto yy4; + if (yych <= '"') goto yy13; + goto yy7; } } } else { - if (yych <= 'd') { - if (yych <= 'Q') { - if (yych <= 'E') goto yy7; - goto yy11; + if (yych <= 'S') { + if (yych <= 'E') { + if (yych <= 'D') goto yy13; + goto yy9; } else { - if (yych <= 'R') goto yy10; - if (yych <= 'S') goto yy8; - goto yy11; + if (yych <= 'Q') goto yy13; + if (yych <= 'R') goto yy12; + goto yy10; } } else { if (yych <= 'q') { - if (yych <= 'e') goto yy7; - goto yy11; + if (yych == 'e') goto yy9; + goto yy13; } else { - if (yych <= 'r') goto yy9; - if (yych <= 's') goto yy8; - goto yy11; + if (yych <= 'r') goto yy11; + if (yych <= 's') goto yy10; + goto yy13; } } } +yy2: YYDEBUG(2, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) <= '\f') { - if (yych == '\t') goto yy26; - } else { - if (yych <= '\r') goto yy26; - if (yych == ' ') goto yy26; + if (yybm[0+(yych = *YYCURSOR)] & 128) { + goto yy4; } yy3: YYDEBUG(3, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 178 "sapi/phpdbg/phpdbg_lexer.l" +#line 187 "sapi/phpdbg/phpdbg_lexer.l" { YYSETCONDITION(NORMAL); YYCURSOR = LEX(text); goto restart; } -#line 158 "sapi/phpdbg/phpdbg_lexer.c" +#line 163 "sapi/phpdbg/phpdbg_lexer.c" yy4: YYDEBUG(4, *YYCURSOR); - yych = *++YYCURSOR; - goto yy3; -yy5: - YYDEBUG(5, *YYCURSOR); ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(5, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy4; + } YYDEBUG(6, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 70 "sapi/phpdbg/phpdbg_lexer.l" +#line 156 "sapi/phpdbg/phpdbg_lexer.l" { - return 0; + /* ignore whitespace */ + + goto restart; } -#line 172 "sapi/phpdbg/phpdbg_lexer.c" +#line 181 "sapi/phpdbg/phpdbg_lexer.c" yy7: YYDEBUG(7, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'V') goto yy22; - if (yych == 'v') goto yy22; + yych = *++YYCURSOR; goto yy3; yy8: YYDEBUG(8, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'H') goto yy18; - if (yych == 'h') goto yy18; + yych = *++YYCURSOR; goto yy3; yy9: YYDEBUG(9, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy15; - } - if (yych == 'U') goto yy12; - if (yych == 'u') goto yy12; + if (yych == 'V') goto yy24; + if (yych == 'v') goto yy24; goto yy3; yy10: YYDEBUG(10, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'U') goto yy12; - if (yych == 'u') goto yy12; + if (yych == 'H') goto yy20; + if (yych == 'h') goto yy20; goto yy3; yy11: YYDEBUG(11, *YYCURSOR); - yych = *++YYCURSOR; - goto yy3; + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= 0x1F) { + if (yych <= '\t') { + if (yych <= 0x08) goto yy3; + goto yy17; + } else { + if (yych == '\r') goto yy17; + goto yy3; + } + } else { + if (yych <= 'U') { + if (yych <= ' ') goto yy17; + if (yych <= 'T') goto yy3; + goto yy14; + } else { + if (yych == 'u') goto yy14; + goto yy3; + } + } yy12: YYDEBUG(12, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'N') goto yy14; - if (yych == 'n') goto yy14; + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'U') goto yy14; + if (yych == 'u') goto yy14; + goto yy3; yy13: YYDEBUG(13, *YYCURSOR); - YYCURSOR = YYMARKER; + yych = *++YYCURSOR; goto yy3; yy14: YYDEBUG(14, *YYCURSOR); yych = *++YYCURSOR; - if (yybm[0+yych] & 128) { - goto yy15; - } - goto yy13; + if (yych == 'N') goto yy16; + if (yych == 'n') goto yy16; yy15: YYDEBUG(15, *YYCURSOR); + YYCURSOR = YYMARKER; + goto yy3; +yy16: + YYDEBUG(16, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '\f') { + if (yych != '\t') goto yy15; + } else { + if (yych <= '\r') goto yy17; + if (yych != ' ') goto yy15; + } +yy17: + YYDEBUG(17, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(16, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy15; + YYDEBUG(18, *YYCURSOR); + if (yych <= '\f') { + if (yych == '\t') goto yy17; + } else { + if (yych <= '\r') goto yy17; + if (yych == ' ') goto yy17; } - YYDEBUG(17, *YYCURSOR); + YYDEBUG(19, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 165 "sapi/phpdbg/phpdbg_lexer.l" +#line 174 "sapi/phpdbg/phpdbg_lexer.l" { YYSETCONDITION(PRE_RAW); phpdbg_init_param(yylval, EMPTY_PARAM); return T_RUN; } -#line 241 "sapi/phpdbg/phpdbg_lexer.c" -yy18: - YYDEBUG(18, *YYCURSOR); +#line 275 "sapi/phpdbg/phpdbg_lexer.c" +yy20: + YYDEBUG(20, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '\f') { - if (yych != '\t') goto yy13; + if (yych != '\t') goto yy15; } else { - if (yych <= '\r') goto yy19; - if (yych != ' ') goto yy13; + if (yych <= '\r') goto yy21; + if (yych != ' ') goto yy15; } -yy19: - YYDEBUG(19, *YYCURSOR); +yy21: + YYDEBUG(21, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(20, *YYCURSOR); + YYDEBUG(22, *YYCURSOR); if (yych <= '\f') { - if (yych == '\t') goto yy19; + if (yych == '\t') goto yy21; } else { - if (yych <= '\r') goto yy19; - if (yych == ' ') goto yy19; + if (yych <= '\r') goto yy21; + if (yych == ' ') goto yy21; } - YYDEBUG(21, *YYCURSOR); + YYDEBUG(23, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 160 "sapi/phpdbg/phpdbg_lexer.l" +#line 168 "sapi/phpdbg/phpdbg_lexer.l" { YYSETCONDITION(PRE_RAW); phpdbg_init_param(yylval, EMPTY_PARAM); return T_SHELL; } -#line 271 "sapi/phpdbg/phpdbg_lexer.c" -yy22: - YYDEBUG(22, *YYCURSOR); +#line 305 "sapi/phpdbg/phpdbg_lexer.c" +yy24: + YYDEBUG(24, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '\f') { - if (yych != '\t') goto yy13; + if (yych != '\t') goto yy15; } else { - if (yych <= '\r') goto yy23; - if (yych != ' ') goto yy13; + if (yych <= '\r') goto yy25; + if (yych != ' ') goto yy15; } -yy23: - YYDEBUG(23, *YYCURSOR); +yy25: + YYDEBUG(25, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(24, *YYCURSOR); + YYDEBUG(26, *YYCURSOR); if (yych <= '\f') { - if (yych == '\t') goto yy23; + if (yych == '\t') goto yy25; } else { - if (yych <= '\r') goto yy23; - if (yych == ' ') goto yy23; + if (yych <= '\r') goto yy25; + if (yych == ' ') goto yy25; } - YYDEBUG(25, *YYCURSOR); + YYDEBUG(27, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 155 "sapi/phpdbg/phpdbg_lexer.l" +#line 162 "sapi/phpdbg/phpdbg_lexer.l" { YYSETCONDITION(PRE_RAW); phpdbg_init_param(yylval, EMPTY_PARAM); return T_EVAL; } -#line 301 "sapi/phpdbg/phpdbg_lexer.c" -yy26: - YYDEBUG(26, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(27, *YYCURSOR); - if (yych <= '\f') { - if (yych == '\t') goto yy26; - } else { - if (yych <= '\r') goto yy26; - if (yych == ' ') goto yy26; - } - YYDEBUG(28, *YYCURSOR); - yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 149 "sapi/phpdbg/phpdbg_lexer.l" - { - /* ignore whitespace */ - - goto restart; -} -#line 322 "sapi/phpdbg/phpdbg_lexer.c" +#line 335 "sapi/phpdbg/phpdbg_lexer.c" } /* *********************************** */ yyc_NORMAL: @@ -357,51 +370,51 @@ yyc_NORMAL: 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, }; - YYDEBUG(29, *YYCURSOR); + YYDEBUG(28, *YYCURSOR); YYFILL(11); yych = *YYCURSOR; if (yybm[0+yych] & 8) { - goto yy31; + goto yy30; } if (yych <= 'N') { if (yych <= '0') { if (yych <= '#') { if (yych <= '\t') { - if (yych <= 0x00) goto yy34; - goto yy42; + if (yych <= 0x00) goto yy35; + goto yy41; } else { - if (yych <= '\n') goto yy34; - if (yych <= '"') goto yy42; - goto yy39; + if (yych <= '\n') goto yy35; + if (yych <= '"') goto yy41; + goto yy33; } } else { if (yych <= '-') { - if (yych <= ',') goto yy42; - goto yy36; + if (yych <= ',') goto yy41; + goto yy37; } else { - if (yych <= '.') goto yy44; - if (yych <= '/') goto yy42; - goto yy47; + if (yych <= '.') goto yy43; + if (yych <= '/') goto yy41; + goto yy46; } } } else { if (yych <= 'E') { if (yych <= ':') { - if (yych <= '9') goto yy44; - goto yy41; + if (yych <= '9') goto yy43; + goto yy40; } else { - if (yych <= 'C') goto yy42; - if (yych <= 'D') goto yy48; - goto yy49; + if (yych <= 'C') goto yy41; + if (yych <= 'D') goto yy47; + goto yy48; } } else { if (yych <= 'H') { - if (yych <= 'F') goto yy50; - goto yy42; + if (yych <= 'F') goto yy49; + goto yy41; } else { - if (yych <= 'I') goto yy38; - if (yych <= 'M') goto yy42; - goto yy51; + if (yych <= 'I') goto yy39; + if (yych <= 'M') goto yy41; + goto yy50; } } } @@ -409,671 +422,687 @@ yyc_NORMAL: if (yych <= 'f') { if (yych <= 'Y') { if (yych <= 'S') { - if (yych <= 'O') goto yy52; - goto yy42; + if (yych <= 'O') goto yy51; + goto yy41; } else { - if (yych <= 'T') goto yy53; - if (yych <= 'X') goto yy42; - goto yy54; + if (yych <= 'T') goto yy52; + if (yych <= 'X') goto yy41; + goto yy53; } } else { if (yych <= 'c') { - if (yych <= 'Z') goto yy55; - goto yy42; + if (yych <= 'Z') goto yy54; + goto yy41; } else { - if (yych <= 'd') goto yy48; - if (yych <= 'e') goto yy49; - goto yy50; + if (yych <= 'd') goto yy47; + if (yych <= 'e') goto yy48; + goto yy49; } } } else { if (yych <= 'o') { if (yych <= 'i') { - if (yych <= 'h') goto yy42; - goto yy38; + if (yych <= 'h') goto yy41; + goto yy39; } else { - if (yych <= 'm') goto yy42; - if (yych <= 'n') goto yy51; - goto yy52; + if (yych <= 'm') goto yy41; + if (yych <= 'n') goto yy50; + goto yy51; } } else { if (yych <= 'x') { - if (yych == 't') goto yy53; - goto yy42; + if (yych == 't') goto yy52; + goto yy41; } else { - if (yych <= 'y') goto yy54; - if (yych <= 'z') goto yy56; - goto yy42; + if (yych <= 'y') goto yy53; + if (yych <= 'z') goto yy55; + goto yy41; } } } } -yy31: - YYDEBUG(31, *YYCURSOR); +yy30: + YYDEBUG(30, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(32, *YYCURSOR); + YYDEBUG(31, *YYCURSOR); if (yybm[0+yych] & 8) { - goto yy31; + goto yy30; } - YYDEBUG(33, *YYCURSOR); + YYDEBUG(32, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 149 "sapi/phpdbg/phpdbg_lexer.l" +#line 156 "sapi/phpdbg/phpdbg_lexer.l" { /* ignore whitespace */ goto restart; } -#line 469 "sapi/phpdbg/phpdbg_lexer.c" +#line 482 "sapi/phpdbg/phpdbg_lexer.c" +yy33: + YYDEBUG(33, *YYCURSOR); + YYCTXMARKER = YYCURSOR + 1; + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '.') { + if (yych <= ',') goto yy34; + if (yych <= '-') goto yy122; + goto yy123; + } else { + if (yych <= '/') goto yy34; + if (yych <= '9') goto yy123; + } yy34: YYDEBUG(34, *YYCURSOR); - ++YYCURSOR; + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 91 "sapi/phpdbg/phpdbg_lexer.l" + { + YYSETCONDITION(INITIAL); + return T_SEPARATOR; +} +#line 504 "sapi/phpdbg/phpdbg_lexer.c" +yy35: YYDEBUG(35, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(36, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 70 "sapi/phpdbg/phpdbg_lexer.l" { return 0; } -#line 479 "sapi/phpdbg/phpdbg_lexer.c" -yy36: - YYDEBUG(36, *YYCURSOR); - yyaccept = 0; +#line 514 "sapi/phpdbg/phpdbg_lexer.c" +yy37: + YYDEBUG(37, *YYCURSOR); + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 32) { - goto yy44; + goto yy43; } - if (yych == 'r') goto yy113; - goto yy43; -yy37: - YYDEBUG(37, *YYCURSOR); + if (yych == 'r') goto yy112; + goto yy42; +yy38: + YYDEBUG(38, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 135 "sapi/phpdbg/phpdbg_lexer.l" +#line 142 "sapi/phpdbg/phpdbg_lexer.l" { phpdbg_init_param(yylval, STR_PARAM); yylval->str = estrndup(yytext, yyleng); yylval->len = yyleng; return T_ID; } -#line 499 "sapi/phpdbg/phpdbg_lexer.c" -yy38: - YYDEBUG(38, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'F') goto yy109; - if (yych == 'f') goto yy109; - goto yy43; +#line 534 "sapi/phpdbg/phpdbg_lexer.c" yy39: YYDEBUG(39, *YYCURSOR); - ++YYCURSOR; + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'F') goto yy108; + if (yych == 'f') goto yy108; + goto yy42; +yy40: YYDEBUG(40, *YYCURSOR); - yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 87 "sapi/phpdbg/phpdbg_lexer.l" - { - return T_POUND; -} -#line 516 "sapi/phpdbg/phpdbg_lexer.c" -yy41: - YYDEBUG(41, *YYCURSOR); YYCTXMARKER = YYCURSOR + 1; yych = *++YYCURSOR; - if (yych == ':') goto yy107; - if (yych == '\\') goto yy61; - goto yy105; -yy42: - YYDEBUG(42, *YYCURSOR); - yyaccept = 0; + if (yych == ':') goto yy106; + if (yych == '\\') goto yy60; + goto yy104; +yy41: + YYDEBUG(41, *YYCURSOR); + yyaccept = 1; YYMARKER = ++YYCURSOR; YYFILL(3); yych = *YYCURSOR; -yy43: - YYDEBUG(43, *YYCURSOR); +yy42: + YYDEBUG(42, *YYCURSOR); if (yybm[0+yych] & 16) { - goto yy42; + goto yy41; } - if (yych <= '9') goto yy37; - goto yy58; -yy44: - YYDEBUG(44, *YYCURSOR); - yyaccept = 1; + if (yych <= '9') goto yy38; + goto yy57; +yy43: + YYDEBUG(43, *YYCURSOR); + yyaccept = 2; YYMARKER = ++YYCURSOR; YYFILL(3); yych = *YYCURSOR; - YYDEBUG(45, *YYCURSOR); + YYDEBUG(44, *YYCURSOR); if (yybm[0+yych] & 32) { - goto yy44; + goto yy43; } if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x00) goto yy46; - if (yych <= 0x08) goto yy42; + if (yych <= 0x00) goto yy45; + if (yych <= 0x08) goto yy41; } else { - if (yych != '\r') goto yy42; + if (yych != '\r') goto yy41; } } else { if (yych <= '#') { - if (yych <= ' ') goto yy46; - if (yych <= '"') goto yy42; + if (yych <= ' ') goto yy45; + if (yych <= '"') goto yy41; } else { - if (yych == ':') goto yy58; - goto yy42; + if (yych == ':') goto yy57; + goto yy41; } } -yy46: - YYDEBUG(46, *YYCURSOR); +yy45: + YYDEBUG(45, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 116 "sapi/phpdbg/phpdbg_lexer.l" +#line 123 "sapi/phpdbg/phpdbg_lexer.l" { phpdbg_init_param(yylval, NUMERIC_PARAM); yylval->num = atoi(yytext); return T_DIGITS; } -#line 572 "sapi/phpdbg/phpdbg_lexer.c" -yy47: - YYDEBUG(47, *YYCURSOR); - yyaccept = 1; +#line 597 "sapi/phpdbg/phpdbg_lexer.c" +yy46: + YYDEBUG(46, *YYCURSOR); + yyaccept = 2; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 32) { - goto yy44; + goto yy43; } if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x00) goto yy46; - if (yych <= 0x08) goto yy43; - goto yy46; + if (yych <= 0x00) goto yy45; + if (yych <= 0x08) goto yy42; + goto yy45; } else { - if (yych == '\r') goto yy46; - goto yy43; + if (yych == '\r') goto yy45; + goto yy42; } } else { if (yych <= '#') { - if (yych <= ' ') goto yy46; - if (yych <= '"') goto yy43; - goto yy46; + if (yych <= ' ') goto yy45; + if (yych <= '"') goto yy42; + goto yy45; } else { - if (yych == 'x') goto yy101; - goto yy43; + if (yych == 'x') goto yy100; + goto yy42; } } +yy47: + YYDEBUG(47, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'I') goto yy94; + if (yych == 'i') goto yy94; + goto yy42; yy48: YYDEBUG(48, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'I') goto yy95; - if (yych == 'i') goto yy95; - goto yy43; + if (yych == 'N') goto yy89; + if (yych == 'n') goto yy89; + goto yy42; yy49: YYDEBUG(49, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'N') goto yy90; - if (yych == 'n') goto yy90; - goto yy43; + if (yych == 'A') goto yy86; + if (yych == 'a') goto yy86; + goto yy42; yy50: YYDEBUG(50, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'A') goto yy87; - if (yych == 'a') goto yy87; - goto yy43; + if (yych == 'O') goto yy82; + if (yych == 'o') goto yy82; + goto yy42; yy51: YYDEBUG(51, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'O') goto yy83; - if (yych == 'o') goto yy83; - goto yy43; -yy52: - YYDEBUG(52, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'N') { - if (yych == 'F') goto yy82; - if (yych <= 'M') goto yy43; - goto yy76; + if (yych == 'F') goto yy81; + if (yych <= 'M') goto yy42; + goto yy75; } else { if (yych <= 'f') { - if (yych <= 'e') goto yy43; - goto yy82; + if (yych <= 'e') goto yy42; + goto yy81; } else { - if (yych == 'n') goto yy76; - goto yy43; + if (yych == 'n') goto yy75; + goto yy42; } } +yy52: + YYDEBUG(52, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'R') goto yy79; + if (yych == 'r') goto yy79; + goto yy42; yy53: YYDEBUG(53, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'R') goto yy80; - if (yych == 'r') goto yy80; - goto yy43; + if (yych == 'E') goto yy74; + if (yych == 'e') goto yy74; + goto yy42; yy54: YYDEBUG(54, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'E') goto yy75; - if (yych == 'e') goto yy75; - goto yy43; + if (yych == 'E') goto yy71; + goto yy42; yy55: YYDEBUG(55, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'E') goto yy72; - goto yy43; -yy56: + if (yych != 'e') goto yy42; YYDEBUG(56, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych != 'e') goto yy43; + if (yych == 'n') goto yy65; + goto yy42; +yy57: YYDEBUG(57, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'n') goto yy66; - goto yy43; + yych = *++YYCURSOR; + if (yych == '/') goto yy59; + if (yych == '\\') goto yy60; yy58: YYDEBUG(58, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '/') goto yy60; - if (yych == '\\') goto yy61; -yy59: - YYDEBUG(59, *YYCURSOR); YYCURSOR = YYMARKER; if (yyaccept <= 2) { if (yyaccept <= 1) { if (yyaccept <= 0) { - goto yy37; + goto yy34; } else { - goto yy46; + goto yy38; } } else { - goto yy71; + goto yy45; } } else { - if (yyaccept <= 3) { - goto yy104; + if (yyaccept <= 4) { + if (yyaccept <= 3) { + goto yy70; + } else { + goto yy103; + } } else { - goto yy119; + goto yy118; } } +yy59: + YYDEBUG(59, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '/') goto yy63; + goto yy58; yy60: YYDEBUG(60, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '/') goto yy64; - goto yy59; -yy61: - YYDEBUG(61, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(62, *YYCURSOR); + YYDEBUG(61, *YYCURSOR); if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x00) goto yy37; - if (yych <= 0x08) goto yy61; - goto yy37; + if (yych <= 0x00) goto yy38; + if (yych <= 0x08) goto yy60; + goto yy38; } else { - if (yych == '\r') goto yy37; - goto yy61; + if (yych == '\r') goto yy38; + goto yy60; } } else { if (yych <= '#') { - if (yych <= ' ') goto yy37; - if (yych <= '"') goto yy61; - goto yy37; + if (yych <= ' ') goto yy38; + if (yych <= '"') goto yy60; + goto yy38; } else { - if (yych != ':') goto yy61; + if (yych != ':') goto yy60; } } - YYDEBUG(63, *YYCURSOR); + YYDEBUG(62, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - if (yych == '\\') goto yy61; - goto yy59; -yy64: - YYDEBUG(64, *YYCURSOR); + if (yych == '\\') goto yy60; + goto yy58; +yy63: + YYDEBUG(63, *YYCURSOR); ++YYCURSOR; - YYDEBUG(65, *YYCURSOR); + YYDEBUG(64, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 97 "sapi/phpdbg/phpdbg_lexer.l" +#line 104 "sapi/phpdbg/phpdbg_lexer.l" { phpdbg_init_param(yylval, STR_PARAM); yylval->str = estrndup(yytext, yyleng); yylval->len = yyleng; return T_PROTO; } -#line 747 "sapi/phpdbg/phpdbg_lexer.c" -yy66: +#line 776 "sapi/phpdbg/phpdbg_lexer.c" +yy65: + YYDEBUG(65, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'd') goto yy42; YYDEBUG(66, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych != 'd') goto yy43; + if (yych != '_') goto yy42; +yy67: YYDEBUG(67, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych != '_') goto yy43; -yy68: - YYDEBUG(68, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 64) { - goto yy69; + goto yy68; } - goto yy43; -yy69: - YYDEBUG(69, *YYCURSOR); - yyaccept = 2; + goto yy42; +yy68: + YYDEBUG(68, *YYCURSOR); + yyaccept = 3; YYMARKER = ++YYCURSOR; YYFILL(3); yych = *YYCURSOR; - YYDEBUG(70, *YYCURSOR); + YYDEBUG(69, *YYCURSOR); if (yybm[0+yych] & 64) { - goto yy69; + goto yy68; } if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x00) goto yy71; - if (yych <= 0x08) goto yy42; + if (yych <= 0x00) goto yy70; + if (yych <= 0x08) goto yy41; } else { - if (yych != '\r') goto yy42; + if (yych != '\r') goto yy41; } } else { if (yych <= '#') { - if (yych <= ' ') goto yy71; - if (yych <= '"') goto yy42; + if (yych <= ' ') goto yy70; + if (yych <= '"') goto yy41; } else { - if (yych == ':') goto yy58; - goto yy42; + if (yych == ':') goto yy57; + goto yy41; } } -yy71: - YYDEBUG(71, *YYCURSOR); +yy70: + YYDEBUG(70, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 128 "sapi/phpdbg/phpdbg_lexer.l" +#line 135 "sapi/phpdbg/phpdbg_lexer.l" { phpdbg_init_param(yylval, OP_PARAM); yylval->str = estrndup(yytext, yyleng); yylval->len = yyleng; return T_OPCODE; } -#line 801 "sapi/phpdbg/phpdbg_lexer.c" -yy72: +#line 830 "sapi/phpdbg/phpdbg_lexer.c" +yy71: + YYDEBUG(71, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'N') goto yy42; YYDEBUG(72, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych != 'N') goto yy43; + if (yych != 'D') goto yy42; YYDEBUG(73, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych != 'D') goto yy43; + if (yych == '_') goto yy67; + goto yy42; +yy74: YYDEBUG(74, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == '_') goto yy68; - goto yy43; + if (yych == 'S') goto yy75; + if (yych != 's') goto yy42; yy75: YYDEBUG(75, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'S') goto yy76; - if (yych != 's') goto yy43; -yy76: - YYDEBUG(76, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '\f') { - if (yych != '\t') goto yy43; + if (yych != '\t') goto yy42; } else { - if (yych <= '\r') goto yy77; - if (yych != ' ') goto yy43; + if (yych <= '\r') goto yy76; + if (yych != ' ') goto yy42; } -yy77: - YYDEBUG(77, *YYCURSOR); +yy76: + YYDEBUG(76, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(78, *YYCURSOR); + YYDEBUG(77, *YYCURSOR); if (yych <= '\f') { - if (yych == '\t') goto yy77; + if (yych == '\t') goto yy76; } else { - if (yych <= '\r') goto yy77; - if (yych == ' ') goto yy77; + if (yych <= '\r') goto yy76; + if (yych == ' ') goto yy76; } - YYDEBUG(79, *YYCURSOR); + YYDEBUG(78, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 104 "sapi/phpdbg/phpdbg_lexer.l" +#line 111 "sapi/phpdbg/phpdbg_lexer.l" { phpdbg_init_param(yylval, NUMERIC_PARAM); yylval->num = 1; return T_TRUTHY; } -#line 852 "sapi/phpdbg/phpdbg_lexer.c" +#line 881 "sapi/phpdbg/phpdbg_lexer.c" +yy79: + YYDEBUG(79, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'U') goto yy80; + if (yych != 'u') goto yy42; yy80: YYDEBUG(80, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'U') goto yy81; - if (yych != 'u') goto yy43; + if (yych == 'E') goto yy75; + if (yych == 'e') goto yy75; + goto yy42; yy81: YYDEBUG(81, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'E') goto yy76; - if (yych == 'e') goto yy76; - goto yy43; + if (yych == 'F') goto yy82; + if (yych != 'f') goto yy42; yy82: YYDEBUG(82, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'F') goto yy83; - if (yych != 'f') goto yy43; -yy83: - YYDEBUG(83, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '\f') { - if (yych != '\t') goto yy43; + if (yych != '\t') goto yy42; } else { - if (yych <= '\r') goto yy84; - if (yych != ' ') goto yy43; + if (yych <= '\r') goto yy83; + if (yych != ' ') goto yy42; } -yy84: - YYDEBUG(84, *YYCURSOR); +yy83: + YYDEBUG(83, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(85, *YYCURSOR); + YYDEBUG(84, *YYCURSOR); if (yych <= '\f') { - if (yych == '\t') goto yy84; + if (yych == '\t') goto yy83; } else { - if (yych <= '\r') goto yy84; - if (yych == ' ') goto yy84; + if (yych <= '\r') goto yy83; + if (yych == ' ') goto yy83; } - YYDEBUG(86, *YYCURSOR); + YYDEBUG(85, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 110 "sapi/phpdbg/phpdbg_lexer.l" +#line 117 "sapi/phpdbg/phpdbg_lexer.l" { phpdbg_init_param(yylval, NUMERIC_PARAM); yylval->num = 0; return T_FALSY; } -#line 902 "sapi/phpdbg/phpdbg_lexer.c" +#line 931 "sapi/phpdbg/phpdbg_lexer.c" +yy86: + YYDEBUG(86, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'L') goto yy87; + if (yych != 'l') goto yy42; yy87: YYDEBUG(87, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'L') goto yy88; - if (yych != 'l') goto yy43; + if (yych == 'S') goto yy88; + if (yych != 's') goto yy42; yy88: YYDEBUG(88, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'S') goto yy89; - if (yych != 's') goto yy43; + if (yych == 'E') goto yy82; + if (yych == 'e') goto yy82; + goto yy42; yy89: YYDEBUG(89, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'E') goto yy83; - if (yych == 'e') goto yy83; - goto yy43; + if (yych == 'A') goto yy90; + if (yych != 'a') goto yy42; yy90: YYDEBUG(90, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'A') goto yy91; - if (yych != 'a') goto yy43; + if (yych == 'B') goto yy91; + if (yych != 'b') goto yy42; yy91: YYDEBUG(91, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'B') goto yy92; - if (yych != 'b') goto yy43; + if (yych == 'L') goto yy92; + if (yych != 'l') goto yy42; yy92: YYDEBUG(92, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'L') goto yy93; - if (yych != 'l') goto yy43; + if (yych == 'E') goto yy93; + if (yych != 'e') goto yy42; yy93: YYDEBUG(93, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'E') goto yy94; - if (yych != 'e') goto yy43; + if (yych == 'D') goto yy75; + if (yych == 'd') goto yy75; + goto yy42; yy94: YYDEBUG(94, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'D') goto yy76; - if (yych == 'd') goto yy76; - goto yy43; + if (yych == 'S') goto yy95; + if (yych != 's') goto yy42; yy95: YYDEBUG(95, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'S') goto yy96; - if (yych != 's') goto yy43; + if (yych == 'A') goto yy96; + if (yych != 'a') goto yy42; yy96: YYDEBUG(96, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'A') goto yy97; - if (yych != 'a') goto yy43; + if (yych == 'B') goto yy97; + if (yych != 'b') goto yy42; yy97: YYDEBUG(97, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'B') goto yy98; - if (yych != 'b') goto yy43; + if (yych == 'L') goto yy98; + if (yych != 'l') goto yy42; yy98: YYDEBUG(98, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'L') goto yy99; - if (yych != 'l') goto yy43; + if (yych == 'E') goto yy99; + if (yych != 'e') goto yy42; yy99: YYDEBUG(99, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'E') goto yy100; - if (yych != 'e') goto yy43; + if (yych == 'D') goto yy82; + if (yych == 'd') goto yy82; + goto yy42; yy100: YYDEBUG(100, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'D') goto yy83; - if (yych == 'd') goto yy83; - goto yy43; -yy101: - YYDEBUG(101, *YYCURSOR); - yyaccept = 0; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 128) { - goto yy102; + goto yy101; } - goto yy43; -yy102: - YYDEBUG(102, *YYCURSOR); - yyaccept = 3; + goto yy42; +yy101: + YYDEBUG(101, *YYCURSOR); + yyaccept = 4; YYMARKER = ++YYCURSOR; YYFILL(3); yych = *YYCURSOR; - YYDEBUG(103, *YYCURSOR); + YYDEBUG(102, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy102; + goto yy101; } if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x00) goto yy104; - if (yych <= 0x08) goto yy42; + if (yych <= 0x00) goto yy103; + if (yych <= 0x08) goto yy41; } else { - if (yych != '\r') goto yy42; + if (yych != '\r') goto yy41; } } else { if (yych <= '#') { - if (yych <= ' ') goto yy104; - if (yych <= '"') goto yy42; + if (yych <= ' ') goto yy103; + if (yych <= '"') goto yy41; } else { - if (yych == ':') goto yy58; - goto yy42; + if (yych == ':') goto yy57; + goto yy41; } } -yy104: - YYDEBUG(104, *YYCURSOR); +yy103: + YYDEBUG(103, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 122 "sapi/phpdbg/phpdbg_lexer.l" +#line 129 "sapi/phpdbg/phpdbg_lexer.l" { phpdbg_init_param(yylval, ADDR_PARAM); yylval->addr = strtoul(yytext, 0, 16); return T_ADDR; } -#line 1033 "sapi/phpdbg/phpdbg_lexer.c" -yy105: - YYDEBUG(105, *YYCURSOR); +#line 1062 "sapi/phpdbg/phpdbg_lexer.c" +yy104: + YYDEBUG(104, *YYCURSOR); ++YYCURSOR; - YYDEBUG(106, *YYCURSOR); + YYDEBUG(105, *YYCURSOR); YYCURSOR = YYCTXMARKER; yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 93 "sapi/phpdbg/phpdbg_lexer.l" +#line 100 "sapi/phpdbg/phpdbg_lexer.l" { return T_COLON; } -#line 1044 "sapi/phpdbg/phpdbg_lexer.c" -yy107: - YYDEBUG(107, *YYCURSOR); +#line 1073 "sapi/phpdbg/phpdbg_lexer.c" +yy106: + YYDEBUG(106, *YYCURSOR); ++YYCURSOR; - YYDEBUG(108, *YYCURSOR); + YYDEBUG(107, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 90 "sapi/phpdbg/phpdbg_lexer.l" +#line 96 "sapi/phpdbg/phpdbg_lexer.l" { return T_DCOLON; } -#line 1054 "sapi/phpdbg/phpdbg_lexer.c" -yy109: - YYDEBUG(109, *YYCURSOR); - yyaccept = 0; +#line 1083 "sapi/phpdbg/phpdbg_lexer.c" +yy108: + YYDEBUG(108, *YYCURSOR); + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '\f') { - if (yych != '\t') goto yy43; + if (yych != '\t') goto yy42; } else { - if (yych <= '\r') goto yy110; - if (yych != ' ') goto yy43; + if (yych <= '\r') goto yy109; + if (yych != ' ') goto yy42; } -yy110: - YYDEBUG(110, *YYCURSOR); +yy109: + YYDEBUG(109, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(111, *YYCURSOR); + YYDEBUG(110, *YYCURSOR); if (yych <= '\f') { - if (yych == '\t') goto yy110; + if (yych == '\t') goto yy109; } else { - if (yych <= '\r') goto yy110; - if (yych == ' ') goto yy110; + if (yych <= '\r') goto yy109; + if (yych == ' ') goto yy109; } - YYDEBUG(112, *YYCURSOR); + YYDEBUG(111, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 81 "sapi/phpdbg/phpdbg_lexer.l" { @@ -1081,91 +1110,91 @@ yy110: phpdbg_init_param(yylval, EMPTY_PARAM); return T_IF; } -#line 1085 "sapi/phpdbg/phpdbg_lexer.c" -yy113: - YYDEBUG(113, *YYCURSOR); - yyaccept = 0; +#line 1114 "sapi/phpdbg/phpdbg_lexer.c" +yy112: + YYDEBUG(112, *YYCURSOR); + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ' ') { if (yych <= '\f') { - if (yych != '\t') goto yy43; + if (yych != '\t') goto yy42; } else { - if (yych <= '\r') goto yy114; - if (yych <= 0x1F) goto yy43; + if (yych <= '\r') goto yy113; + if (yych <= 0x1F) goto yy42; } } else { if (yych <= '.') { - if (yych <= ',') goto yy43; - if (yych <= '-') goto yy116; - goto yy117; + if (yych <= ',') goto yy42; + if (yych <= '-') goto yy115; + goto yy116; } else { - if (yych <= '/') goto yy43; - if (yych <= '9') goto yy117; - goto yy43; + if (yych <= '/') goto yy42; + if (yych <= '9') goto yy116; + goto yy42; } } -yy114: - YYDEBUG(114, *YYCURSOR); +yy113: + YYDEBUG(113, *YYCURSOR); ++YYCURSOR; YYFILL(2); yych = *YYCURSOR; - YYDEBUG(115, *YYCURSOR); + YYDEBUG(114, *YYCURSOR); if (yych <= ' ') { if (yych <= '\f') { - if (yych == '\t') goto yy114; - goto yy59; + if (yych == '\t') goto yy113; + goto yy58; } else { - if (yych <= '\r') goto yy114; - if (yych <= 0x1F) goto yy59; - goto yy114; + if (yych <= '\r') goto yy113; + if (yych <= 0x1F) goto yy58; + goto yy113; } } else { if (yych <= '.') { - if (yych <= ',') goto yy59; - if (yych <= '-') goto yy120; - goto yy121; + if (yych <= ',') goto yy58; + if (yych <= '-') goto yy119; + goto yy120; } else { - if (yych <= '/') goto yy59; - if (yych <= '9') goto yy121; - goto yy59; + if (yych <= '/') goto yy58; + if (yych <= '9') goto yy120; + goto yy58; } } +yy115: + YYDEBUG(115, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == '.') goto yy116; + if (yych <= '/') goto yy42; + if (yych >= ':') goto yy42; yy116: YYDEBUG(116, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych == '.') goto yy117; - if (yych <= '/') goto yy43; - if (yych >= ':') goto yy43; -yy117: - YYDEBUG(117, *YYCURSOR); - yyaccept = 4; + yyaccept = 5; YYMARKER = ++YYCURSOR; YYFILL(3); yych = *YYCURSOR; - YYDEBUG(118, *YYCURSOR); + YYDEBUG(117, *YYCURSOR); if (yych <= ' ') { if (yych <= '\n') { - if (yych <= 0x00) goto yy119; - if (yych <= 0x08) goto yy42; + if (yych <= 0x00) goto yy118; + if (yych <= 0x08) goto yy41; } else { - if (yych == '\r') goto yy119; - if (yych <= 0x1F) goto yy42; + if (yych == '\r') goto yy118; + if (yych <= 0x1F) goto yy41; } } else { if (yych <= '.') { - if (yych == '#') goto yy119; - if (yych <= '-') goto yy42; - goto yy117; + if (yych == '#') goto yy118; + if (yych <= '-') goto yy41; + goto yy116; } else { - if (yych <= '/') goto yy42; - if (yych <= '9') goto yy117; - if (yych <= ':') goto yy58; - goto yy42; + if (yych <= '/') goto yy41; + if (yych <= '9') goto yy116; + if (yych <= ':') goto yy57; + goto yy41; } } -yy119: - YYDEBUG(119, *YYCURSOR); +yy118: + YYDEBUG(118, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 74 "sapi/phpdbg/phpdbg_lexer.l" { @@ -1174,23 +1203,47 @@ yy119: yylval->num = atoi(text); return T_REQ_ID; } -#line 1178 "sapi/phpdbg/phpdbg_lexer.c" +#line 1207 "sapi/phpdbg/phpdbg_lexer.c" +yy119: + YYDEBUG(119, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '.') goto yy120; + if (yych <= '/') goto yy58; + if (yych >= ':') goto yy58; yy120: YYDEBUG(120, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '.') goto yy121; - if (yych <= '/') goto yy59; - if (yych >= ':') goto yy59; -yy121: - YYDEBUG(121, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; + YYDEBUG(121, *YYCURSOR); + if (yych == '.') goto yy120; + if (yych <= '/') goto yy118; + if (yych <= '9') goto yy120; + goto yy118; +yy122: YYDEBUG(122, *YYCURSOR); - if (yych == '.') goto yy121; - if (yych <= '/') goto yy119; - if (yych <= '9') goto yy121; - goto yy119; + yych = *++YYCURSOR; + if (yych == '.') goto yy123; + if (yych <= '/') goto yy58; + if (yych >= ':') goto yy58; +yy123: + YYDEBUG(123, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(124, *YYCURSOR); + if (yych == '.') goto yy123; + if (yych <= '/') goto yy125; + if (yych <= '9') goto yy123; +yy125: + YYDEBUG(125, *YYCURSOR); + YYCURSOR = YYCTXMARKER; + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 87 "sapi/phpdbg/phpdbg_lexer.l" + { + return T_POUND; +} +#line 1247 "sapi/phpdbg/phpdbg_lexer.c" } /* *********************************** */ yyc_PRE_RAW: @@ -1229,109 +1282,119 @@ yyc_PRE_RAW: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - YYDEBUG(123, *YYCURSOR); + YYDEBUG(126, *YYCURSOR); YYFILL(2); yych = *YYCURSOR; - if (yych <= '\f') { - if (yych <= 0x08) { - if (yych <= 0x00) goto yy127; - goto yy131; + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) goto yy134; + if (yych <= 0x08) goto yy136; } else { - if (yych <= '\t') goto yy125; - if (yych <= '\n') goto yy128; - goto yy131; + if (yych <= '\n') goto yy134; + if (yych <= '\f') goto yy136; } } else { - if (yych <= ' ') { - if (yych <= '\r') goto yy125; - if (yych <= 0x1F) goto yy131; + if (yych <= '"') { + if (yych == ' ') goto yy130; + goto yy136; } else { - if (yych == '-') goto yy130; - goto yy131; + if (yych <= '#') goto yy133; + if (yych == '-') goto yy135; + goto yy136; } } -yy125: - YYDEBUG(125, *YYCURSOR); + YYDEBUG(128, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) <= '\f') { - if (yych == '\t') goto yy139; - } else { - if (yych <= '\r') goto yy139; - if (yych == ' ') goto yy139; + if (yybm[0+(yych = *YYCURSOR)] & 64) { + goto yy130; } -yy126: - YYDEBUG(126, *YYCURSOR); +yy129: + YYDEBUG(129, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 171 "sapi/phpdbg/phpdbg_lexer.l" +#line 180 "sapi/phpdbg/phpdbg_lexer.l" { YYSETCONDITION(RAW); YYCURSOR = LEX(text); goto restart; } -#line 1273 "sapi/phpdbg/phpdbg_lexer.c" -yy127: - YYDEBUG(127, *YYCURSOR); - yych = *++YYCURSOR; - goto yy126; -yy128: - YYDEBUG(128, *YYCURSOR); +#line 1322 "sapi/phpdbg/phpdbg_lexer.c" +yy130: + YYDEBUG(130, *YYCURSOR); ++YYCURSOR; - YYDEBUG(129, *YYCURSOR); + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(131, *YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy130; + } + YYDEBUG(132, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 70 "sapi/phpdbg/phpdbg_lexer.l" +#line 156 "sapi/phpdbg/phpdbg_lexer.l" { - return 0; + /* ignore whitespace */ + + goto restart; } -#line 1287 "sapi/phpdbg/phpdbg_lexer.c" -yy130: - YYDEBUG(130, *YYCURSOR); +#line 1340 "sapi/phpdbg/phpdbg_lexer.c" +yy133: + YYDEBUG(133, *YYCURSOR); + yych = *++YYCURSOR; + goto yy129; +yy134: + YYDEBUG(134, *YYCURSOR); + yych = *++YYCURSOR; + goto yy129; +yy135: + YYDEBUG(135, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'r') goto yy132; - goto yy126; -yy131: - YYDEBUG(131, *YYCURSOR); + if (yych == 'r') goto yy137; + goto yy129; +yy136: + YYDEBUG(136, *YYCURSOR); yych = *++YYCURSOR; - goto yy126; -yy132: - YYDEBUG(132, *YYCURSOR); + goto yy129; +yy137: + YYDEBUG(137, *YYCURSOR); ++YYCURSOR; YYFILL(2); yych = *YYCURSOR; - YYDEBUG(133, *YYCURSOR); - if (yybm[0+yych] & 64) { - goto yy132; + YYDEBUG(138, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy141; } - if (yych <= '.') { - if (yych <= ',') goto yy134; - if (yych <= '-') goto yy135; - goto yy136; + if (yych <= '\r') { + if (yych == '\t') goto yy137; + if (yych >= '\r') goto yy137; } else { - if (yych <= '/') goto yy134; - if (yych <= '9') goto yy136; + if (yych <= ' ') { + if (yych >= ' ') goto yy137; + } else { + if (yych == '-') goto yy140; + } } -yy134: - YYDEBUG(134, *YYCURSOR); +yy139: + YYDEBUG(139, *YYCURSOR); YYCURSOR = YYMARKER; - goto yy126; -yy135: - YYDEBUG(135, *YYCURSOR); + goto yy129; +yy140: + YYDEBUG(140, *YYCURSOR); yych = *++YYCURSOR; if (yybm[0+yych] & 128) { - goto yy136; + goto yy141; } - goto yy134; -yy136: - YYDEBUG(136, *YYCURSOR); + goto yy139; +yy141: + YYDEBUG(141, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(137, *YYCURSOR); + YYDEBUG(142, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy136; + goto yy141; } - YYDEBUG(138, *YYCURSOR); + YYDEBUG(143, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 74 "sapi/phpdbg/phpdbg_lexer.l" { @@ -1340,28 +1403,7 @@ yy136: yylval->num = atoi(text); return T_REQ_ID; } -#line 1344 "sapi/phpdbg/phpdbg_lexer.c" -yy139: - YYDEBUG(139, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(140, *YYCURSOR); - if (yych <= '\f') { - if (yych == '\t') goto yy139; - } else { - if (yych <= '\r') goto yy139; - if (yych == ' ') goto yy139; - } - YYDEBUG(141, *YYCURSOR); - yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 149 "sapi/phpdbg/phpdbg_lexer.l" - { - /* ignore whitespace */ - - goto restart; -} -#line 1365 "sapi/phpdbg/phpdbg_lexer.c" +#line 1407 "sapi/phpdbg/phpdbg_lexer.c" } /* *********************************** */ yyc_RAW: @@ -1371,7 +1413,7 @@ yyc_RAW: 128, 192, 0, 128, 128, 192, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 192, 128, 128, 128, 128, 128, 128, 128, + 192, 128, 128, 0, 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, @@ -1400,59 +1442,79 @@ yyc_RAW: 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, }; - YYDEBUG(142, *YYCURSOR); + YYDEBUG(144, *YYCURSOR); YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 64) { - goto yy144; + goto yy146; } - if (yych <= 0x00) goto yy147; - if (yych == '\n') goto yy147; - goto yy149; -yy144: - YYDEBUG(144, *YYCURSOR); + if (yych <= '\n') { + if (yych <= 0x00) goto yy151; + if (yych <= '\t') goto yy153; + goto yy151; + } else { + if (yych == '#') goto yy149; + goto yy153; + } +yy146: + YYDEBUG(146, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(145, *YYCURSOR); + YYDEBUG(147, *YYCURSOR); if (yybm[0+yych] & 64) { - goto yy144; + goto yy146; } - if (yych <= 0x00) goto yy146; - if (yych != '\n') goto yy149; -yy146: - YYDEBUG(146, *YYCURSOR); + if (yych <= '\n') { + if (yych <= 0x00) goto yy148; + if (yych <= '\t') goto yy153; + } else { + if (yych != '#') goto yy153; + } +yy148: + YYDEBUG(148, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 142 "sapi/phpdbg/phpdbg_lexer.l" +#line 149 "sapi/phpdbg/phpdbg_lexer.l" { phpdbg_init_param(yylval, STR_PARAM); yylval->str = estrndup(yytext, yyleng); yylval->len = yyleng; return T_INPUT; } -#line 1434 "sapi/phpdbg/phpdbg_lexer.c" -yy147: - YYDEBUG(147, *YYCURSOR); +#line 1485 "sapi/phpdbg/phpdbg_lexer.c" +yy149: + YYDEBUG(149, *YYCURSOR); ++YYCURSOR; - YYDEBUG(148, *YYCURSOR); + YYDEBUG(150, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 91 "sapi/phpdbg/phpdbg_lexer.l" + { + YYSETCONDITION(INITIAL); + return T_SEPARATOR; +} +#line 1496 "sapi/phpdbg/phpdbg_lexer.c" +yy151: + YYDEBUG(151, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(152, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 70 "sapi/phpdbg/phpdbg_lexer.l" { return 0; } -#line 1444 "sapi/phpdbg/phpdbg_lexer.c" -yy149: - YYDEBUG(149, *YYCURSOR); +#line 1506 "sapi/phpdbg/phpdbg_lexer.c" +yy153: + YYDEBUG(153, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(150, *YYCURSOR); + YYDEBUG(154, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy149; + goto yy153; } - goto yy146; + goto yy148; } } -#line 185 "sapi/phpdbg/phpdbg_lexer.l" +#line 194 "sapi/phpdbg/phpdbg_lexer.l" } diff --git a/sapi/phpdbg/phpdbg_lexer.l b/sapi/phpdbg/phpdbg_lexer.l index 197773e2c6..0509c521ec 100644 --- a/sapi/phpdbg/phpdbg_lexer.l +++ b/sapi/phpdbg/phpdbg_lexer.l @@ -63,7 +63,7 @@ ID [^ \r\n\t:#\000]+ GENERIC_ID ([^ \r\n\t:#\000]|":\\")+ ADDR [0][x][a-fA-F0-9]+ OPCODE (ZEND_|zend_)([A-Za-z])+ -INPUT [^\n\000]+ +INPUT [^\n\000#]+ := yyleng = (size_t) YYCURSOR - (size_t) yytext; @@ -84,12 +84,19 @@ INPUT [^\n\000]+ return T_IF; } -"#" { +"#"/{DIGITS} { return T_POUND; } + +<*>"#" { + YYSETCONDITION(INITIAL); + return T_SEPARATOR; +} + "::" { return T_DCOLON; } + ":"/[^\\] { return T_COLON; } @@ -157,25 +164,27 @@ INPUT [^\n\000]+ phpdbg_init_param(yylval, EMPTY_PARAM); return T_EVAL; } + {T_SHELL}{WS} { YYSETCONDITION(PRE_RAW); phpdbg_init_param(yylval, EMPTY_PARAM); return T_SHELL; } + ({T_RUN}|{T_RUN_SHORT}){WS} { YYSETCONDITION(PRE_RAW); phpdbg_init_param(yylval, EMPTY_PARAM); return T_RUN; } -. { +[^ ] { YYSETCONDITION(RAW); YYCURSOR = LEX(text); goto restart; } -. { +[^ ] { YYSETCONDITION(NORMAL); YYCURSOR = LEX(text); diff --git a/sapi/phpdbg/phpdbg_parser.c b/sapi/phpdbg/phpdbg_parser.c index 0e5f383529..668ec179e8 100644 --- a/sapi/phpdbg/phpdbg_parser.c +++ b/sapi/phpdbg/phpdbg_parser.c @@ -162,15 +162,16 @@ typedef void* yyscan_t; T_COLON = 265, T_DCOLON = 266, T_POUND = 267, - T_PROTO = 268, - T_DIGITS = 269, - T_LITERAL = 270, - T_ADDR = 271, - T_OPCODE = 272, - T_ID = 273, - T_INPUT = 274, - T_UNEXPECTED = 275, - T_REQ_ID = 276 + T_SEPARATOR = 268, + T_PROTO = 269, + T_DIGITS = 270, + T_LITERAL = 271, + T_ADDR = 272, + T_OPCODE = 273, + T_ID = 274, + T_INPUT = 275, + T_UNEXPECTED = 276, + T_REQ_ID = 277 }; #endif /* Tokens. */ @@ -184,15 +185,16 @@ typedef void* yyscan_t; #define T_COLON 265 #define T_DCOLON 266 #define T_POUND 267 -#define T_PROTO 268 -#define T_DIGITS 269 -#define T_LITERAL 270 -#define T_ADDR 271 -#define T_OPCODE 272 -#define T_ID 273 -#define T_INPUT 274 -#define T_UNEXPECTED 275 -#define T_REQ_ID 276 +#define T_SEPARATOR 268 +#define T_PROTO 269 +#define T_DIGITS 270 +#define T_LITERAL 271 +#define T_ADDR 272 +#define T_OPCODE 273 +#define T_ID 274 +#define T_INPUT 275 +#define T_UNEXPECTED 276 +#define T_REQ_ID 277 @@ -223,7 +225,7 @@ int phpdbg_parse (); /* Copy the second part of user declarations. */ /* Line 390 of yacc.c */ -#line 227 "sapi/phpdbg/phpdbg_parser.c" +#line 229 "sapi/phpdbg/phpdbg_parser.c" #ifdef short # undef short @@ -450,22 +452,22 @@ union yyalloc #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 26 +#define YYFINAL 27 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 48 +#define YYLAST 50 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 22 +#define YYNTOKENS 23 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 6 +#define YYNNTS 7 /* YYNRULES -- Number of rules. */ -#define YYNRULES 28 +#define YYNRULES 30 /* YYNRULES -- Number of states. */ -#define YYNSTATES 43 +#define YYNSTATES 46 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 276 +#define YYMAXUTOK 277 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -500,7 +502,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, 21, 22 }; #if YYDEBUG @@ -508,31 +510,34 @@ 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, 9, 10, 12, 14, 16, 19, + 22, 26, 31, 36, 42, 46, 52, 56, 59, 61, + 63, 65, 67, 69, 71, 73, 75, 76, 80, 84, + 87 }; /* 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 + 24, 0, -1, 25, -1, 24, 13, 25, -1, -1, + 26, -1, 29, -1, 27, -1, 26, 27, -1, 26, + 28, -1, 19, 10, 15, -1, 19, 10, 12, 15, + -1, 14, 19, 10, 15, -1, 14, 19, 10, 12, + 15, -1, 19, 11, 19, -1, 19, 11, 19, 12, + 15, -1, 19, 12, 15, -1, 6, 20, -1, 18, + -1, 17, -1, 16, -1, 7, -1, 8, -1, 15, + -1, 19, -1, 22, -1, -1, 3, 28, 20, -1, + 5, 28, 20, -1, 4, 28, -1, 4, 28, 20, + -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { - 0, 70, 70, 71, 72, 76, 77, 78, 82, 87, - 92, 102, 112, 117, 123, 129, 134, 135, 136, 137, - 138, 139, 140, 144, 145, 149, 154, 159, 163 + 0, 71, 71, 72, 73, 77, 78, 82, 83, 84, + 88, 93, 98, 108, 118, 123, 129, 135, 140, 141, + 142, 143, 144, 145, 146, 150, 151, 155, 160, 165, + 169 }; #endif @@ -545,12 +550,13 @@ static const char *const yytname[] = "\"if (condition)\"", "\"truthy (true, on, yes or enabled)\"", "\"falsy (false, off, no or disabled)\"", "\"string (some input, perhaps)\"", "\": (colon)\"", - "\":: (double colon)\"", "\"# (pound sign)\"", "\"protocol (file://)\"", - "\"digits (numbers)\"", "\"literal (string)\"", "\"address\"", - "\"opcode\"", "\"identifier (command or function name)\"", + "\":: (double colon)\"", "\"# (pound sign followed by digits)\"", + "\"# (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 + "\"request id (-r %d)\"", "$accept", "input", "command", "parameters", + "parameter", "req_id", "full_expression", YY_NULL }; #endif @@ -561,24 +567,26 @@ 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, 276, 277 }; # 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, 23, 24, 24, 24, 25, 25, 26, 26, 26, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 28, 28, 29, 29, 29, + 29 }; /* 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, 3, 0, 1, 1, 1, 2, 2, + 3, 4, 4, 5, 3, 5, 3, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 3, 3, 2, + 3 }; /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. @@ -586,35 +594,35 @@ 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, 26, 26, 26, 0, 21, 22, 0, 23, 20, + 19, 18, 24, 0, 2, 5, 7, 6, 25, 0, + 29, 0, 17, 0, 0, 0, 0, 1, 0, 8, + 9, 27, 30, 28, 0, 0, 10, 14, 16, 3, + 0, 12, 11, 0, 13, 15 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { - -1, 13, 14, 15, 18, 16 + -1, 13, 14, 15, 16, 19, 17 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -16 +#define YYPACT_NINF -17 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, -16, -16, -16, -10, -17, -17, 2, -17, -17, + -17, -17, 26, 9, -17, 11, -17, -17, -17, 3, + 4, 21, -17, 29, 19, 23, 25, -17, -3, -17, + -17, -17, -17, -17, 20, 28, -17, 32, -17, -17, + 30, -17, -17, 31, -17, -17 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { - -16, -16, -16, 34, 5, -16 + -17, -17, 22, -17, 33, 5, -17 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -623,37 +631,39 @@ static const yytype_int8 yypgoto[] = #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { - 1, 2, 3, 4, 5, 6, 17, 19, 20, 21, - 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 + 1, 2, 3, 4, 5, 6, 18, 20, 21, 27, + 22, 7, 8, 9, 10, 11, 12, 4, 5, 6, + 30, 23, 28, 31, 32, 7, 8, 9, 10, 11, + 12, 35, 40, 18, 36, 41, 24, 25, 26, 34, + 38, 33, 37, 42, 43, 44, 45, 0, 29, 0, + 39 }; #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-16))) + (!!((Yystate) == (-17))) #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, 22, 2, 3, 0, + 20, 14, 15, 16, 17, 18, 19, 6, 7, 8, + 15, 19, 13, 20, 20, 14, 15, 16, 17, 18, + 19, 12, 12, 22, 15, 15, 10, 11, 12, 10, + 15, 20, 19, 15, 12, 15, 15, -1, 15, -1, + 28 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ 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 + 0, 3, 4, 5, 6, 7, 8, 14, 15, 16, + 17, 18, 19, 24, 25, 26, 27, 29, 22, 28, + 28, 28, 20, 19, 10, 11, 12, 0, 13, 27, + 28, 20, 20, 20, 10, 12, 15, 19, 15, 25, + 12, 15, 15, 12, 15, 15 }; #define yyerrok (yyerrstatus = 0) @@ -1457,33 +1467,51 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 3: + case 2: /* Line 1802 of yacc.c */ #line 71 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" - { phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(1) - (1)])); } + { (yyval) = (yyvsp[(1) - (1)]); } + break; + + case 3: +/* Line 1802 of yacc.c */ +#line 72 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" + { phpdbg_stack_separate((yyvsp[(1) - (3)]).top); (yyval) = (yyvsp[(3) - (3)]); } break; case 5: /* Line 1802 of yacc.c */ -#line 76 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" - { phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(1) - (1)])); } +#line 77 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" + { (yyval).top = PHPDBG_G(parser_stack)->top; } break; case 6: /* Line 1802 of yacc.c */ -#line 77 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" - { phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(2) - (2)])); } +#line 78 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" + { phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(1) - (1)])); (yyval).top = PHPDBG_G(parser_stack)->top; } break; case 7: /* Line 1802 of yacc.c */ -#line 78 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" - { (yyval) = (yyvsp[(1) - (2)]); } +#line 82 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" + { phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(1) - (1)])); (yyval).top = PHPDBG_G(parser_stack)->top; } break; case 8: /* Line 1802 of yacc.c */ -#line 82 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 83 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" + { phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(2) - (2)])); (yyval).top = PHPDBG_G(parser_stack)->top; } + break; + + case 9: +/* Line 1802 of yacc.c */ +#line 84 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" + { (yyval) = (yyvsp[(1) - (2)]); } + break; + + case 10: +/* Line 1802 of yacc.c */ +#line 88 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = FILE_PARAM; (yyval).file.name = (yyvsp[(2) - (3)]).str; @@ -1491,9 +1519,9 @@ yyreduce: } break; - case 9: + case 11: /* Line 1802 of yacc.c */ -#line 87 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 93 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = NUMERIC_FILE_PARAM; (yyval).file.name = (yyvsp[(1) - (4)]).str; @@ -1501,9 +1529,9 @@ yyreduce: } break; - case 10: + case 12: /* Line 1802 of yacc.c */ -#line 92 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 98 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = FILE_PARAM; (yyval).file.name = malloc((yyvsp[(1) - (4)]).len + (yyvsp[(2) - (4)]).len + 1); @@ -1516,9 +1544,9 @@ yyreduce: } break; - case 11: + case 13: /* Line 1802 of yacc.c */ -#line 102 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 108 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = NUMERIC_FILE_PARAM; (yyval).file.name = malloc((yyvsp[(1) - (5)]).len + (yyvsp[(2) - (5)]).len + 1); @@ -1531,9 +1559,9 @@ yyreduce: } break; - case 12: + case 14: /* Line 1802 of yacc.c */ -#line 112 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 118 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = METHOD_PARAM; (yyval).method.class = (yyvsp[(1) - (3)]).str; @@ -1541,9 +1569,9 @@ yyreduce: } break; - case 13: + case 15: /* Line 1802 of yacc.c */ -#line 117 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 123 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = NUMERIC_METHOD_PARAM; (yyval).method.class = (yyvsp[(1) - (5)]).str; @@ -1552,9 +1580,9 @@ yyreduce: } break; - case 14: + case 16: /* Line 1802 of yacc.c */ -#line 123 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 129 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = NUMERIC_FUNCTION_PARAM; (yyval).str = (yyvsp[(1) - (3)]).str; @@ -1563,9 +1591,9 @@ yyreduce: } break; - case 15: + case 17: /* Line 1802 of yacc.c */ -#line 129 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 135 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = COND_PARAM; (yyval).str = (yyvsp[(2) - (2)]).str; @@ -1573,57 +1601,57 @@ yyreduce: } break; - case 16: + case 18: /* Line 1802 of yacc.c */ -#line 134 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 140 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval) = (yyvsp[(1) - (1)]); } break; - case 17: + case 19: /* Line 1802 of yacc.c */ -#line 135 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 141 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval) = (yyvsp[(1) - (1)]); } break; - case 18: + case 20: /* Line 1802 of yacc.c */ -#line 136 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 142 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval) = (yyvsp[(1) - (1)]); } break; - case 19: + case 21: /* Line 1802 of yacc.c */ -#line 137 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 143 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval) = (yyvsp[(1) - (1)]); } break; - case 20: + case 22: /* Line 1802 of yacc.c */ -#line 138 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 144 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval) = (yyvsp[(1) - (1)]); } break; - case 21: + case 23: /* Line 1802 of yacc.c */ -#line 139 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 145 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval) = (yyvsp[(1) - (1)]); } break; - case 22: + case 24: /* Line 1802 of yacc.c */ -#line 140 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 146 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval) = (yyvsp[(1) - (1)]); } break; - case 23: + case 25: /* Line 1802 of yacc.c */ -#line 144 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 150 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { PHPDBG_G(req_id) = (yyvsp[(1) - (1)]).num; } break; - case 25: + case 27: /* Line 1802 of yacc.c */ -#line 149 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 155 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = EVAL_PARAM; (yyval).str = (yyvsp[(3) - (3)]).str; @@ -1631,9 +1659,9 @@ yyreduce: } break; - case 26: + case 28: /* Line 1802 of yacc.c */ -#line 154 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 160 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = SHELL_PARAM; (yyval).str = (yyvsp[(3) - (3)]).str; @@ -1641,18 +1669,18 @@ yyreduce: } break; - case 27: + case 29: /* Line 1802 of yacc.c */ -#line 159 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 165 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = RUN_PARAM; (yyval).len = 0; } break; - case 28: + case 30: /* Line 1802 of yacc.c */ -#line 163 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 169 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = RUN_PARAM; (yyval).str = (yyvsp[(3) - (3)]).str; @@ -1662,7 +1690,7 @@ yyreduce: /* Line 1802 of yacc.c */ -#line 1666 "sapi/phpdbg/phpdbg_parser.c" +#line 1694 "sapi/phpdbg/phpdbg_parser.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -1894,7 +1922,7 @@ yyreturn: /* Line 2050 of yacc.c */ -#line 170 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" +#line 176 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" static int yyerror(const char *msg) { diff --git a/sapi/phpdbg/phpdbg_parser.h b/sapi/phpdbg/phpdbg_parser.h index 21b921b542..38d3ecbf70 100644 --- a/sapi/phpdbg/phpdbg_parser.h +++ b/sapi/phpdbg/phpdbg_parser.h @@ -69,15 +69,16 @@ typedef void* yyscan_t; T_COLON = 265, T_DCOLON = 266, T_POUND = 267, - T_PROTO = 268, - T_DIGITS = 269, - T_LITERAL = 270, - T_ADDR = 271, - T_OPCODE = 272, - T_ID = 273, - T_INPUT = 274, - T_UNEXPECTED = 275, - T_REQ_ID = 276 + T_SEPARATOR = 268, + T_PROTO = 269, + T_DIGITS = 270, + T_LITERAL = 271, + T_ADDR = 272, + T_OPCODE = 273, + T_ID = 274, + T_INPUT = 275, + T_UNEXPECTED = 276, + T_REQ_ID = 277 }; #endif /* Tokens. */ @@ -91,15 +92,16 @@ typedef void* yyscan_t; #define T_COLON 265 #define T_DCOLON 266 #define T_POUND 267 -#define T_PROTO 268 -#define T_DIGITS 269 -#define T_LITERAL 270 -#define T_ADDR 271 -#define T_OPCODE 272 -#define T_ID 273 -#define T_INPUT 274 -#define T_UNEXPECTED 275 -#define T_REQ_ID 276 +#define T_SEPARATOR 268 +#define T_PROTO 269 +#define T_DIGITS 270 +#define T_LITERAL 271 +#define T_ADDR 272 +#define T_OPCODE 273 +#define T_ID 274 +#define T_INPUT 275 +#define T_UNEXPECTED 276 +#define T_REQ_ID 277 diff --git a/sapi/phpdbg/phpdbg_parser.y b/sapi/phpdbg/phpdbg_parser.y index 3b2392e48a..2b8f357763 100644 --- a/sapi/phpdbg/phpdbg_parser.y +++ b/sapi/phpdbg/phpdbg_parser.y @@ -53,7 +53,8 @@ typedef void* yyscan_t; %token T_STRING "string (some input, perhaps)" %token T_COLON ": (colon)" %token T_DCOLON ":: (double colon)" -%token T_POUND "# (pound sign)" +%token T_POUND "# (pound sign followed by digits)" +%token T_SEPARATOR "# (pound sign)" %token T_PROTO "protocol (file://)" %token T_DIGITS "digits (numbers)" %token T_LITERAL "literal (string)" @@ -67,14 +68,19 @@ typedef void* yyscan_t; %% /* Rules */ input - : parameters - | full_expression { phpdbg_stack_push(PHPDBG_G(parser_stack), &$1); } + : command { $$ = $1; } + | input T_SEPARATOR command { phpdbg_stack_separate($1.top); $$ = $3; } | /* nothing */ ; +command + : parameters { $$.top = PHPDBG_G(parser_stack)->top; } + | full_expression { phpdbg_stack_push(PHPDBG_G(parser_stack), &$1); $$.top = PHPDBG_G(parser_stack)->top; } + ; + parameters - : parameter { phpdbg_stack_push(PHPDBG_G(parser_stack), &$1); } - | parameters parameter { phpdbg_stack_push(PHPDBG_G(parser_stack), &$2); } + : parameter { phpdbg_stack_push(PHPDBG_G(parser_stack), &$1); $$.top = PHPDBG_G(parser_stack)->top; } + | parameters parameter { phpdbg_stack_push(PHPDBG_G(parser_stack), &$2); $$.top = PHPDBG_G(parser_stack)->top; } | parameters req_id { $$ = $1; } ; diff --git a/sapi/phpdbg/tests/delimiter.phpt b/sapi/phpdbg/tests/delimiter.phpt new file mode 100644 index 0000000000..da5f681783 --- /dev/null +++ b/sapi/phpdbg/tests/delimiter.phpt @@ -0,0 +1,7 @@ +--TEST-- +Test # delimiter parsing and execution +--PHPDBG-- +ev 1 + 3 # ev 2 ** 3#q +--EXPECTF-- +prompt> 4 +8 -- 2.40.0