]> granicus.if.org Git - php/commitdiff
Add # delimiter to phpdbg commands
authorBob Weinand <bobwei9@hotmail.com>
Thu, 17 Sep 2015 20:52:55 +0000 (22:52 +0200)
committerBob Weinand <bobwei9@hotmail.com>
Thu, 17 Sep 2015 20:53:10 +0000 (22:53 +0200)
sapi/phpdbg/phpdbg.c
sapi/phpdbg/phpdbg_cmd.c
sapi/phpdbg/phpdbg_cmd.h
sapi/phpdbg/phpdbg_lexer.c
sapi/phpdbg/phpdbg_lexer.l
sapi/phpdbg/phpdbg_parser.c
sapi/phpdbg/phpdbg_parser.h
sapi/phpdbg/phpdbg_parser.y
sapi/phpdbg/tests/delimiter.phpt [new file with mode: 0644]

index a8247844c80abd6568f79f70ac3a2071b5c2bc2a..2d3a97a1a84302f887dee1db89b7b272ce4ca193 100644 (file)
@@ -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();
index ed4cf3b6d6b258b2c3316e33f16c3b9dc2d01719..d2dc89b09cbe703efad81e23358a0e0bbdedb65f 100644 (file)
@@ -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];
index 957297600b79110bce9639675b866017bf35ee52..e09c2a2116739d4b82e94e27031b547c3212f812 100644 (file)
@@ -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);
index 05b6cc9e8c6ea204600ac8b26aa60c63541e8698..0b954252e35a124c61f58580065ccf67613eacf1 100644 (file)
@@ -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"
 
 }
index 197773e2c6bef46fd2d044a4e377fe966cf3cb77..0509c521ec7edcf4b88b26efc3072152b676febe 100644 (file)
@@ -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;
 }
 
-<NORMAL>"#" {
+<NORMAL>"#"/{DIGITS} {
        return T_POUND;
 }
+
+<*>"#" {
+       YYSETCONDITION(INITIAL);
+       return T_SEPARATOR;
+}
+
 <NORMAL>"::" {
        return T_DCOLON;
 }
+
 <NORMAL>":"/[^\\] {
        return T_COLON;
 }
@@ -157,25 +164,27 @@ INPUT       [^\n\000]+
        phpdbg_init_param(yylval, EMPTY_PARAM);
        return T_EVAL;
 }
+
 <INITIAL>{T_SHELL}{WS} {
        YYSETCONDITION(PRE_RAW);
        phpdbg_init_param(yylval, EMPTY_PARAM);
        return T_SHELL;
 }
+
 <INITIAL>({T_RUN}|{T_RUN_SHORT}){WS} {
        YYSETCONDITION(PRE_RAW);
        phpdbg_init_param(yylval, EMPTY_PARAM);
        return T_RUN;
 }
 
-<PRE_RAW>. {
+<PRE_RAW>[^ ] {
        YYSETCONDITION(RAW);
 
        YYCURSOR = LEX(text);
        goto restart;
 }
 
-<INITIAL>. {
+<INITIAL>[^ ] {
        YYSETCONDITION(NORMAL);
 
        YYCURSOR = LEX(text);
index 0e5f38352905d7dfb338a04bc0c81ce8dba60928..668ec179e8395089467adaaf8c7750fb413c6b46 100644 (file)
@@ -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) {
index 21b921b5425fdd8ee0f0f66650e372ea48143aa9..38d3ecbf705d6cd2ac6546e2dd0bc84f88eee4b2 100644 (file)
@@ -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
 
 
 
index 3b2392e48ace734fab25ebf0622971fc425e54b6..2b8f35776310313d8ec3b0eb8f1c4d4eb9ee41fa 100644 (file)
@@ -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 (file)
index 0000000..da5f681
--- /dev/null
@@ -0,0 +1,7 @@
+--TEST--
+Test # delimiter parsing and execution
+--PHPDBG--
+ev 1 + 3 # ev 2 ** 3#q
+--EXPECTF--
+prompt> 4
+8