summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dev/phpdbg_lexer.l12
-rw-r--r--phpdbg_break.c22
-rw-r--r--phpdbg_cmd.c201
-rw-r--r--phpdbg_cmd.h12
-rw-r--r--phpdbg_help.c23
-rw-r--r--phpdbg_info.c20
-rw-r--r--phpdbg_lexer.c427
-rw-r--r--phpdbg_lexer.h2
-rw-r--r--phpdbg_list.c18
-rw-r--r--phpdbg_print.c15
-rw-r--r--phpdbg_prompt.c106
-rw-r--r--phpdbg_prompt.h1
-rw-r--r--phpdbg_set.c140
-rw-r--r--phpdbg_set.h2
14 files changed, 511 insertions, 490 deletions
diff --git a/dev/phpdbg_lexer.l b/dev/phpdbg_lexer.l
index 46137d6676..e20f9dcc93 100644
--- a/dev/phpdbg_lexer.l
+++ b/dev/phpdbg_lexer.l
@@ -33,16 +33,16 @@ C_EVAL ?i:"eval"
C_SHELL ?i:"shell"
C_IF ?i:"if"
-DIGITS [0-9]+
-ID [a-zA-Z_\x7f-\xff\-][a-zA-Z0-9_\x7f-\xff\-\./]*
+WS [ \r\n\t]+
+DIGITS [0-9\.]+
+ID [^ \r\n\t]+
NSID [\\\\]?{ID}
METHOD {NSID}+::{ID}
NUMERIC_METHOD {METHOD}[#]{DIGITS}
NUMERIC_FUNCTION {NSID}[#]{DIGITS}
-FILE [^ :]+:[0-9]+
+FILE [^ :\r\n\t]+:[0-9]+
OPLINE 0x[a-fA-F0-9]+
LITERAL \"(\\.|[^\\"])*\"
-WS [ \r\n\t]+
INPUT [^\n]+
%%
<INITIAL>
@@ -129,8 +129,4 @@ INPUT [^\n]+
return T_INPUT;
}
{WS} { /* ignore whitespace */ }
-. {
- phpdbg_init_param(yylval, EMPTY_PARAM);
- return T_UNEXPECTED;
-}
%%
diff --git a/phpdbg_break.c b/phpdbg_break.c
index aeaf5973f0..fdf4e198b5 100644
--- a/phpdbg_break.c
+++ b/phpdbg_break.c
@@ -24,22 +24,26 @@
#include "phpdbg_opcode.h"
#include "phpdbg_break.h"
#include "phpdbg_bp.h"
+#include "phpdbg_prompt.h"
ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
+#define PHPDBG_BREAK_COMMAND_D(f, h, a, m, l, s) \
+ PHPDBG_COMMAND_D_EXP(f, h, a, m, l, s, &phpdbg_prompt_commands[10])
+
/**
* Commands
*/
const phpdbg_command_t phpdbg_break_commands[] = {
- PHPDBG_COMMAND_D_EX(file, "specify breakpoint by file:line", 'F', break_file, NULL, "f"),
- PHPDBG_COMMAND_D_EX(func, "specify breakpoint by global function name", 'f', break_func, NULL, "s"),
- PHPDBG_COMMAND_D_EX(method, "specify breakpoint by class::method", 'm', break_method, NULL, "m"),
- PHPDBG_COMMAND_D_EX(address, "specify breakpoint by address", 'a', break_address, NULL, "a"),
- PHPDBG_COMMAND_D_EX(op, "specify breakpoint by opcode", 'O', break_op, NULL, "s"),
- PHPDBG_COMMAND_D_EX(on, "specify breakpoint by condition", 'o', break_on, NULL, "c"),
- PHPDBG_COMMAND_D_EX(at, "specify breakpoint by location and condition", 'A', break_at, NULL, "*c"),
- PHPDBG_COMMAND_D_EX(lineno, "specify breakpoint by line of currently executing file", 'l', break_lineno, NULL, "n"),
- PHPDBG_COMMAND_D_EX(del, "delete breakpoint by identifier number", 'd', break_del, NULL, "n"),
+ PHPDBG_BREAK_COMMAND_D(file, "specify breakpoint by file:line", 'F', break_file, NULL, "f"),
+ PHPDBG_BREAK_COMMAND_D(func, "specify breakpoint by global function name", 'f', break_func, NULL, "s"),
+ PHPDBG_BREAK_COMMAND_D(method, "specify breakpoint by class::method", 'm', break_method, NULL, "m"),
+ PHPDBG_BREAK_COMMAND_D(address, "specify breakpoint by address", 'a', break_address, NULL, "a"),
+ PHPDBG_BREAK_COMMAND_D(op, "specify breakpoint by opcode", 'O', break_op, NULL, "s"),
+ PHPDBG_BREAK_COMMAND_D(on, "specify breakpoint by condition", 'o', break_on, NULL, "c"),
+ PHPDBG_BREAK_COMMAND_D(at, "specify breakpoint by location and condition", 'A', break_at, NULL, "*c"),
+ PHPDBG_BREAK_COMMAND_D(lineno, "specify breakpoint by line of currently executing file", 'l', break_lineno, NULL, "n"),
+ PHPDBG_BREAK_COMMAND_D(del, "delete breakpoint by identifier number", 'd', break_del, NULL, "n"),
PHPDBG_END_COMMAND
};
diff --git a/phpdbg_cmd.c b/phpdbg_cmd.c
index b678d393ab..4e6ef048b8 100644
--- a/phpdbg_cmd.c
+++ b/phpdbg_cmd.c
@@ -26,6 +26,23 @@
ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
+static inline const char *phpdbg_command_name(const phpdbg_command_t *command, char *buffer) {
+ size_t pos = 0;
+
+ if (command->parent) {
+ memcpy(&buffer[pos], command->parent->name, command->parent->name_len);
+ pos += command->parent->name_len;
+ memcpy(&buffer[pos], " ", sizeof(" ")-1);
+ pos += (sizeof(" ")-1);
+ }
+
+ memcpy(&buffer[pos], command->name, command->name_len);
+ pos += command->name_len;
+ buffer[pos] = 0;
+
+ return buffer;
+}
+
PHPDBG_API const char *phpdbg_get_param_type(const phpdbg_param_t *param TSRMLS_DC) /* {{{ */
{
switch (param->type) {
@@ -493,115 +510,87 @@ PHPDBG_API void phpdbg_stack_push(phpdbg_param_t *stack, phpdbg_param_t *param)
PHPDBG_API int phpdbg_stack_verify(const phpdbg_command_t *command, phpdbg_param_t **stack, char **why TSRMLS_DC) {
if (command && command->args) {
+ char buffer[128] = {0,};
const phpdbg_param_t *top = (stack != NULL) ? *stack : NULL;
const char *arg = command->args;
- size_t expected = strlen(command->args),
- received = 0L;
+ size_t least = 0L,
+ received = 0L,
+ current = 0L;
zend_bool optional = 0;
- if (*arg == '|') {
- expected--;
- optional = 1;
+ /* check for arg spec */
+ if (!(arg) || !(*arg))
+ return SUCCESS;
+
+ least = 0L;
+
+ /* count least amount of arguments */
+ while (arg && *arg) {
+ if (arg[0] == '|') {
+ break;
+ }
+ least++;
arg++;
}
- if (arg && !top && !optional) {
- asprintf(why,
- "%s expected arguments and received none", command->name);
- return FAILURE;
- }
-
- while (top && arg) {
+ arg = command->args;
+
+#define verify_arg(e, a, t) if (!(a)) { \
+ if (!optional) { \
+ asprintf(why, \
+ "%s expected %s and got nothing at parameter %lu", \
+ phpdbg_command_name(command, buffer), \
+ (e), \
+ current); \
+ return FAILURE;\
+ } \
+} else if ((a)->type != (t)) { \
+ asprintf(why, \
+ "%s expected %s and got %s at parameter %lu", \
+ phpdbg_command_name(command, buffer), \
+ (e),\
+ phpdbg_get_param_type((a) TSRMLS_CC), \
+ current); \
+ return FAILURE; \
+}
+ while (arg) {
+ current++;
+
switch (*arg) {
- case '|': {
- expected--;
+ case '|': {
+ current--;
optional = 1;
arg++;
} continue;
- case 'i': if (top->type != STR_PARAM) {
- asprintf(why,
- "%s expected raw input and got %s at parameter %lu",
- command->name, phpdbg_get_param_type(top TSRMLS_CC),
- (command->args - arg) + 1);
- return FAILURE;
- } break;
-
- case 's': if (top->type != STR_PARAM) {
- asprintf(why,
- "%s expected string and got %s at parameter %lu",
- command->name, phpdbg_get_param_type(top TSRMLS_CC),
- (command->args - arg) + 1);
- return FAILURE;
- } break;
-
- case 'n': if (top->type != NUMERIC_PARAM) {
- asprintf(why,
- "%s expected number and got %s at parameter %lu",
- command->name, phpdbg_get_param_type(top TSRMLS_CC),
- (command->args - arg) + 1);
- return FAILURE;
- } break;
-
- case 'm': if (top->type != METHOD_PARAM) {
- asprintf(why,
- "%s expected method and got %s at parameter %lu",
- command->name, phpdbg_get_param_type(top TSRMLS_CC),
- (command->args - arg) + 1);
- return FAILURE;
- } break;
-
- case 'a': if (top->type != ADDR_PARAM) {
- asprintf(why,
- "%s expected address and got %s at parameter %lu",
- command->name, phpdbg_get_param_type(top TSRMLS_CC),
- (command->args - arg) + 1);
- return FAILURE;
- } break;
-
- case 'f': if (top->type != FILE_PARAM) {
- asprintf(why,
- "%s expected file:line and got %s at parameter %lu",
- command->name, phpdbg_get_param_type(top TSRMLS_CC),
- (command->args - arg) + 1);
- return FAILURE;
- } break;
-
- case 'c': if (top->type != COND_PARAM) {
- asprintf(why,
- "%s expected condition and got %s at parameter %lu",
- command->name, phpdbg_get_param_type(top TSRMLS_CC),
- (command->args - arg) + 1);
- return FAILURE;
- } break;
-
- case 'b': if (top->type != NUMERIC_PARAM) {
- asprintf(why,
- "%s expected boolean and got %s at parameter %lu",
- command->name, phpdbg_get_param_type(top TSRMLS_CC),
- (command->args - arg) + 1);
- return FAILURE;
- } else if (top->num > 1 || top->num < 0) {
- asprintf(why,
- "%s expected boolean and got number at parameter %lu",
- command->name,
- (command->args - arg) + 1);
- return FAILURE;
- } break;
+ case 'i': verify_arg("raw input", top, STR_PARAM); break;
+ case 's': verify_arg("string", top, STR_PARAM); break;
+ case 'n': verify_arg("number", top, NUMERIC_PARAM); break;
+ case 'm': verify_arg("method", top, METHOD_PARAM); break;
+ case 'a': verify_arg("address", top, ADDR_PARAM); break;
+ case 'f': verify_arg("file:line", top, FILE_PARAM); break;
+ case 'c': verify_arg("condition", top, COND_PARAM); break;
+ case 'b': verify_arg("boolean", top, NUMERIC_PARAM); break;
case '*': { /* do nothing */ } break;
}
- top = top->next;
+
+ if (top ) {
+ top = top->next;
+ } else break;
+
received++;
arg++;
}
- if ((received < expected) && (arg && *arg) && !optional) {
+#undef verify_arg
+
+ if ((received < least)) {
asprintf(why,
- "%s expected %lu arguments (%s) and received %lu",
- command->name,
- expected,
+ "%s expected at least %lu arguments (%s) and received %lu",
+ phpdbg_command_name(command, buffer),
+ least,
command->args,
received);
return FAILURE;
@@ -627,15 +616,21 @@ PHPDBG_API const phpdbg_command_t* phpdbg_stack_resolve(const phpdbg_command_t *
matches++;
}
} else {
+
/* match full command name */
if (memcmp(command->name, name->str, name->len) == SUCCESS) {
if (matches < 3) {
matched[matches] = command;
matches++;
+
+ /* exact match */
+ if (name->len == command->name_len)
+ break;
} else break;
}
}
}
+
command++;
}
@@ -655,10 +650,36 @@ PHPDBG_API const phpdbg_command_t* phpdbg_stack_resolve(const phpdbg_command_t *
} break;
default: {
+ char *list = NULL;
+ zend_uint it = 0;
+ size_t pos = 0;
+
+ while (it < matches) {
+ if (!list) {
+ list = malloc(
+ matched[it]->name_len + 1 +
+ ((it+1) < matches ? sizeof(", ")-1 : 0));
+ } else {
+ list = realloc(list,
+ (pos + matched[it]->name_len) + 1 +
+ ((it+1) < matches ? sizeof(", ")-1 : 0));
+ }
+ memcpy(&list[pos], matched[it]->name, matched[it]->name_len);
+ pos += matched[it]->name_len;
+ if ((it+1) < matches) {
+ memcpy(&list[pos], ", ", sizeof(", ")-1);
+ pos += (sizeof(", ") - 1);
+ }
+
+ list[pos] = 0;
+ it++;
+ }
+
asprintf(
why,
- "The command %s is ambigious, matching %lu commands",
- name->str, matches);
+ "The command %s is ambigious, matching %lu commands (%s)",
+ name->str, matches, list);
+ free(list);
} return NULL;
}
diff --git a/phpdbg_cmd.h b/phpdbg_cmd.h
index da2a25cbbd..2c0ecb4540 100644
--- a/phpdbg_cmd.h
+++ b/phpdbg_cmd.h
@@ -94,7 +94,8 @@ struct _phpdbg_command_t {
char alias; /* Alias */
phpdbg_command_handler_t handler; /* Command handler */
const phpdbg_command_t *subs; /* Sub Commands */
- char *args; /* Argument Spec */
+ char *args; /* Argument Spec */
+ const phpdbg_command_t *parent; /* Parent Command */
};
/* }}} */
@@ -158,17 +159,20 @@ PHPDBG_API void phpdbg_param_debug(const phpdbg_param_t *param, const char *msg)
*/
#define PHPDBG_COMMAND_HANDLER(name) phpdbg_do_##name
+#define PHPDBG_COMMAND_D_EXP(name, tip, alias, handler, children, args, parent) \
+ {PHPDBG_STRL(#name), tip, sizeof(tip)-1, alias, phpdbg_do_##handler, children, args, parent}
+
#define PHPDBG_COMMAND_D_EX(name, tip, alias, handler, children, args) \
- {PHPDBG_STRL(#name), tip, sizeof(tip)-1, alias, phpdbg_do_##handler, children, args}
+ {PHPDBG_STRL(#name), tip, sizeof(tip)-1, alias, phpdbg_do_##handler, children, args, NULL}
#define PHPDBG_COMMAND_D(name, tip, alias, children, args) \
- {PHPDBG_STRL(#name), tip, sizeof(tip)-1, alias, phpdbg_do_##name, children, args}
+ {PHPDBG_STRL(#name), tip, sizeof(tip)-1, alias, phpdbg_do_##name, children, args, NULL}
#define PHPDBG_COMMAND(name) int phpdbg_do_##name(const phpdbg_param_t *param TSRMLS_DC)
#define PHPDBG_COMMAND_ARGS param TSRMLS_CC
-#define PHPDBG_END_COMMAND {NULL, 0, NULL, 0, '\0', NULL, NULL, '\0'}
+#define PHPDBG_END_COMMAND {NULL, 0, NULL, 0, '\0', NULL, NULL, '\0', NULL}
/*
* Default Switch Case
diff --git a/phpdbg_help.c b/phpdbg_help.c
index d3404f5569..c5da19b988 100644
--- a/phpdbg_help.c
+++ b/phpdbg_help.c
@@ -809,21 +809,6 @@ phpdbg_help_text_t phpdbg_help_text[] = {
" Print the instructions for the current stack"
},
-{"quiet",
-"Setting quietness on will stop the OPLINE output during execution" CR CR
-
-"**Examples**" CR CR
-" $P quiet 1" CR
-" $P Q 1" CR
-" Will silence OPLINE output, while" CR CR
-
-" $P quiet 0" CR
-" $P Q 0" CR
-" Will enable OPLINE output again" CR CR
-
-"Note: Quietness is disabled automatically while stepping"
-},
-
{"register",
//******* Needs a general explanation of the how registered functions work
"Register any global function for use as a command in phpdbg console" CR CR
@@ -856,11 +841,13 @@ phpdbg_help_text_t phpdbg_help_text[] = {
"are as follows:" CR CR
" **Type** **Alias** **Purpose**" CR
-" **prompt** **p** set the prompt " CR
+" **prompt** **p** set the prompt" CR
" **color** **c** set color <element> <color>" CR
-" **colors** **C** set colors on or off" CR
+" **colors** **C** set colors <on|off>" CR
" **oplog** **O** set oplog output" CR
-" **break** **b** set break **id** <on|off>" CR CR
+" **break** **b** set break **id** <on|off>" CR
+" **breaks** **B** set breaks <on|off>" CR
+" **quiet** **q** set quiet <on|off>" CR CR
"Valid colors are **none**, **white**, **red**, **green**, **yellow**, **blue**, **purple**, "
"**cyan** and **black**. All colours except **none** can be followed by an optional "
diff --git a/phpdbg_info.c b/phpdbg_info.c
index b559b75835..97f88bfa1e 100644
--- a/phpdbg_info.c
+++ b/phpdbg_info.c
@@ -23,18 +23,22 @@
#include "phpdbg_utils.h"
#include "phpdbg_info.h"
#include "phpdbg_bp.h"
+#include "phpdbg_prompt.h"
ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
+#define PHPDBG_INFO_COMMAND_D(f, h, a, m, l, s) \
+ PHPDBG_COMMAND_D_EXP(f, h, a, m, l, s, &phpdbg_prompt_commands[14])
+
const phpdbg_command_t phpdbg_info_commands[] = {
- PHPDBG_COMMAND_D_EX(break, "show breakpoints", 'b', info_break, NULL, 0),
- PHPDBG_COMMAND_D_EX(files, "show included files", 'F', info_files, NULL, 0),
- PHPDBG_COMMAND_D_EX(classes, "show loaded classes", 'c', info_classes, NULL, 0),
- PHPDBG_COMMAND_D_EX(funcs, "show loaded classes", 'f', info_funcs, NULL, 0),
- PHPDBG_COMMAND_D_EX(error, "show last error", 'e', info_error, NULL, 0),
- PHPDBG_COMMAND_D_EX(vars, "show active variables", 'v', info_vars, NULL, 0),
- PHPDBG_COMMAND_D_EX(literal, "show active literal constants", 'l', info_literal, NULL, 0),
- PHPDBG_COMMAND_D_EX(memory, "show memory manager stats", 'm', info_memory, NULL, 0),
+ PHPDBG_INFO_COMMAND_D(break, "show breakpoints", 'b', info_break, NULL, 0),
+ PHPDBG_INFO_COMMAND_D(files, "show included files", 'F', info_files, NULL, 0),
+ PHPDBG_INFO_COMMAND_D(classes, "show loaded classes", 'c', info_classes, NULL, 0),
+ PHPDBG_INFO_COMMAND_D(funcs, "show loaded classes", 'f', info_funcs, NULL, 0),
+ PHPDBG_INFO_COMMAND_D(error, "show last error", 'e', info_error, NULL, 0),
+ PHPDBG_INFO_COMMAND_D(vars, "show active variables", 'v', info_vars, NULL, 0),
+ PHPDBG_INFO_COMMAND_D(literal, "show active literal constants", 'l', info_literal, NULL, 0),
+ PHPDBG_INFO_COMMAND_D(memory, "show memory manager stats", 'm', info_memory, NULL, 0),
PHPDBG_END_COMMAND
};
diff --git a/phpdbg_lexer.c b/phpdbg_lexer.c
index 9999a63978..4515b6d822 100644
--- a/phpdbg_lexer.c
+++ b/phpdbg_lexer.c
@@ -349,8 +349,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
*yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp;
-#define YY_NUM_RULES 17
-#define YY_END_OF_BUFFER 18
+#define YY_NUM_RULES 16
+#define YY_END_OF_BUFFER 17
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -358,19 +358,21 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static yyconst flex_int16_t yy_accept[96] =
+static yyconst flex_int16_t yy_accept[112] =
{ 0,
- 0, 0, 0, 0, 18, 16, 15, 15, 15, 16,
- 13, 6, 6, 16, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 16, 14, 14, 15, 0, 0, 15,
- 15, 0, 0, 12, 0, 0, 0, 13, 13, 0,
- 0, 6, 0, 13, 13, 13, 13, 3, 5, 13,
- 4, 13, 13, 13, 13, 14, 14, 10, 12, 0,
- 10, 8, 0, 0, 11, 13, 13, 13, 13, 5,
- 13, 13, 4, 9, 0, 0, 13, 13, 1, 13,
- 13, 4, 0, 9, 13, 13, 5, 2, 7, 13,
- 13, 13, 4, 5, 0
-
+ 0, 0, 0, 0, 17, 13, 15, 13, 6, 6,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 14, 14, 13, 13, 13, 13, 15, 13, 0,
+ 12, 13, 13, 13, 6, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 3, 5, 13, 4, 13, 13,
+ 13, 14, 14, 8, 10, 13, 12, 0, 8, 13,
+ 12, 13, 10, 13, 13, 13, 11, 8, 13, 13,
+ 13, 13, 5, 13, 13, 4, 9, 9, 9, 9,
+ 13, 8, 9, 9, 9, 9, 9, 13, 13, 13,
+ 1, 13, 13, 4, 9, 8, 9, 8, 9, 13,
+
+ 13, 5, 2, 7, 7, 13, 13, 13, 4, 5,
+ 0
} ;
static yyconst flex_int32_t yy_ec[256] =
@@ -378,190 +380,230 @@ static yyconst flex_int32_t yy_ec[256] =
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 4, 1, 5, 6, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 7, 8, 8, 9, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 11, 1, 1,
- 1, 1, 1, 1, 12, 13, 14, 15, 16, 17,
- 7, 18, 19, 7, 7, 20, 7, 21, 22, 7,
- 7, 23, 24, 25, 26, 27, 7, 7, 28, 7,
- 1, 29, 1, 1, 7, 1, 30, 31, 14, 32,
-
- 33, 34, 7, 35, 36, 7, 7, 37, 7, 38,
- 39, 7, 7, 40, 41, 42, 43, 44, 7, 45,
- 46, 7, 1, 1, 1, 1, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7
+ 1, 2, 1, 4, 5, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 6, 1, 7, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 9, 1, 1,
+ 1, 1, 1, 1, 10, 11, 12, 13, 14, 15,
+ 1, 16, 17, 1, 1, 18, 1, 19, 20, 1,
+ 1, 21, 22, 23, 24, 25, 1, 1, 26, 1,
+ 1, 27, 1, 1, 1, 1, 28, 29, 12, 30,
+
+ 31, 32, 1, 33, 34, 1, 1, 35, 1, 36,
+ 37, 1, 1, 38, 39, 40, 41, 42, 1, 43,
+ 44, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1
} ;
-static yyconst flex_int32_t yy_meta[47] =
+static yyconst flex_int32_t yy_meta[45] =
{ 0,
- 1, 1, 2, 3, 1, 4, 5, 4, 4, 4,
- 1, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 1, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5
+ 1, 2, 3, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1
} ;
-static yyconst flex_int16_t yy_base[107] =
+static yyconst flex_int16_t yy_base[121] =
{ 0,
- 0, 0, 45, 48, 148, 133, 51, 54, 57, 59,
- 88, 57, 62, 448, 117, 65, 94, 95, 113, 120,
- 115, 64, 124, 160, 0, 72, 75, 105, 71, 170,
- 173, 174, 116, 94, 177, 104, 181, 119, 123, 184,
- 206, 187, 227, 164, 215, 234, 182, 128, 148, 213,
- 185, 236, 237, 243, 212, 0, 220, 101, 448, 92,
- 266, 272, 0, 295, 0, 280, 255, 289, 266, 214,
- 292, 298, 258, 79, 334, 0, 302, 328, 294, 333,
- 331, 322, 216, 76, 334, 340, 336, 338, 219, 359,
- 362, 364, 361, 363, 448, 400, 405, 410, 415, 420,
-
- 425, 430, 435, 64, 440, 442
+ 0, 0, 43, 45, 106, 44, 48, 52, 57, 80,
+ 63, 64, 119, 65, 90, 92, 157, 99, 73, 104,
+ 116, 0, 56, 125, 142, 132, 148, 74, 176, 56,
+ 155, 202, 228, 165, 189, 251, 212, 217, 240, 241,
+ 248, 264, 267, 279, 280, 281, 294, 291, 296, 293,
+ 306, 0, 100, 330, 335, 320, 628, 93, 0, 346,
+ 347, 373, 180, 356, 361, 193, 0, 384, 389, 392,
+ 397, 400, 399, 420, 409, 425, 426, 436, 441, 449,
+ 206, 0, 457, 460, 486, 212, 469, 234, 470, 493,
+ 477, 496, 498, 503, 529, 534, 324, 0, 361, 539,
+
+ 540, 541, 542, 570, 378, 575, 577, 578, 554, 583,
+ 628, 610, 79, 613, 66, 616, 618, 621, 51, 624
} ;
-static yyconst flex_int16_t yy_def[107] =
+static yyconst flex_int16_t yy_def[121] =
{ 0,
- 95, 1, 96, 96, 95, 97, 97, 97, 95, 98,
- 99, 97, 97, 95, 99, 15, 15, 15, 15, 15,
- 15, 15, 15, 100, 101, 101, 95, 97, 95, 97,
- 95, 98, 102, 97, 102, 98, 97, 15, 15, 95,
- 103, 97, 97, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 101, 101, 95, 95, 102,
- 102, 97, 104, 105, 43, 15, 15, 15, 15, 15,
- 15, 15, 15, 106, 105, 75, 15, 15, 15, 15,
- 15, 15, 95, 106, 15, 15, 15, 15, 95, 15,
- 15, 15, 15, 15, 0, 95, 95, 95, 95, 95,
-
- 95, 95, 95, 95, 95, 95
+ 111, 1, 112, 112, 111, 113, 111, 114, 113, 113,
+ 115, 113, 113, 113, 113, 113, 113, 113, 113, 113,
+ 113, 116, 116, 113, 113, 115, 113, 111, 114, 117,
+ 113, 114, 118, 114, 113, 113, 115, 115, 115, 115,
+ 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
+ 113, 116, 116, 113, 115, 119, 111, 117, 32, 118,
+ 115, 118, 62, 120, 118, 32, 36, 115, 113, 113,
+ 113, 113, 113, 113, 113, 113, 119, 119, 119, 119,
+ 62, 62, 120, 119, 120, 85, 120, 62, 113, 113,
+ 113, 113, 113, 113, 119, 119, 85, 85, 85, 113,
+
+ 113, 113, 113, 119, 85, 113, 113, 113, 113, 113,
+ 0, 111, 111, 111, 111, 111, 111, 111, 111, 111
} ;
-static yyconst flex_int16_t yy_nxt[495] =
+static yyconst flex_int16_t yy_nxt[673] =
{ 0,
- 6, 7, 8, 9, 10, 6, 11, 6, 12, 13,
- 14, 11, 11, 11, 15, 16, 17, 11, 18, 11,
- 19, 20, 11, 21, 22, 11, 11, 23, 24, 11,
- 11, 15, 16, 17, 11, 18, 11, 19, 20, 11,
- 21, 22, 11, 11, 11, 23, 26, 27, 26, 26,
- 27, 26, 30, 30, 31, 30, 30, 31, 31, 31,
- 31, 29, 33, 34, 29, 42, 42, 29, 74, 35,
- 42, 42, 29, 57, 31, 57, 31, 31, 31, 58,
- 58, 83, 38, 38, 83, 45, 53, 36, 28, 28,
- 28, 46, 28, 37, 95, 39, 39, 39, 40, 38,
-
- 38, 43, 45, 53, 29, 47, 28, 33, 46, 58,
- 58, 48, 38, 38, 35, 29, 41, 28, 28, 28,
- 59, 28, 37, 47, 39, 39, 39, 40, 48, 38,
- 38, 38, 52, 38, 49, 44, 50, 38, 38, 54,
- 51, 38, 38, 29, 60, 41, 38, 95, 38, 52,
- 38, 49, 44, 50, 38, 38, 54, 51, 38, 38,
- 28, 28, 28, 38, 28, 28, 38, 28, 28, 28,
- 29, 30, 30, 31, 31, 31, 31, 33, 34, 95,
- 29, 59, 38, 38, 35, 61, 61, 66, 28, 62,
- 62, 29, 58, 58, 63, 42, 42, 29, 95, 38,
-
- 38, 69, 36, 38, 66, 60, 28, 28, 28, 95,
- 28, 28, 95, 28, 28, 28, 29, 38, 69, 95,
- 38, 57, 31, 57, 89, 89, 67, 89, 89, 70,
- 38, 38, 38, 38, 28, 65, 65, 29, 65, 65,
- 65, 65, 65, 65, 67, 68, 70, 38, 38, 38,
- 38, 71, 38, 95, 38, 38, 65, 65, 65, 65,
- 65, 38, 72, 68, 95, 95, 73, 78, 71, 38,
- 59, 38, 38, 38, 61, 61, 38, 95, 38, 72,
- 62, 62, 29, 73, 38, 78, 95, 95, 95, 80,
- 38, 77, 95, 38, 60, 28, 28, 28, 38, 28,
-
- 28, 38, 76, 76, 76, 40, 80, 38, 79, 77,
- 38, 81, 38, 82, 85, 38, 38, 95, 95, 95,
- 38, 95, 95, 41, 38, 79, 95, 38, 81, 38,
- 82, 95, 85, 38, 28, 28, 28, 38, 28, 28,
- 38, 76, 76, 76, 40, 95, 38, 86, 87, 38,
- 88, 38, 38, 90, 38, 91, 38, 38, 38, 95,
- 95, 95, 41, 38, 86, 87, 38, 88, 38, 38,
- 90, 38, 91, 38, 92, 38, 93, 38, 94, 38,
- 38, 38, 38, 95, 95, 95, 95, 95, 95, 95,
- 95, 92, 95, 93, 38, 94, 38, 38, 38, 38,
-
- 25, 25, 25, 25, 25, 28, 28, 95, 28, 28,
- 32, 32, 32, 32, 32, 38, 38, 95, 38, 38,
- 55, 55, 95, 55, 55, 56, 95, 56, 56, 56,
- 33, 33, 33, 33, 33, 64, 64, 95, 64, 64,
- 75, 75, 95, 75, 75, 84, 84, 5, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95
-
+ 6, 7, 7, 8, 6, 9, 10, 9, 11, 6,
+ 6, 6, 12, 13, 14, 6, 15, 6, 16, 17,
+ 6, 18, 19, 6, 6, 20, 21, 6, 6, 12,
+ 13, 14, 6, 15, 6, 16, 17, 6, 18, 19,
+ 6, 6, 6, 20, 23, 7, 23, 7, 25, 28,
+ 28, 77, 26, 30, 30, 31, 32, 53, 28, 57,
+ 33, 25, 35, 35, 35, 26, 37, 38, 25, 25,
+ 27, 39, 26, 26, 44, 28, 28, 25, 34, 24,
+ 41, 26, 58, 27, 25, 35, 35, 35, 26, 40,
+ 27, 27, 44, 50, 25, 111, 25, 41, 26, 27,
+
+ 26, 53, 28, 25, 45, 111, 27, 26, 25, 111,
+ 50, 46, 26, 111, 49, 111, 27, 51, 27, 111,
+ 25, 45, 36, 25, 26, 27, 111, 26, 46, 25,
+ 27, 49, 111, 26, 51, 111, 38, 42, 55, 55,
+ 56, 111, 27, 43, 111, 27, 25, 54, 54, 54,
+ 26, 27, 25, 111, 42, 111, 26, 111, 40, 25,
+ 43, 25, 111, 26, 111, 26, 30, 111, 27, 32,
+ 111, 47, 111, 33, 27, 48, 111, 30, 30, 31,
+ 32, 27, 111, 27, 33, 60, 63, 63, 47, 111,
+ 111, 66, 48, 25, 35, 35, 35, 26, 29, 29,
+
+ 29, 111, 34, 30, 30, 31, 32, 59, 59, 59,
+ 33, 60, 60, 60, 64, 27, 38, 83, 83, 83,
+ 39, 38, 68, 68, 68, 39, 111, 111, 34, 30,
+ 30, 61, 62, 111, 63, 63, 64, 111, 40, 60,
+ 60, 60, 111, 40, 38, 38, 111, 111, 56, 39,
+ 111, 111, 25, 111, 65, 25, 26, 67, 67, 26,
+ 67, 67, 67, 67, 67, 67, 40, 40, 25, 69,
+ 111, 25, 26, 70, 27, 26, 71, 27, 67, 67,
+ 67, 67, 67, 25, 25, 25, 69, 26, 26, 26,
+ 27, 70, 111, 27, 71, 25, 72, 25, 25, 26,
+
+ 25, 26, 26, 111, 26, 27, 27, 27, 73, 74,
+ 25, 111, 111, 72, 26, 111, 75, 27, 111, 27,
+ 27, 111, 27, 111, 78, 73, 74, 76, 79, 105,
+ 105, 105, 27, 75, 25, 54, 54, 54, 26, 38,
+ 111, 55, 55, 39, 76, 111, 80, 30, 30, 61,
+ 62, 38, 111, 111, 81, 39, 27, 30, 30, 84,
+ 85, 40, 30, 111, 86, 62, 83, 83, 83, 81,
+ 111, 111, 65, 40, 30, 30, 61, 62, 82, 82,
+ 82, 81, 87, 105, 105, 105, 111, 88, 38, 68,
+ 68, 68, 39, 25, 111, 111, 25, 26, 89, 65,
+
+ 26, 25, 90, 25, 25, 26, 111, 26, 26, 111,
+ 40, 111, 111, 25, 91, 27, 89, 26, 27, 111,
+ 90, 92, 94, 27, 25, 27, 27, 111, 26, 25,
+ 95, 91, 111, 26, 79, 27, 111, 93, 92, 94,
+ 95, 96, 96, 96, 79, 95, 27, 111, 111, 79,
+ 111, 27, 80, 95, 93, 111, 111, 79, 30, 30,
+ 84, 97, 80, 111, 95, 86, 111, 80, 79, 111,
+ 30, 111, 111, 97, 25, 80, 111, 86, 26, 111,
+ 100, 25, 111, 87, 111, 26, 80, 30, 30, 84,
+ 97, 98, 98, 98, 86, 99, 27, 25, 100, 111,
+
+ 25, 26, 25, 27, 26, 111, 26, 25, 111, 102,
+ 101, 26, 87, 111, 111, 103, 111, 111, 111, 27,
+ 111, 111, 27, 111, 27, 111, 102, 101, 111, 27,
+ 111, 111, 103, 95, 104, 104, 104, 79, 95, 96,
+ 96, 96, 79, 25, 25, 25, 25, 26, 26, 26,
+ 26, 111, 111, 107, 111, 80, 106, 111, 25, 111,
+ 80, 111, 26, 111, 111, 27, 27, 27, 27, 111,
+ 107, 111, 111, 106, 95, 104, 104, 104, 79, 25,
+ 27, 25, 25, 26, 111, 26, 26, 25, 108, 109,
+ 110, 26, 111, 111, 111, 111, 80, 111, 111, 111,
+
+ 111, 27, 111, 27, 27, 108, 109, 110, 111, 27,
+ 22, 22, 22, 29, 29, 29, 52, 52, 30, 30,
+ 30, 60, 60, 60, 83, 83, 83, 5, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111
} ;
-static yyconst flex_int16_t yy_chk[495] =
+static yyconst flex_int16_t yy_chk[673] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 3, 3, 3, 4,
- 4, 4, 7, 7, 7, 8, 8, 8, 9, 9,
- 9, 7, 10, 10, 8, 12, 12, 12, 104, 10,
- 13, 13, 13, 26, 26, 26, 27, 27, 27, 29,
- 29, 84, 22, 16, 74, 16, 22, 10, 11, 11,
- 11, 16, 11, 11, 60, 11, 11, 11, 11, 22,
-
- 16, 12, 16, 22, 34, 17, 36, 36, 16, 58,
- 58, 18, 17, 18, 36, 28, 11, 15, 15, 15,
- 33, 15, 15, 17, 15, 15, 15, 15, 18, 17,
- 18, 19, 21, 21, 19, 15, 20, 38, 20, 23,
- 20, 39, 23, 6, 33, 15, 48, 5, 19, 21,
- 21, 19, 15, 20, 38, 20, 23, 20, 39, 23,
- 24, 24, 24, 48, 24, 24, 49, 24, 24, 24,
- 24, 30, 30, 30, 31, 31, 31, 32, 32, 0,
- 30, 35, 44, 49, 32, 35, 35, 44, 24, 37,
- 37, 37, 40, 40, 40, 42, 42, 42, 0, 44,
-
- 47, 47, 32, 51, 44, 35, 41, 41, 41, 0,
- 41, 41, 0, 41, 41, 41, 41, 47, 47, 0,
- 51, 57, 57, 57, 83, 83, 45, 89, 89, 50,
- 55, 50, 70, 45, 41, 43, 43, 43, 43, 43,
- 43, 43, 43, 43, 45, 46, 50, 55, 50, 70,
- 45, 52, 46, 0, 52, 53, 43, 43, 43, 43,
- 43, 54, 53, 46, 0, 0, 54, 67, 52, 46,
- 61, 52, 53, 67, 61, 61, 73, 0, 54, 53,
- 62, 62, 62, 54, 69, 67, 0, 0, 0, 69,
- 67, 66, 0, 73, 61, 64, 64, 64, 66, 64,
-
- 64, 69, 64, 64, 64, 64, 69, 68, 68, 66,
- 71, 71, 79, 72, 77, 66, 72, 0, 0, 0,
- 77, 0, 0, 64, 68, 68, 0, 71, 71, 79,
- 72, 0, 77, 72, 75, 75, 75, 77, 75, 75,
- 82, 75, 75, 75, 75, 0, 78, 78, 80, 81,
- 81, 80, 85, 85, 87, 86, 88, 82, 86, 0,
- 0, 0, 75, 78, 78, 80, 81, 81, 80, 85,
- 85, 87, 86, 88, 90, 86, 91, 90, 92, 93,
- 91, 94, 92, 0, 0, 0, 0, 0, 0, 0,
- 0, 90, 0, 91, 90, 92, 93, 91, 94, 92,
-
- 96, 96, 96, 96, 96, 97, 97, 0, 97, 97,
- 98, 98, 98, 98, 98, 99, 99, 0, 99, 99,
- 100, 100, 0, 100, 100, 101, 0, 101, 101, 101,
- 102, 102, 102, 102, 102, 103, 103, 0, 103, 103,
- 105, 105, 0, 105, 105, 106, 106, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95
-
+ 1, 1, 1, 1, 3, 3, 4, 4, 6, 7,
+ 7, 119, 6, 8, 8, 8, 8, 23, 23, 30,
+ 8, 9, 9, 9, 9, 9, 115, 11, 12, 14,
+ 6, 11, 12, 14, 14, 28, 28, 19, 8, 113,
+ 12, 19, 30, 9, 10, 10, 10, 10, 10, 11,
+ 12, 14, 14, 19, 15, 58, 16, 12, 15, 19,
+
+ 16, 53, 53, 18, 15, 5, 10, 18, 20, 0,
+ 19, 16, 20, 0, 18, 0, 15, 20, 16, 0,
+ 21, 15, 10, 13, 21, 18, 0, 13, 16, 24,
+ 20, 18, 0, 24, 20, 0, 26, 13, 26, 26,
+ 26, 0, 21, 13, 0, 13, 25, 25, 25, 25,
+ 25, 24, 27, 0, 13, 0, 27, 0, 26, 31,
+ 13, 17, 0, 31, 0, 17, 34, 34, 25, 34,
+ 0, 17, 0, 34, 27, 17, 0, 29, 29, 29,
+ 29, 31, 0, 17, 29, 63, 63, 63, 17, 0,
+ 0, 34, 17, 35, 35, 35, 35, 35, 66, 66,
+
+ 66, 0, 29, 32, 32, 32, 32, 32, 32, 32,
+ 32, 81, 81, 81, 81, 35, 37, 86, 86, 86,
+ 37, 38, 38, 38, 38, 38, 0, 0, 32, 33,
+ 33, 33, 33, 0, 33, 33, 33, 0, 37, 88,
+ 88, 88, 0, 38, 39, 40, 0, 0, 39, 40,
+ 0, 0, 41, 0, 33, 36, 41, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 39, 40, 42, 41,
+ 0, 43, 42, 42, 41, 43, 43, 36, 36, 36,
+ 36, 36, 36, 44, 45, 46, 41, 44, 45, 46,
+ 42, 42, 0, 43, 43, 48, 44, 50, 47, 48,
+
+ 49, 50, 47, 0, 49, 44, 45, 46, 47, 49,
+ 51, 0, 0, 44, 51, 0, 50, 48, 0, 50,
+ 47, 0, 49, 0, 56, 47, 49, 51, 56, 97,
+ 97, 97, 51, 50, 54, 54, 54, 54, 54, 55,
+ 0, 55, 55, 55, 51, 0, 56, 60, 60, 60,
+ 60, 61, 0, 0, 60, 61, 54, 64, 64, 64,
+ 64, 55, 65, 65, 64, 65, 99, 99, 99, 65,
+ 0, 0, 60, 61, 62, 62, 62, 62, 62, 62,
+ 62, 62, 64, 105, 105, 105, 0, 65, 68, 68,
+ 68, 68, 68, 69, 0, 0, 70, 69, 69, 62,
+
+ 70, 71, 70, 73, 72, 71, 0, 73, 72, 0,
+ 68, 0, 0, 75, 71, 69, 69, 75, 70, 0,
+ 70, 72, 75, 71, 74, 73, 72, 0, 74, 76,
+ 77, 71, 0, 76, 77, 75, 0, 74, 72, 75,
+ 78, 78, 78, 78, 78, 79, 74, 0, 0, 79,
+ 0, 76, 77, 80, 74, 0, 0, 80, 83, 83,
+ 83, 83, 78, 0, 84, 83, 0, 79, 84, 0,
+ 87, 87, 0, 87, 89, 80, 0, 87, 89, 0,
+ 89, 91, 0, 83, 0, 91, 84, 85, 85, 85,
+ 85, 85, 85, 85, 85, 87, 89, 90, 89, 0,
+
+ 92, 90, 93, 91, 92, 0, 93, 94, 0, 92,
+ 90, 94, 85, 0, 0, 93, 0, 0, 0, 90,
+ 0, 0, 92, 0, 93, 0, 92, 90, 0, 94,
+ 0, 0, 93, 95, 95, 95, 95, 95, 96, 96,
+ 96, 96, 96, 100, 101, 102, 103, 100, 101, 102,
+ 103, 0, 0, 101, 0, 95, 100, 0, 109, 0,
+ 96, 0, 109, 0, 0, 100, 101, 102, 103, 0,
+ 101, 0, 0, 100, 104, 104, 104, 104, 104, 106,
+ 109, 107, 108, 106, 0, 107, 108, 110, 106, 107,
+ 108, 110, 0, 0, 0, 0, 104, 0, 0, 0,
+
+ 0, 106, 0, 107, 108, 106, 107, 108, 0, 110,
+ 112, 112, 112, 114, 114, 114, 116, 116, 117, 117,
+ 117, 118, 118, 118, 120, 120, 120, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111
} ;
/* The intent behind this definition is that it'll catch
@@ -587,7 +629,7 @@ static yyconst flex_int16_t yy_chk[495] =
#include <string.h>
#define YY_NO_UNISTD_H 1
-#line 591 "sapi/phpdbg/phpdbg_lexer.c"
+#line 633 "sapi/phpdbg/phpdbg_lexer.c"
#define INITIAL 0
#define RAW 1
@@ -827,7 +869,7 @@ YY_DECL
#line 47 "sapi/phpdbg/dev/phpdbg_lexer.l"
-#line 831 "sapi/phpdbg/phpdbg_lexer.c"
+#line 873 "sapi/phpdbg/phpdbg_lexer.c"
yylval = yylval_param;
@@ -882,13 +924,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 96 )
+ if ( yy_current_state >= 112 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
- while ( yy_current_state != 95 );
+ while ( yy_current_state != 111 );
yy_cp = yyg->yy_last_accepting_cpos;
yy_current_state = yyg->yy_last_accepting_state;
@@ -995,7 +1037,6 @@ YY_RULE_SETUP
}
YY_BREAK
case 10:
-/* rule 10 can match eol */
YY_RULE_SETUP
#line 100 "sapi/phpdbg/dev/phpdbg_lexer.l"
{
@@ -1056,17 +1097,9 @@ YY_RULE_SETUP
case 16:
YY_RULE_SETUP
#line 132 "sapi/phpdbg/dev/phpdbg_lexer.l"
-{
- phpdbg_init_param(yylval, EMPTY_PARAM);
- return T_UNEXPECTED;
-}
- YY_BREAK
-case 17:
-YY_RULE_SETUP
-#line 136 "sapi/phpdbg/dev/phpdbg_lexer.l"
YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK
-#line 1070 "sapi/phpdbg/phpdbg_lexer.c"
+#line 1103 "sapi/phpdbg/phpdbg_lexer.c"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(RAW):
yyterminate();
@@ -1362,7 +1395,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 96 )
+ if ( yy_current_state >= 112 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1391,11 +1424,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 96 )
+ if ( yy_current_state >= 112 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- yy_is_jam = (yy_current_state == 95);
+ yy_is_jam = (yy_current_state == 111);
return yy_is_jam ? 0 : yy_current_state;
}
@@ -2231,7 +2264,7 @@ void yyfree (void * ptr , yyscan_t yyscanner)
#define YYTABLES_NAME "yytables"
-#line 136 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 132 "sapi/phpdbg/dev/phpdbg_lexer.l"
diff --git a/phpdbg_lexer.h b/phpdbg_lexer.h
index 40e64e159e..f5d949a207 100644
--- a/phpdbg_lexer.h
+++ b/phpdbg_lexer.h
@@ -338,7 +338,7 @@ extern int yylex \
#undef YY_DECL
#endif
-#line 136 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 132 "sapi/phpdbg/dev/phpdbg_lexer.l"
#line 345 "sapi/phpdbg/phpdbg_lexer.h"
diff --git a/phpdbg_list.c b/phpdbg_list.c
index a1bd8c0ff5..6037714292 100644
--- a/phpdbg_list.c
+++ b/phpdbg_list.c
@@ -29,14 +29,18 @@
#include "phpdbg.h"
#include "phpdbg_list.h"
#include "phpdbg_utils.h"
+#include "phpdbg_prompt.h"
ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
+#define PHPDBG_LIST_COMMAND_D(f, h, a, m, l, s) \
+ PHPDBG_COMMAND_D_EXP(f, h, a, m, l, s, &phpdbg_prompt_commands[13])
+
const phpdbg_command_t phpdbg_list_commands[] = {
- PHPDBG_COMMAND_D_EX(lines, "lists the specified lines", 'l', list_lines, NULL, "l"),
- PHPDBG_COMMAND_D_EX(class, "lists the specified class", 'c', list_class, NULL, "s"),
- PHPDBG_COMMAND_D_EX(method, "lists the specified method", 'm', list_method, NULL, "m"),
- PHPDBG_COMMAND_D_EX(func, "lists the specified function", 'f', list_func, NULL, "s"),
+ PHPDBG_LIST_COMMAND_D(lines, "lists the specified lines", 'l', list_lines, NULL, "l"),
+ PHPDBG_LIST_COMMAND_D(class, "lists the specified class", 'c', list_class, NULL, "s"),
+ PHPDBG_LIST_COMMAND_D(method, "lists the specified method", 'm', list_method, NULL, "m"),
+ PHPDBG_LIST_COMMAND_D(func, "lists the specified function", 'f', list_func, NULL, "s"),
PHPDBG_END_COMMAND
};
@@ -49,12 +53,12 @@ PHPDBG_LIST(lines) /* {{{ */
switch (param->type) {
case NUMERIC_PARAM:
- case EMPTY_PARAM:
phpdbg_list_file(phpdbg_current_file(TSRMLS_C),
- param->type == EMPTY_PARAM ? 0 : (param->num < 0 ? 1 - param->num : param->num),
- (param->type != EMPTY_PARAM && param->num < 0 ? param->num : 0) + zend_get_executed_lineno(TSRMLS_C),
+ (param->num < 0 ? 1 - param->num : param->num),
+ (param->num < 0 ? param->num : 0) + zend_get_executed_lineno(TSRMLS_C),
0 TSRMLS_CC);
break;
+
case FILE_PARAM:
phpdbg_list_file(param->file.name, param->file.line, 0, 0 TSRMLS_CC);
break;
diff --git a/phpdbg_print.c b/phpdbg_print.c
index ed630c200c..c0265d60cf 100644
--- a/phpdbg_print.c
+++ b/phpdbg_print.c
@@ -26,13 +26,16 @@
ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
+#define PHPDBG_PRINT_COMMAND_D(f, h, a, m, l, s) \
+ PHPDBG_COMMAND_D_EXP(f, h, a, m, l, s, &phpdbg_prompt_commands[9])
+
const phpdbg_command_t phpdbg_print_commands[] = {
- PHPDBG_COMMAND_D_EX(exec, "print out the instructions in the execution context", 'e', print_exec, NULL, 0),
- PHPDBG_COMMAND_D_EX(opline, "print out the instruction in the current opline", 'o', print_opline, NULL, 0),
- PHPDBG_COMMAND_D_EX(class, "print out the instructions in the specified class", 'c', print_class, NULL, "s"),
- PHPDBG_COMMAND_D_EX(method, "print out the instructions in the specified method", 'm', print_method, NULL, "m"),
- PHPDBG_COMMAND_D_EX(func, "print out the instructions in the specified function", 'f', print_func, NULL, "s"),
- PHPDBG_COMMAND_D_EX(stack, "print out the instructions in the current stack", 's', print_stack, NULL, 0),
+ PHPDBG_PRINT_COMMAND_D(exec, "print out the instructions in the execution context", 'e', print_exec, NULL, 0),
+ PHPDBG_PRINT_COMMAND_D(opline, "print out the instruction in the current opline", 'o', print_opline, NULL, 0),
+ PHPDBG_PRINT_COMMAND_D(class, "print out the instructions in the specified class", 'c', print_class, NULL, "s"),
+ PHPDBG_PRINT_COMMAND_D(method, "print out the instructions in the specified method", 'm', print_method, NULL, "m"),
+ PHPDBG_PRINT_COMMAND_D(func, "print out the instructions in the specified function", 'f', print_func, NULL, "s"),
+ PHPDBG_PRINT_COMMAND_D(stack, "print out the instructions in the current stack", 's', print_stack, NULL, 0),
PHPDBG_END_COMMAND
};
diff --git a/phpdbg_prompt.c b/phpdbg_prompt.c
index aed1f4a015..3830f44a64 100644
--- a/phpdbg_prompt.c
+++ b/phpdbg_prompt.c
@@ -55,14 +55,13 @@ const phpdbg_command_t phpdbg_prompt_commands[] = {
PHPDBG_COMMAND_D(leave, "continue until the end of the stack", 'L', NULL, 0),
PHPDBG_COMMAND_D(print, "print something", 'p', phpdbg_print_commands, "s"),
PHPDBG_COMMAND_D(break, "set breakpoint", 'b', phpdbg_break_commands, 0),
- PHPDBG_COMMAND_D(back, "show trace", 't', NULL, 0),
- PHPDBG_COMMAND_D(frame, "switch to a frame", 'f', NULL, "n"),
+ PHPDBG_COMMAND_D(back, "show trace", 't', NULL, "|n"),
+ PHPDBG_COMMAND_D(frame, "switch to a frame", 'f', NULL, "|n"),
PHPDBG_COMMAND_D(list, "lists some code", 'l', phpdbg_list_commands, "*"),
PHPDBG_COMMAND_D(info, "displays some informations", 'i', phpdbg_info_commands, "s"),
PHPDBG_COMMAND_D(clean, "clean the execution environment", 'X', NULL, 0),
PHPDBG_COMMAND_D(clear, "clear breakpoints", 'C', NULL, 0),
PHPDBG_COMMAND_D(help, "show help menu", 'h', phpdbg_help_commands, "|s"),
- PHPDBG_COMMAND_D(quiet, "silence some output", 'Q', NULL, "b"),
PHPDBG_COMMAND_D(set, "set phpdbg configuration", 'S', phpdbg_set_commands, "s"),
PHPDBG_COMMAND_D(register,"register a function", 'R', NULL, "s"),
PHPDBG_COMMAND_D(source, "execute a phpdbginit", '.', NULL, "s"),
@@ -376,9 +375,8 @@ PHPDBG_COMMAND(compile) /* {{{ */
PHPDBG_COMMAND(step) /* {{{ */
{
switch (param->type) {
- case EMPTY_PARAM:
case NUMERIC_PARAM: {
- if (param->type == NUMERIC_PARAM && param->num) {
+ if (param->num) {
PHPDBG_G(flags) |= PHPDBG_IS_STEPPING;
} else {
PHPDBG_G(flags) &= ~PHPDBG_IS_STEPPING;
@@ -495,15 +493,13 @@ PHPDBG_COMMAND(leave) /* {{{ */
PHPDBG_COMMAND(frame) /* {{{ */
{
- switch (param->type) {
+ if (!param || param->type == EMPTY_PARAM) {
+ phpdbg_notice("Currently in frame #%d", PHPDBG_G(frame).num);
+ } else switch (param->type) {
case NUMERIC_PARAM:
phpdbg_switch_frame(param->num TSRMLS_CC);
break;
- case EMPTY_PARAM:
- phpdbg_notice("Currently in frame #%d", PHPDBG_G(frame).num);
- break;
-
phpdbg_default_switch_case();
}
@@ -681,11 +677,11 @@ PHPDBG_COMMAND(back) /* {{{ */
return SUCCESS;
}
- switch (param->type) {
- case EMPTY_PARAM:
+ if (!param || param->type == EMPTY_PARAM) {
+ phpdbg_dump_backtrace(0 TSRMLS_CC);
+ } else switch (param->type) {
case NUMERIC_PARAM:
- phpdbg_dump_backtrace(
- (param->type == NUMERIC_PARAM) ? param->num : 0 TSRMLS_CC);
+ phpdbg_dump_backtrace(param->num TSRMLS_CC);
break;
phpdbg_default_switch_case();
@@ -696,46 +692,42 @@ PHPDBG_COMMAND(back) /* {{{ */
PHPDBG_COMMAND(print) /* {{{ */
{
- switch (param->type) {
- case EMPTY_PARAM: {
- phpdbg_writeln(SEPARATE);
- phpdbg_notice("Execution Context Information");
+ if (!param || param->type == EMPTY_PARAM) {
+ phpdbg_writeln(SEPARATE);
+ phpdbg_notice("Execution Context Information");
#ifdef HAVE_LIBREADLINE
- phpdbg_writeln("Readline\tyes");
+ phpdbg_writeln("Readline\tyes");
#else
- phpdbg_writeln("Readline\tno");
+ phpdbg_writeln("Readline\tno");
#endif
- phpdbg_writeln("Exec\t\t%s", PHPDBG_G(exec) ? PHPDBG_G(exec) : "none");
- phpdbg_writeln("Compiled\t%s", PHPDBG_G(ops) ? "yes" : "no");
- phpdbg_writeln("Stepping\t%s", (PHPDBG_G(flags) & PHPDBG_IS_STEPPING) ? "on" : "off");
- phpdbg_writeln("Quietness\t%s", (PHPDBG_G(flags) & PHPDBG_IS_QUIET) ? "on" : "off");
- phpdbg_writeln("Oplog\t\t%s", PHPDBG_G(oplog) ? "on" : "off");
-
- if (PHPDBG_G(ops)) {
- phpdbg_writeln("Opcodes\t\t%d", PHPDBG_G(ops)->last);
+ phpdbg_writeln("Exec\t\t%s", PHPDBG_G(exec) ? PHPDBG_G(exec) : "none");
+ phpdbg_writeln("Compiled\t%s", PHPDBG_G(ops) ? "yes" : "no");
+ phpdbg_writeln("Stepping\t%s", (PHPDBG_G(flags) & PHPDBG_IS_STEPPING) ? "on" : "off");
+ phpdbg_writeln("Quietness\t%s", (PHPDBG_G(flags) & PHPDBG_IS_QUIET) ? "on" : "off");
+ phpdbg_writeln("Oplog\t\t%s", PHPDBG_G(oplog) ? "on" : "off");
- if (PHPDBG_G(ops)->last_var) {
- phpdbg_writeln("Variables\t%d", PHPDBG_G(ops)->last_var-1);
- } else {
- phpdbg_writeln("Variables\tNone");
- }
- }
+ if (PHPDBG_G(ops)) {
+ phpdbg_writeln("Opcodes\t\t%d", PHPDBG_G(ops)->last);
- phpdbg_writeln("Executing\t%s", EG(in_execution) ? "yes" : "no");
- if (EG(in_execution)) {
- phpdbg_writeln("VM Return\t%d", PHPDBG_G(vmret));
+ if (PHPDBG_G(ops)->last_var) {
+ phpdbg_writeln("Variables\t%d", PHPDBG_G(ops)->last_var-1);
+ } else {
+ phpdbg_writeln("Variables\tNone");
}
+ }
- phpdbg_writeln("Classes\t\t%d", zend_hash_num_elements(EG(class_table)));
- phpdbg_writeln("Functions\t%d", zend_hash_num_elements(EG(function_table)));
- phpdbg_writeln("Constants\t%d", zend_hash_num_elements(EG(zend_constants)));
- phpdbg_writeln("Included\t%d", zend_hash_num_elements(&EG(included_files)));
+ phpdbg_writeln("Executing\t%s", EG(in_execution) ? "yes" : "no");
+ if (EG(in_execution)) {
+ phpdbg_writeln("VM Return\t%d", PHPDBG_G(vmret));
+ }
- phpdbg_writeln(SEPARATE);
- } break;
+ phpdbg_writeln("Classes\t\t%d", zend_hash_num_elements(EG(class_table)));
+ phpdbg_writeln("Functions\t%d", zend_hash_num_elements(EG(function_table)));
+ phpdbg_writeln("Constants\t%d", zend_hash_num_elements(EG(zend_constants)));
+ phpdbg_writeln("Included\t%d", zend_hash_num_elements(&EG(included_files)));
- phpdbg_default_switch_case();
+ phpdbg_writeln(SEPARATE);
}
return SUCCESS;
@@ -759,12 +751,11 @@ PHPDBG_COMMAND(set) /* {{{ */
PHPDBG_COMMAND(break) /* {{{ */
{
- switch (param->type) {
- case EMPTY_PARAM:
- phpdbg_set_breakpoint_file(
+ if (!param || param->type == EMPTY_PARAM) {
+ phpdbg_set_breakpoint_file(
zend_get_executed_filename(TSRMLS_C),
zend_get_executed_lineno(TSRMLS_C) TSRMLS_CC);
- break;
+ } else switch (param->type) {
case ADDR_PARAM:
phpdbg_set_breakpoint_opline(param->addr TSRMLS_CC);
break;
@@ -926,25 +917,6 @@ PHPDBG_COMMAND(clear) /* {{{ */
return SUCCESS;
} /* }}} */
-PHPDBG_COMMAND(quiet) /* {{{ */
-{
- switch (param->type) {
- case NUMERIC_PARAM: {
- if (param->num) {
- PHPDBG_G(flags) |= PHPDBG_IS_QUIET;
- } else {
- PHPDBG_G(flags) &= ~PHPDBG_IS_QUIET;
- }
- phpdbg_notice("Quietness %s",
- (PHPDBG_G(flags) & PHPDBG_IS_QUIET) ? "enabled" : "disabled");
- } break;
-
- phpdbg_default_switch_case();
- }
-
- return SUCCESS;
-} /* }}} */
-
PHPDBG_COMMAND(list) /* {{{ */
{
if (!param || param->type == EMPTY_PARAM) {
diff --git a/phpdbg_prompt.h b/phpdbg_prompt.h
index e66ea16dce..d92623d409 100644
--- a/phpdbg_prompt.h
+++ b/phpdbg_prompt.h
@@ -47,7 +47,6 @@ PHPDBG_COMMAND(info);
PHPDBG_COMMAND(clean);
PHPDBG_COMMAND(clear);
PHPDBG_COMMAND(help);
-PHPDBG_COMMAND(quiet);
PHPDBG_COMMAND(shell);
PHPDBG_COMMAND(set);
PHPDBG_COMMAND(source);
diff --git a/phpdbg_set.c b/phpdbg_set.c
index 7ce67d934d..739acd3c71 100644
--- a/phpdbg_set.c
+++ b/phpdbg_set.c
@@ -23,67 +23,50 @@
#include "phpdbg_set.h"
#include "phpdbg_utils.h"
#include "phpdbg_bp.h"
+#include "phpdbg_prompt.h"
ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
+#define PHPDBG_SET_COMMAND_D(f, h, a, m, l, s) \
+ PHPDBG_COMMAND_D_EXP(f, h, a, m, l, s, &phpdbg_prompt_commands[18])
+
const phpdbg_command_t phpdbg_set_commands[] = {
- PHPDBG_COMMAND_D_EX(prompt, "usage: set prompt <string>", 'p', set_prompt, NULL, "s"),
+ PHPDBG_SET_COMMAND_D(prompt, "usage: set prompt [<string>]", 'p', set_prompt, NULL, "|s"),
#ifndef _WIN32
- PHPDBG_COMMAND_D_EX(color, "usage: set color <element> <color>", 'c', set_color, NULL, "ss"),
- PHPDBG_COMMAND_D_EX(colors, "usage: set colors <on|off>", 'C', set_colors, NULL, "b"),
+ PHPDBG_SET_COMMAND_D(color, "usage: set color <element> <color>", 'c', set_color, NULL, "ss"),
+ PHPDBG_SET_COMMAND_D(colors, "usage: set colors [<on|off>]", 'C', set_colors, NULL, "|b"),
#endif
- PHPDBG_COMMAND_D_EX(oplog, "usage: set oplog <output>", 'O', set_oplog, NULL, "s"),
- PHPDBG_COMMAND_D_EX(break, "usage: set break [id] <on|off>", 'b', set_break, NULL, "lb"),
+ PHPDBG_SET_COMMAND_D(oplog, "usage: set oplog [<output>]", 'O', set_oplog, NULL, "|s"),
+ PHPDBG_SET_COMMAND_D(break, "usage: set break id [<on|off>]", 'b', set_break, NULL, "l|b"),
+ PHPDBG_SET_COMMAND_D(breaks, "usage: set breaks [<on|off>]", 'B', set_breaks, NULL, "|b"),
+ PHPDBG_SET_COMMAND_D(quiet, "usage: set quiet [<on|off>]", 'q', set_quiet, NULL, "|b"),
PHPDBG_END_COMMAND
};
PHPDBG_SET(prompt) /* {{{ */
{
- switch (param->type) {
- case EMPTY_PARAM:
- phpdbg_writeln("%s", phpdbg_get_prompt(TSRMLS_C));
- break;
-
- case STR_PARAM:
- phpdbg_set_prompt(param->str TSRMLS_CC);
- break;
-
- phpdbg_default_switch_case();
- }
-
+ if (!param || param->type == EMPTY_PARAM) {
+ phpdbg_writeln("%s", phpdbg_get_prompt(TSRMLS_C));
+ } else phpdbg_set_prompt(param->str TSRMLS_CC);
+
return SUCCESS;
} /* }}} */
PHPDBG_SET(break) /* {{{ */
{
- if (!param || param->type == EMPTY_PARAM) {
- phpdbg_writeln("%s",
- PHPDBG_G(flags) & PHPDBG_IS_BP_ENABLED ? "on" : "off");
- } else switch (param->type) {
- case STR_PARAM:
- if (strncasecmp(param->str, PHPDBG_STRL("on")) == 0) {
- phpdbg_enable_breakpoints(TSRMLS_C);
- } else if (strncasecmp(param->str, PHPDBG_STRL("off")) == 0) {
- phpdbg_disable_breakpoints(TSRMLS_C);
- }
- break;
-
+ switch (param->type) {
case NUMERIC_PARAM: {
if (param->next) {
- /*
- if (phpdbg_argv_is(2, "on")) {
- phpdbg_enable_breakpoint(param->num TSRMLS_CC);
- } else if (phpdbg_argv_is(2, "off")) {
- phpdbg_disable_breakpoint(param->num TSRMLS_CC);
- }
- */
+ if (param->next->num) {
+ phpdbg_enable_breakpoint(param->num TSRMLS_CC);
+ } else phpdbg_disable_breakpoint(param->num TSRMLS_CC);
} else {
phpdbg_breakbase_t *brake = phpdbg_find_breakbase(param->num TSRMLS_CC);
if (brake) {
phpdbg_writeln(
"%s", brake->disabled ? "off" : "on");
} else {
- phpdbg_error("Failed to find breakpoint #%lx", param->num);
+ phpdbg_error("Failed to find breakpoint #%ld", param->num);
}
}
} break;
@@ -96,6 +79,26 @@ PHPDBG_SET(break) /* {{{ */
return SUCCESS;
} /* }}} */
+PHPDBG_SET(breaks) /* {{{ */
+{
+ if (!param || param->type == EMPTY_PARAM) {
+ phpdbg_writeln("%s",
+ PHPDBG_G(flags) & PHPDBG_IS_BP_ENABLED ? "on" : "off");
+ } else switch (param->type) {
+ case NUMERIC_PARAM: {
+ if (param->num) {
+ phpdbg_enable_breakpoints(TSRMLS_C);
+ } else phpdbg_disable_breakpoints(TSRMLS_C);
+ } break;
+
+ default:
+ phpdbg_error(
+ "set break used incorrectly: set break [id] <on|off>");
+ }
+
+ return SUCCESS;
+} /* }}} */
+
#ifndef _WIN32
PHPDBG_SET(color) /* {{{ */
{
@@ -141,58 +144,31 @@ usage:
PHPDBG_SET(colors) /* {{{ */
{
- switch (param->type) {
- case EMPTY_PARAM: {
- phpdbg_writeln(
- "%s", PHPDBG_G(flags) & PHPDBG_IS_COLOURED ? "on" : "off");
- goto done;
- }
-
- case STR_PARAM: {
- if (strncasecmp(param->str, PHPDBG_STRL("on")) == 0) {
+ if (!param || param->type == EMPTY_PARAM) {
+ phpdbg_writeln("%s", PHPDBG_G(flags) & PHPDBG_IS_COLOURED ? "on" : "off");
+ } else switch (param->type) {
+ case NUMERIC_PARAM: {
+ if (param->num) {
PHPDBG_G(flags) |= PHPDBG_IS_COLOURED;
- goto done;
- } else if (strncasecmp(param->str, PHPDBG_STRL("off")) == 0) {
+ } else {
PHPDBG_G(flags) &= ~PHPDBG_IS_COLOURED;
- goto done;
}
- }
+ } break;
default:
phpdbg_error(
"set colors used incorrectly: set colors <on|off>");
}
-done:
return SUCCESS;
} /* }}} */
#endif
PHPDBG_SET(oplog) /* {{{ */
{
- switch (param->type) {
- case EMPTY_PARAM:
- phpdbg_notice(
- "Oplog %s", PHPDBG_G(oplog) ? "enabled" : "disabled");
- break;
-
- case NUMERIC_PARAM: switch (param->num) {
- case 1:
- phpdbg_error(
- "An output file must be provided to enable oplog");
- break;
-
- case 0: {
- if (PHPDBG_G(oplog)) {
- phpdbg_notice("Disabling oplog");
- fclose(
- PHPDBG_G(oplog));
- } else {
- phpdbg_error("Oplog is not enabled!");
- }
- } break;
- } break;
-
+ if (!param || param->type == EMPTY_PARAM) {
+ phpdbg_notice("Oplog %s", PHPDBG_G(oplog) ? "enabled" : "disabled");
+ } else switch (param->type) {
case STR_PARAM: {
/* open oplog */
FILE *old = PHPDBG_G(oplog);
@@ -216,3 +192,19 @@ PHPDBG_SET(oplog) /* {{{ */
return SUCCESS;
} /* }}} */
+PHPDBG_SET(quiet) /* {{{ */
+{
+ if (!param || param->type == EMPTY_PARAM) {
+ phpdbg_writeln("Quietness %s",
+ PHPDBG_G(flags) & PHPDBG_IS_QUIET ? "on" : "off");
+ } else switch (param->type) {
+ case NUMERIC_PARAM: {
+ if (param->num) {
+ PHPDBG_G(flags) |= PHPDBG_IS_QUIET;
+ } else PHPDBG_G(flags) &= ~PHPDBG_IS_QUIET;
+ } break;
+ }
+
+ return SUCCESS;
+} /* }}} */
+
diff --git a/phpdbg_set.h b/phpdbg_set.h
index ddc3876f5d..4d90aac5b2 100644
--- a/phpdbg_set.h
+++ b/phpdbg_set.h
@@ -32,6 +32,8 @@ PHPDBG_SET(colors);
#endif
PHPDBG_SET(oplog);
PHPDBG_SET(break);
+PHPDBG_SET(breaks);
+PHPDBG_SET(quiet);
extern const phpdbg_command_t phpdbg_set_commands[];