From: Bob Weinand <bobwei9@hotmail.com>
Date: Thu, 17 Sep 2015 20:52:55 +0000 (+0200)
Subject: Add # delimiter to phpdbg commands
X-Git-Tag: php-7.0.0RC4~4^2~109
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=adcabcc125094dae8fe1b62dca267e3fa302907d;p=php

Add # delimiter to phpdbg commands
---

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