]> granicus.if.org Git - php/commitdiff
trim breaking commands
authorkrakjoe <joe.watkins@live.co.uk>
Fri, 21 Feb 2014 16:18:46 +0000 (16:18 +0000)
committerkrakjoe <joe.watkins@live.co.uk>
Fri, 21 Feb 2014 16:18:46 +0000 (16:18 +0000)
13 files changed:
dev/phpdbg_lexer.l
dev/phpdbg_parser.y
phpdbg.c
phpdbg_break.c
phpdbg_break.h
phpdbg_cmd.c
phpdbg_cmd.h
phpdbg_help.c
phpdbg_lexer.c
phpdbg_lexer.h
phpdbg_parser.c
phpdbg_parser.h
phpdbg_prompt.c

index 52d1d4480269171875a7bba04eba9434f0e4703b..ae8eeb78319c8da73f26c33ca1670aa0c6b4c5ea 100644 (file)
@@ -35,8 +35,9 @@ T_IF                          ?i:"if"
 
 WS                     [ \r\n\t]+
 DIGITS                         [0-9\.]+
-ID                                     [^ \r\n\t:#]+
-OPLINE                         0x[a-fA-F0-9]+
+ID                                     [^ \r\n\t:#~]+
+ADDR                           0x[a-fA-F0-9]+
+OPCODE                         ZEND_([A-Z])+
 LITERAL                                \"(\\.|[^\\"])*\"
 INPUT                          [^\n]+
 %%
@@ -45,7 +46,7 @@ INPUT                         [^\n]+
        [#]{1}          { return T_POUND;  }
        [:]{2}          { return T_DCOLON; }
        [:]{1}          { return T_COLON;  }
-       
+       [~]{1}          { return T_SQUIGGLE; }
        {T_EVAL}                {
                BEGIN(RAW);
                phpdbg_init_param(yylval, EMPTY_PARAM);
@@ -76,10 +77,16 @@ INPUT                               [^\n]+
                yylval->num = atoi(yytext);
                return T_DIGITS;
        }
-       {OPLINE}                {
+       {ADDR}          {
                phpdbg_init_param(yylval, ADDR_PARAM);
                yylval->addr = strtoul(yytext, NULL, 10);
-               return T_OPLINE; 
+               return T_ADDR; 
+       }
+       {OPCODE}        {
+               phpdbg_init_param(yylval, OP_PARAM);
+               yylval->str = strndup(yytext, yyleng);
+               yylval->len = yyleng;
+               return T_OPCODE;
        }
        {LITERAL}               {
                phpdbg_init_param(yylval, STR_PARAM);
index 842f6a25d84ee5c0a6547b3077ced4e16b5cf91f..a811ba870db6ae6e0894e04443c71fc6e86370f8 100644 (file)
@@ -57,13 +57,15 @@ typedef void* yyscan_t;
 %token T_TRUTHY                "truthy (true, on, yes or enabled)"
 %token T_FALSY         "falsy (false, off, no or disabled)"
 %token T_STRING                "string (some input, perhaps)"
+%token T_SQUIGGLE      "~ (squiggle)"
 %token T_COLON         ": (colon)"
 %token T_DCOLON                ":: (double colon)"
 %token T_POUND         "# (pound sign)"
 
 %token T_DIGITS                                "digits (numbers)"
 %token T_LITERAL                       "literal (string)"
-%token T_OPLINE                                "opline"
+%token T_ADDR                          "address"
+%token T_OPCODE                                "opcode"
 %token T_ID                                    "identifier (command or function name)"
 %token T_INPUT                         "input (input string or data)"
 %token T_UNEXPECTED            "input"
@@ -80,7 +82,11 @@ parameters
        ;
 
 parameter
-       : T_ID T_COLON T_DIGITS                                 {       
+       : T_SQUIGGLE T_DIGITS                                   {
+               $$.type = OPLINE_PARAM;
+               $$.num = $2.num; 
+       }
+       | T_ID T_COLON T_DIGITS                                 {       
                $$.type = FILE_PARAM;
                $$.file.name = $1.str;
                $$.file.line = $3.num;
@@ -117,7 +123,8 @@ parameter
                $$.str = $2.str;
                $$.len = $2.len;
        }
-       | T_OPLINE                                                              { $$ = $1; }
+       | T_OPCODE                                                              { $$ = $1; }
+       | T_ADDR                                                                { $$ = $1; }
        | T_LITERAL                                                             { $$ = $1; }
        | T_TRUTHY                                                              { $$ = $1; }
        | T_FALSY                                                               { $$ = $1; }
index 0b748f0e85e2a4bf4030239d4abc8136f511984d..b08b09ff989a3493d2fdc780d26e04da009cea01 100644 (file)
--- a/phpdbg.c
+++ b/phpdbg.c
@@ -268,28 +268,7 @@ static PHP_FUNCTION(phpdbg_break)
                }
 
                phpdbg_parse_param(expr, expr_len, &param TSRMLS_CC);
-
-               switch (type) {
-                       case METHOD_PARAM:
-                               phpdbg_do_break_method(&param TSRMLS_CC);
-                               break;
-
-                       case FILE_PARAM:
-                               phpdbg_do_break_file(&param TSRMLS_CC);
-                               break;
-
-                       case NUMERIC_PARAM:
-                               phpdbg_do_break_lineno(&param TSRMLS_CC);
-                               break;
-
-                       case STR_PARAM:
-                               phpdbg_do_break_func(&param TSRMLS_CC);
-                               break;
-
-                       default: zend_error(
-                                                        E_WARNING, "unrecognized parameter type %ld", type);
-               }
-
+               phpdbg_do_break(&param TSRMLS_CC);
                phpdbg_clear_param(&param TSRMLS_CC);
 
        } else if (EG(current_execute_data) && EG(active_op_array)) {
index 92b4e2eb5f29028c8b7d7701504c45f94802e939..b83bdffe3436a157e9f5825cdcaf729c7606de4a 100644 (file)
@@ -35,64 +35,15 @@ ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
  * Commands
  */
 const phpdbg_command_t phpdbg_break_commands[] = {
-       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(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_BREAK_COMMAND_D(address,    "specify breakpoint by address",                          'a', break_address, NULL, "f"),
+       PHPDBG_BREAK_COMMAND_D(at,         "specify breakpoint by location and condition",           'A', break_at,      NULL, "*c"),
+       PHPDBG_BREAK_COMMAND_D(del,        "delete breakpoint by identifier number",                 'd', break_del,     NULL, "n"),
        PHPDBG_END_COMMAND
 };
 
-PHPDBG_BREAK(file) /* {{{ */
-{
-       switch (param->type) {
-               case FILE_PARAM:
-                       phpdbg_set_breakpoint_file(param->file.name, param->file.line TSRMLS_CC);
-                       break;
-
-               phpdbg_default_switch_case();
-       }
-
-       return SUCCESS;
-} /* }}} */
-
-PHPDBG_BREAK(method) /* {{{ */
-{
-       switch (param->type) {
-               case METHOD_PARAM:
-                       phpdbg_set_breakpoint_method(param->method.class, param->method.name TSRMLS_CC);
-                       break;
-
-               phpdbg_default_switch_case();
-       }
-       
-       return SUCCESS;
-} /* }}} */
-
 PHPDBG_BREAK(address) /* {{{ */
 {
-       switch (param->type) {
-               case ADDR_PARAM:
-                       phpdbg_set_breakpoint_opline(param->addr TSRMLS_CC);
-                       break;
-
-               case NUMERIC_METHOD_PARAM:
-                       phpdbg_set_breakpoint_method_opline(param->method.class, param->method.name, param->num TSRMLS_CC);
-                       break;
-
-               case NUMERIC_FUNCTION_PARAM:
-                       phpdbg_set_breakpoint_function_opline(param->str, param->num TSRMLS_CC);
-                       break;                  
-
-               case FILE_PARAM:
-                       phpdbg_set_breakpoint_file_opline(param->file.name, param->file.line TSRMLS_CC);
-                       break;
-
-               phpdbg_default_switch_case();
-       }
+       phpdbg_set_breakpoint_file_opline(param->file.name, param->file.line TSRMLS_CC);
 
        return SUCCESS;
 } /* }}} */
@@ -104,58 +55,9 @@ PHPDBG_BREAK(at) /* {{{ */
        return SUCCESS;
 } /* }}} */
 
-PHPDBG_BREAK(lineno) /* {{{ */
-{
-       switch (param->type) {
-               case NUMERIC_PARAM: {
-                       if (PHPDBG_G(exec)) {
-                               phpdbg_set_breakpoint_file(phpdbg_current_file(TSRMLS_C), param->num TSRMLS_CC);
-                       } else {
-                               phpdbg_error("Execution context not set!");
-                       }
-               } break;
-
-               phpdbg_default_switch_case();
-       }
-
-       return SUCCESS;
-} /* }}} */
-
-PHPDBG_BREAK(func) /* {{{ */
-{
-       switch (param->type) {
-               case STR_PARAM:
-                       phpdbg_set_breakpoint_symbol(param->str, param->len TSRMLS_CC);
-                       break;
-
-               phpdbg_default_switch_case();
-       }
-
-       return SUCCESS;
-} /* }}} */
-
-PHPDBG_BREAK(op) /* {{{ */
-{
-       switch (param->type) {
-               case STR_PARAM:
-                       phpdbg_set_breakpoint_opcode(param->str, param->len TSRMLS_CC);
-                       break;
-
-               phpdbg_default_switch_case();
-       }
-
-       return SUCCESS;
-} /* }}} */
-
 PHPDBG_BREAK(del) /* {{{ */
 {
-       switch (param->type) {
-               case NUMERIC_PARAM: {
-                       phpdbg_delete_breakpoint(param->num TSRMLS_CC);
-               } break;
-
-               phpdbg_default_switch_case();
-       }
+       phpdbg_delete_breakpoint(param->num TSRMLS_CC);
 
        return SUCCESS;
 } /* }}} */
index d356fa0d0ed9954807953ef20486aa018fc4b0db..50d855026c96860513d641cc99007042b8261397 100644 (file)
 /**
  * Printer Forward Declarations
  */
-PHPDBG_BREAK(file);
-PHPDBG_BREAK(func);
-PHPDBG_BREAK(method);
 PHPDBG_BREAK(address);
 PHPDBG_BREAK(at);
-PHPDBG_BREAK(op);
-PHPDBG_BREAK(lineno);
 PHPDBG_BREAK(del);
 
 extern const phpdbg_command_t phpdbg_break_commands[];
index 4e6ef048b8259281de4160ba32bbaff4b458f0c8..3974edb8d10b893e75291bbba67709ef957ff4ac 100644 (file)
@@ -442,6 +442,14 @@ PHPDBG_API void phpdbg_param_debug(const phpdbg_param_t *param, const char *msg)
                                fprintf(stderr, "%s COND_PARAM(%s=%lu)\n", msg, param->str, param->len);
                        break;
                        
+                       case OP_PARAM:
+                               fprintf(stderr, "%s OP_PARAM(%s=%lu)\n", msg, param->str, param->len);
+                       break;
+                       
+                       case OPLINE_PARAM:
+                               fprintf(stderr, "%s OPLINE_PARAM(%ld)\n", msg, param->num);
+                       break;
+                       
                        default: {
                                /* not yet */
                        }
@@ -571,6 +579,8 @@ PHPDBG_API int phpdbg_stack_verify(const phpdbg_command_t *command, phpdbg_param
                                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 'o': verify_arg("opcode", top, OP_PARAM); break;
+                               case 'O': verify_arg("opline", top, OPLINE_PARAM); break;
                                case 'b': verify_arg("boolean", top, NUMERIC_PARAM); break;
                                
                                case '*': { /* do nothing */ } break;
index 2c0ecb4540fea1b4172f5592dfd59a7908691199..d6cd19dfc1061db01beddd8c7dcf8cec9638a253 100644 (file)
@@ -43,6 +43,8 @@ typedef enum {
        EVAL_PARAM,
        SHELL_PARAM,
        COND_PARAM,
+       OP_PARAM,
+       OPLINE_PARAM,
        ORIG_PARAM
 } phpdbg_param_type;
 
index 115cf2dd3123f122fad0bd53959f0989985a70bd..ae37f9b720bafa73b60101763faa3932421f3c90 100644 (file)
@@ -501,63 +501,48 @@ phpdbg_help_text_t phpdbg_help_text[] = {
 "types:" CR CR
 
 "  **Target**   **Alias** **Purpose**" CR
-"  **file**     **F**     specify breakpoint by file:line" CR
-"  **lineno**   **l**     specify breakpoint by line of currently executing file" CR
-"  **func**     **f**     specify breakpoint by global function name" CR
-"  **method**   **m**     specify breakpoint by class::method" CR
 "  **address**  **a**     specify breakpoint by address" CR
-"  **op**       **O**     specify breakpoint by opcode" CR
 "  **at**       **A**     specify breakpoint by location and condition" CR
 "  **del**      **d**     delete breakpoint by breakpoint identifier number" CR CR
 
-"The syntax of the target argument is dependent on the target type and in the case of address, "
-"file, func, line and method targets the target keyword or alias is optional and can be omitted." CR CR
-
-"**Break at** takes two arguments. The first is any valid target as per the file, lineno, func "
-"and address types.  The second is a valid PHP expression which will trigger the break in "
+"**Break at** takes two arguments. The first is any valid target. The second "
+"is a valid PHP expression which will trigger the break in "
 "execution, if evaluated as true in a boolean context at the specified target." CR CR
 
 "Note that breakpoints can also be disabled and re-enabled by the **set break** command." CR CR
 
 "**Examples**" CR CR
-"    $P break file test.php:100" CR
-"    $P b F test.php:100" CR
+"    $P break test.php:100" CR
 "    $P b test.php:100" CR
 "    Break execution at line 100 of test.php" CR CR
 
-"    $P break lineno 200" CR
-"    $P b l 200" CR
+"    $P break 200" CR
 "    $P b 200" CR
 "    Break execution at line 200 of the currently PHP script file" CR CR
 
-"    $P break func \\\\mynamespace\\\\my_function" CR
-"    $P b f \\\\mynamespace\\\\my_function" CR
+"    $P break \\\\mynamespace\\\\my_function" CR
 "    $P b \\\\mynamespace\\\\my_function" CR
 "    Break execution on entry to \\\\mynamespace\\\\my_function" CR CR
 
-"    $P break method classX::method" CR
-"    $P b m classX::method" CR
+"    $P break classX::method" CR
 "    $P b classX::method" CR
 "    Break execution on entry to classX::method" CR CR
 
-"    $P break address 0x7ff68f570e08" CR
-"    $P b a 0x7ff68f570e08" CR
+"    $P break 0x7ff68f570e08" CR
 "    $P b 0x7ff68f570e08" CR
 "    Break at the opline at the address 0x7ff68f570e08" CR CR
 
-"    $P break address my_function#14" CR
-"    $P b a my_function#14" CR
+"    $P break my_function#14" CR
 "    $P b my_function#14" CR
 "    Break at the opline #14 of the function my_function" CR CR
 
-"    $P break address \\\\my\\\\class::method#2" CR
-"    $P b a \\\\my\\\\class::method#2" CR
+"    $P break \\\\my\\\\class::method#2" CR
 "    $P b \\\\my\\\\class::method#2" CR
 "    Break at the opline #2 of the method \\\\my\\\\class::method" CR CR
 
-"    $P break address test.php#3" CR
-"    $P b a test.php#3" CR
-"    Break at the opline #3 of test.php" CR CR
+"    $P break address test.php:3" CR
+"    $P b a test.php:3" CR
+"    Break at the 3rd opline in test.php" CR CR
 
 "    $P break if $cnt > 10" CR
 "    $P b if $cnt > 10" CR
@@ -569,8 +554,8 @@ phpdbg_help_text_t phpdbg_help_text[] = {
 "    $P break at test.php:20 if !isset($x)" CR
 "    Break at every opcode on line 20 of test.php when the condition evaluates to true" CR CR
 
-"    $P break op ZEND_ADD" CR
-"    $P b ZEND_ADD" CR
+"    $P break ZEND_ADD" CR
+"    $P b ZEND_ADD" CR
 "    Break on any occurence of the opcode ZEND_ADD" CR CR
 
 "    $P break del 2" CR
index 76ef43136ec2d9dbddf1b09a922893654aea8fd0..590d0825d7ab8fcf9aee6ed82e53bdc7e2cbcf93 100644 (file)
@@ -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 15
-#define YY_END_OF_BUFFER 16
+#define YY_NUM_RULES 17
+#define YY_END_OF_BUFFER 18
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -358,16 +358,16 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[73] =
+static yyconst flex_int16_t yy_accept[80] =
     {   0,
-        0,    0,    0,    0,   16,   12,   14,   12,    1,    9,
-        9,    3,   12,   12,   12,   12,   12,   12,   12,   12,
-       12,   13,   13,   12,   14,   12,    0,   11,   12,    9,
-       12,    2,   12,   12,   12,   12,    6,    8,   12,    7,
-       12,   12,   12,   13,   13,   11,    0,   10,   12,   12,
-       12,   12,    8,   12,   12,    7,   12,   12,    4,   12,
-       12,    7,   12,   12,    8,    5,   12,   12,   12,    7,
-        8,    0
+        0,    0,    0,    0,   18,   14,   16,   14,    1,   10,
+       10,    3,   14,   14,   14,   14,   14,   14,   14,   14,
+       14,   14,    4,   15,   15,   14,   16,   14,    0,   13,
+       14,   10,   14,    2,   14,   14,   14,   14,    7,    9,
+       14,    8,   14,   14,   14,   14,   15,   15,   13,    0,
+       11,   14,   14,   14,   14,    9,   14,   14,    8,   14,
+       14,   14,    5,   14,   14,    8,   14,   14,   14,    9,
+        6,   14,   14,   14,   12,   14,    8,    9,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -379,13 +379,13 @@ static yyconst flex_int32_t yy_ec[256] =
         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,
+       16,   17,   18,   16,   16,   19,   16,   20,   21,   16,
+       16,   22,   23,   24,   25,   26,   16,   16,   27,   28,
+        1,   29,    1,    1,   30,    1,   31,   32,   33,   34,
 
-       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,
+       35,   36,    1,   37,   38,    1,    1,   39,    1,   40,
+       41,    1,    1,   42,   43,   44,   45,   46,    1,   47,
+       48,    1,    1,    1,    1,   49,    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,
@@ -402,97 +402,113 @@ static yyconst flex_int32_t yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[45] =
+static yyconst flex_int32_t yy_meta[50] =
     {   0,
         1,    2,    3,    1,    2,    1,    1,    1,    2,    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,    2
     } ;
 
-static yyconst flex_int16_t yy_base[78] =
+static yyconst flex_int16_t yy_base[85] =
     {   0,
-        0,    0,   43,   45,  135,    0,   47,   49,  187,   49,
-       53,   96,   45,   44,   54,   51,   47,   53,   54,   50,
-       59,    0,   72,    0,   75,   89,   77,    0,   97,  101,
-      110,  187,   73,   87,   91,   92,    0,    0,   96,    0,
-       99,   90,  104,    0,  130,  187,  100,    0,  119,  123,
-      118,  115,    0,  126,  131,    0,  135,  130,    0,  135,
-      132,    0,  133,  141,    0,    0,  142,  144,  145,    0,
-        0,  187,  175,   64,  178,  181,  183
+        0,    0,   48,   50,  139,    0,   52,   54,  246,   54,
+       58,  129,   49,   48,   59,   55,   51,   60,   56,   55,
+       64,  123,  246,    0,   79,    0,   82,  104,   72,    0,
+      109,  109,  152,  246,   79,   79,   88,   85,    0,    0,
+      105,    0,  107,   98,  102,  110,    0,  124,  246,   92,
+        0,  118,  118,  112,  109,    0,  115,  121,    0,   73,
+      125,  129,    0,  126,  136,    0,   49,  150,  156,    0,
+        0,  182,  176,  199,    0,  200,    0,    0,  246,  234,
+       70,  237,  240,  242
     } ;
 
-static yyconst flex_int16_t yy_def[78] =
+static yyconst flex_int16_t yy_def[85] =
     {   0,
-       72,    1,   73,   73,   72,   74,   72,   75,   72,   74,
-       74,   72,   74,   74,   74,   74,   74,   74,   74,   74,
-       74,   76,   76,   74,   72,   75,   77,   74,   75,   74,
-       74,   72,   74,   74,   74,   74,   74,   74,   74,   74,
-       74,   74,   74,   76,   76,   72,   77,   31,   74,   74,
-       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
-       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
-       74,    0,   72,   72,   72,   72,   72
+       79,    1,   80,   80,   79,   81,   79,   82,   79,   81,
+       81,   79,   81,   81,   81,   81,   81,   81,   81,   81,
+       81,   81,   79,   83,   83,   81,   79,   82,   84,   81,
+       82,   81,   81,   79,   81,   81,   81,   81,   81,   81,
+       81,   81,   81,   81,   81,   81,   83,   83,   79,   84,
+       33,   81,   81,   81,   81,   81,   81,   81,   81,   81,
+       81,   81,   81,   81,   81,   81,   81,   81,   81,   81,
+       81,   81,   81,   81,   72,   81,   81,   81,    0,   79,
+       79,   79,   79,   79
     } ;
 
-static yyconst flex_int16_t yy_nxt[232] =
+static yyconst flex_int16_t yy_nxt[296] =
     {   0,
         6,    7,    7,    8,    9,   10,   11,   10,   12,    6,
-        6,    6,   13,   14,   15,    6,   16,    6,   17,   18,
-        6,   19,   20,    6,    6,   21,    6,    6,    6,   13,
-       14,   15,    6,   16,    6,   17,   18,    6,   19,   20,
-        6,    6,    6,   21,   23,    7,   23,    7,   25,   25,
-       27,   27,   28,   27,   30,   30,   30,   27,   30,   30,
-       30,   33,   34,   36,   24,   37,   38,   39,   35,   41,
-       42,   40,   43,   45,   25,   29,   25,   25,   33,   34,
-       46,   36,   37,   38,   39,   35,   41,   42,   40,   43,
-       27,   27,   28,   27,   49,   31,   50,   27,   27,   72,
-
-       51,   27,   72,   47,   32,   27,   30,   30,   30,   52,
-       53,   49,   54,   55,   50,   29,   48,   48,   51,   48,
-       48,   48,   48,   48,   48,   56,   52,   53,   57,   54,
-       55,   45,   25,   58,   72,   59,   60,   48,   48,   48,
-       48,   48,   56,   61,   62,   63,   57,   64,   65,   66,
-       67,   58,   59,   60,   68,   69,   70,   71,   72,   72,
-       61,   62,   72,   63,   64,   65,   66,   67,   72,   72,
-       72,   68,   69,   70,   71,   22,   22,   22,   26,   26,
-       26,   44,   44,   27,   27,   27,    5,   72,   72,   72,
-       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
+        6,    6,   13,   14,   15,    6,    6,   16,    6,   17,
+       18,    6,   19,   20,    6,    6,   21,   22,    6,    6,
+        6,    6,    6,   13,   14,   15,    6,   16,    6,   17,
+       18,    6,   19,   20,    6,    6,    6,   21,   23,   25,
+        7,   25,    7,   27,   27,   29,   29,   30,   29,   32,
+       32,   32,   29,   32,   32,   32,   35,   36,   38,   39,
+       26,   40,   43,   37,   41,   49,   44,   45,   72,   42,
+       48,   27,   31,   27,   27,   67,   35,   36,   53,   38,
+       39,   40,   43,   37,   79,   41,   44,   54,   45,   42,
+
+       50,   52,   29,   55,   33,   29,   29,   30,   29,   53,
+       29,   79,   29,   29,   32,   32,   32,   29,   54,   56,
+       57,   52,   58,   55,   59,   48,   27,   61,   62,   60,
+       63,   64,   31,   65,   66,   68,   46,   34,   79,   70,
+       56,   57,   58,   79,   59,   79,   79,   69,   61,   62,
+       63,   64,   29,   65,   71,   66,   68,   29,   51,   51,
+       70,   51,   51,   51,   51,   51,   51,   69,   73,   74,
+       79,   79,   79,   79,   71,   79,   79,   79,   79,   79,
+       79,   79,   51,   51,   51,   51,   51,   51,   73,   76,
+       74,   75,   75,   75,   75,   75,   75,   75,   75,   75,
+
+       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
+       76,   77,   78,   79,   79,   79,   79,   79,   79,   79,
+       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
+       79,   79,   77,   78,   24,   24,   24,   28,   28,   28,
+       47,   47,   29,   29,   29,    5,   79,   79,   79,   79,
+       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
+       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
+       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
+       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
+       79,   79,   79,   79,   79
 
-       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
-       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
-       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
-       72
     } ;
 
-static yyconst flex_int16_t yy_chk[232] =
+static yyconst flex_int16_t yy_chk[296] =
     {   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,    3,    3,    4,    4,    7,    7,
-        8,    8,    8,    8,   10,   10,   10,    8,   11,   11,
-       11,   13,   14,   15,   74,   16,   17,   18,   14,   19,
-       20,   18,   21,   23,   23,    8,   25,   25,   13,   14,
-       27,   15,   16,   17,   18,   14,   19,   20,   18,   21,
-       26,   26,   26,   26,   33,   11,   34,   26,   29,   29,
-
-       35,   29,   47,   27,   12,   29,   30,   30,   30,   36,
-       39,   33,   41,   42,   34,   26,   31,   31,   35,   31,
-       31,   31,   31,   31,   31,   43,   36,   39,   49,   41,
-       42,   45,   45,   50,    5,   51,   52,   31,   31,   31,
-       31,   31,   43,   54,   55,   57,   49,   58,   60,   61,
-       63,   50,   51,   52,   64,   67,   68,   69,    0,    0,
-       54,   55,    0,   57,   58,   60,   61,   63,    0,    0,
-        0,   64,   67,   68,   69,   73,   73,   73,   75,   75,
-       75,   76,   76,   77,   77,   77,   72,   72,   72,   72,
-       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    3,
+        3,    4,    4,    7,    7,    8,    8,    8,    8,   10,
+       10,   10,    8,   11,   11,   11,   13,   14,   15,   16,
+       81,   17,   19,   14,   18,   29,   20,   21,   67,   18,
+       25,   25,    8,   27,   27,   60,   13,   14,   36,   15,
+       16,   17,   19,   14,   50,   18,   20,   37,   21,   18,
+
+       29,   35,    8,   38,   11,   28,   28,   28,   28,   36,
+       31,   31,   28,   31,   32,   32,   32,   31,   37,   41,
+       43,   35,   44,   38,   45,   48,   48,   52,   53,   46,
+       54,   55,   28,   57,   58,   61,   22,   12,    5,   64,
+       41,   43,   44,    0,   45,    0,    0,   62,   52,   53,
+       54,   55,   28,   57,   65,   58,   61,   31,   33,   33,
+       64,   33,   33,   33,   33,   33,   33,   62,   68,   69,
+        0,    0,    0,    0,   65,    0,    0,    0,    0,    0,
+        0,    0,   33,   33,   33,   33,   33,   33,   68,   73,
+       69,   72,   72,   72,   72,   72,   72,   72,   72,   72,
 
        72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
-       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
-       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
-       72
+       73,   74,   76,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   74,   76,   80,   80,   80,   82,   82,   82,
+       83,   83,   84,   84,   84,   79,   79,   79,   79,   79,
+       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
+       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
+       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
+       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
+       79,   79,   79,   79,   79
+
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -518,7 +534,7 @@ static yyconst flex_int16_t yy_chk[232] =
 #include <string.h>
 
 #define YY_NO_UNISTD_H 1
-#line 522 "sapi/phpdbg/phpdbg_lexer.c"
+#line 538 "sapi/phpdbg/phpdbg_lexer.c"
 
 #define INITIAL 0
 #define RAW 1
@@ -756,9 +772,9 @@ YY_DECL
        register int yy_act;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
-#line 42 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 43 "sapi/phpdbg/dev/phpdbg_lexer.l"
 
-#line 762 "sapi/phpdbg/phpdbg_lexer.c"
+#line 778 "sapi/phpdbg/phpdbg_lexer.c"
 
     yylval = yylval_param;
 
@@ -813,13 +829,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 >= 73 )
+                               if ( yy_current_state >= 80 )
                                        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 != 72 );
+               while ( yy_current_state != 79 );
                yy_cp = yyg->yy_last_accepting_cpos;
                yy_current_state = yyg->yy_last_accepting_state;
 
@@ -841,86 +857,101 @@ do_action:       /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 45 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 46 "sapi/phpdbg/dev/phpdbg_lexer.l"
 { return T_POUND;  }
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 46 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 47 "sapi/phpdbg/dev/phpdbg_lexer.l"
 { return T_DCOLON; }
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 47 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 48 "sapi/phpdbg/dev/phpdbg_lexer.l"
 { return T_COLON;  }
        YY_BREAK
 case 4:
 YY_RULE_SETUP
 #line 49 "sapi/phpdbg/dev/phpdbg_lexer.l"
+{ return T_SQUIGGLE; }
+       YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 50 "sapi/phpdbg/dev/phpdbg_lexer.l"
 {
                BEGIN(RAW);
                phpdbg_init_param(yylval, EMPTY_PARAM);
                return T_EVAL;
        }
        YY_BREAK
-case 5:
+case 6:
 YY_RULE_SETUP
-#line 54 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 55 "sapi/phpdbg/dev/phpdbg_lexer.l"
 {
                BEGIN(RAW);
                phpdbg_init_param(yylval, EMPTY_PARAM);
                return T_SHELL;
        }
        YY_BREAK
-case 6:
+case 7:
 YY_RULE_SETUP
-#line 59 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 60 "sapi/phpdbg/dev/phpdbg_lexer.l"
 {
                BEGIN(RAW);
                phpdbg_init_param(yylval, EMPTY_PARAM);
                return T_IF;
        }
        YY_BREAK
-case 7:
+case 8:
 YY_RULE_SETUP
-#line 64 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 65 "sapi/phpdbg/dev/phpdbg_lexer.l"
 {
                phpdbg_init_param(yylval, NUMERIC_PARAM);
                yylval->num = 1;                
                return T_TRUTHY;
        }
        YY_BREAK
-case 8:
+case 9:
 YY_RULE_SETUP
-#line 69 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 70 "sapi/phpdbg/dev/phpdbg_lexer.l"
 {
                phpdbg_init_param(yylval, NUMERIC_PARAM);
                yylval->num = 0;
                return T_FALSY;
        }
        YY_BREAK
-case 9:
+case 10:
 YY_RULE_SETUP
-#line 74 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 75 "sapi/phpdbg/dev/phpdbg_lexer.l"
 {
                phpdbg_init_param(yylval, NUMERIC_PARAM);
                yylval->num = atoi(yytext);
                return T_DIGITS;
        }
        YY_BREAK
-case 10:
+case 11:
 YY_RULE_SETUP
-#line 79 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 80 "sapi/phpdbg/dev/phpdbg_lexer.l"
 {
                phpdbg_init_param(yylval, ADDR_PARAM);
                yylval->addr = strtoul(yytext, NULL, 10);
-               return T_OPLINE
+               return T_ADDR
        }
        YY_BREAK
-case 11:
-/* rule 11 can match eol */
+case 12:
 YY_RULE_SETUP
-#line 84 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 85 "sapi/phpdbg/dev/phpdbg_lexer.l"
+{
+               phpdbg_init_param(yylval, OP_PARAM);
+               yylval->str = strndup(yytext, yyleng);
+               yylval->len = yyleng;
+               return T_OPCODE;
+       }
+       YY_BREAK
+case 13:
+/* rule 13 can match eol */
+YY_RULE_SETUP
+#line 91 "sapi/phpdbg/dev/phpdbg_lexer.l"
 {
                phpdbg_init_param(yylval, STR_PARAM);
                yylval->str = strndup(yytext, yyleng);
@@ -928,9 +959,9 @@ YY_RULE_SETUP
                return T_LITERAL; 
        }
        YY_BREAK
-case 12:
+case 14:
 YY_RULE_SETUP
-#line 90 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 97 "sapi/phpdbg/dev/phpdbg_lexer.l"
 {
                phpdbg_init_param(yylval, STR_PARAM);
                yylval->str = strndup(yytext, yyleng);
@@ -939,9 +970,9 @@ YY_RULE_SETUP
        }
        YY_BREAK
 
-case 13:
+case 15:
 YY_RULE_SETUP
-#line 97 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 104 "sapi/phpdbg/dev/phpdbg_lexer.l"
 {
        phpdbg_init_param(yylval, STR_PARAM);
        yylval->str = strndup(yytext, yyleng);
@@ -950,18 +981,18 @@ YY_RULE_SETUP
        return T_INPUT;
 }
        YY_BREAK
-case 14:
-/* rule 14 can match eol */
+case 16:
+/* rule 16 can match eol */
 YY_RULE_SETUP
-#line 104 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 111 "sapi/phpdbg/dev/phpdbg_lexer.l"
 { /* ignore whitespace */ }
        YY_BREAK
-case 15:
+case 17:
 YY_RULE_SETUP
-#line 105 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 112 "sapi/phpdbg/dev/phpdbg_lexer.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
        YY_BREAK
-#line 965 "sapi/phpdbg/phpdbg_lexer.c"
+#line 996 "sapi/phpdbg/phpdbg_lexer.c"
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(RAW):
        yyterminate();
@@ -1257,7 +1288,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 >= 73 )
+                       if ( yy_current_state >= 80 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1286,11 +1317,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 >= 73 )
+               if ( yy_current_state >= 80 )
                        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 == 72);
+       yy_is_jam = (yy_current_state == 79);
 
        return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2126,7 +2157,7 @@ void yyfree (void * ptr , yyscan_t yyscanner)
 
 #define YYTABLES_NAME "yytables"
 
-#line 105 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 112 "sapi/phpdbg/dev/phpdbg_lexer.l"
 
 
 
index 6a799c655d333c2605c2e4e2984574f6c969fdd8..0395393613cfe3c21ce05d2872adba4d9271f51e 100644 (file)
@@ -338,7 +338,7 @@ extern int yylex \
 #undef YY_DECL
 #endif
 
-#line 105 "sapi/phpdbg/dev/phpdbg_lexer.l"
+#line 112 "sapi/phpdbg/dev/phpdbg_lexer.l"
 
 
 #line 345 "sapi/phpdbg/phpdbg_lexer.h"
index 099daa30e589914fdfe92a20e03ab4e2e2436922..c252c7ab9d789fd109a1baf379b71a35b7557160 100644 (file)
@@ -153,15 +153,17 @@ typedef void* yyscan_t;
      T_TRUTHY = 261,
      T_FALSY = 262,
      T_STRING = 263,
-     T_COLON = 264,
-     T_DCOLON = 265,
-     T_POUND = 266,
-     T_DIGITS = 267,
-     T_LITERAL = 268,
-     T_OPLINE = 269,
-     T_ID = 270,
-     T_INPUT = 271,
-     T_UNEXPECTED = 272
+     T_SQUIGGLE = 264,
+     T_COLON = 265,
+     T_DCOLON = 266,
+     T_POUND = 267,
+     T_DIGITS = 268,
+     T_LITERAL = 269,
+     T_ADDR = 270,
+     T_OPCODE = 271,
+     T_ID = 272,
+     T_INPUT = 273,
+     T_UNEXPECTED = 274
    };
 #endif
 
@@ -179,7 +181,7 @@ typedef int YYSTYPE;
 
 
 /* Line 343 of yacc.c  */
-#line 183 "sapi/phpdbg/phpdbg_parser.c"
+#line 185 "sapi/phpdbg/phpdbg_parser.c"
 
 #ifdef short
 # undef short
@@ -396,22 +398,22 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  19
+#define YYFINAL  22
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   22
+#define YYLAST   25
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  18
+#define YYNTOKENS  20
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  4
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  18
+#define YYNRULES  20
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  26
+#define YYNSTATES  29
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   272
+#define YYMAXUTOK   274
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -446,7 +448,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
+      15,    16,    17,    18,    19
 };
 
 #if YYDEBUG
@@ -454,25 +456,28 @@ static const yytype_uint8 yytranslate[] =
    YYRHS.  */
 static const yytype_uint8 yyprhs[] =
 {
-       0,     0,     3,     5,     6,     8,    11,    15,    19,    25,
-      29,    31,    33,    35,    37,    39,    41,    44,    47
+       0,     0,     3,     5,     6,     8,    11,    14,    18,    22,
+      28,    32,    35,    38,    41,    43,    45,    47,    49,    51,
+      53
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int8 yyrhs[] =
 {
-      19,     0,    -1,    20,    -1,    -1,    21,    -1,    20,    21,
-      -1,    15,     9,    12,    -1,    15,    10,    15,    -1,    15,
-      10,    15,    11,    12,    -1,    15,    11,    12,    -1,    14,
-      -1,    13,    -1,     6,    -1,     7,    -1,    12,    -1,    15,
-      -1,     5,    16,    -1,     3,    16,    -1,     4,    16,    -1
+      21,     0,    -1,    22,    -1,    -1,    23,    -1,    22,    23,
+      -1,     9,    13,    -1,    17,    10,    13,    -1,    17,    11,
+      17,    -1,    17,    11,    17,    12,    13,    -1,    17,    12,
+      13,    -1,     5,    18,    -1,     3,    18,    -1,     4,    18,
+      -1,    16,    -1,    15,    -1,    14,    -1,     6,    -1,     7,
+      -1,    13,    -1,    17,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint8 yyrline[] =
 {
-       0,    73,    73,    74,    78,    79,    83,    88,    93,    99,
-     104,   105,   106,   107,   108,   109,   110,   111,   112
+       0,    75,    75,    76,    80,    81,    85,    89,    94,    99,
+     105,   111,   116,   121,   126,   127,   128,   129,   130,   131,
+     132
 };
 #endif
 
@@ -484,9 +489,9 @@ static const char *const yytname[] =
   "$end", "error", "$undefined", "\"eval\"", "\"shell\"",
   "\"if (condition)\"", "\"truthy (true, on, yes or enabled)\"",
   "\"falsy (false, off, no or disabled)\"",
-  "\"string (some input, perhaps)\"", "\": (colon)\"",
+  "\"string (some input, perhaps)\"", "\"~ (squiggle)\"", "\": (colon)\"",
   "\":: (double colon)\"", "\"# (pound sign)\"", "\"digits (numbers)\"",
-  "\"literal (string)\"", "\"opline\"",
+  "\"literal (string)\"", "\"address\"", "\"opcode\"",
   "\"identifier (command or function name)\"",
   "\"input (input string or data)\"", "\"input\"", "$accept", "input",
   "parameters", "parameter", 0
@@ -499,22 +504,24 @@ static const char *const yytname[] =
 static const yytype_uint16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    18,    19,    19,    20,    20,    21,    21,    21,    21,
-      21,    21,    21,    21,    21,    21,    21,    21,    21
+       0,    20,    21,    21,    22,    22,    23,    23,    23,    23,
+      23,    23,    23,    23,    23,    23,    23,    23,    23,    23,
+      23
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
-       0,     2,     1,     0,     1,     2,     3,     3,     5,     3,
-       1,     1,     1,     1,     1,     1,     2,     2,     2
+       0,     2,     1,     0,     1,     2,     2,     3,     3,     5,
+       3,     2,     2,     2,     1,     1,     1,     1,     1,     1,
+       1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
@@ -522,31 +529,31 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       3,     0,     0,     0,    12,    13,    14,    11,    10,    15,
-       0,     2,     4,    17,    18,    16,     0,     0,     0,     1,
-       5,     6,     7,     9,     0,     8
+       3,     0,     0,     0,    17,    18,     0,    19,    16,    15,
+      14,    20,     0,     2,     4,    12,    13,    11,     6,     0,
+       0,     0,     1,     5,     7,     8,    10,     0,     9
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int8 yydefgoto[] =
 {
-      -1,    10,    11,    12
+      -1,    12,    13,    14
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -9
+#define YYPACT_NINF -14
 static const yytype_int8 yypact[] =
 {
-      -3,    -8,    -2,    -1,    -9,    -9,    -9,    -9,    -9,    -4,
-      13,    -3,    -9,    -9,    -9,    -9,     4,     2,     6,    -9,
-      -9,    -9,     8,    -9,     9,    -9
+      -3,   -13,   -11,   -10,   -14,   -14,    -4,   -14,   -14,   -14,
+     -14,     5,    18,    -3,   -14,   -14,   -14,   -14,   -14,     6,
+       3,     8,   -14,   -14,   -14,    10,   -14,    11,   -14
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int8 yypgoto[] =
 {
-      -9,    -9,    -9,    11
+     -14,   -14,   -14,    12
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -555,31 +562,31 @@ static const yytype_int8 yypgoto[] =
 #define YYTABLE_NINF -1
 static const yytype_uint8 yytable[] =
 {
-       1,     2,     3,     4,     5,    16,    17,    18,    13,     6,
-       7,     8,     9,    19,    14,    15,    21,    22,    23,    24,
-       0,    25,    20
+       1,     2,     3,     4,     5,    15,     6,    16,    17,    18,
+       7,     8,     9,    10,    11,    19,    20,    21,    22,    24,
+      25,    26,    27,     0,    28,    23
 };
 
 #define yypact_value_is_default(yystate) \
-  ((yystate) == (-9))
+  ((yystate) == (-14))
 
 #define yytable_value_is_error(yytable_value) \
   YYID (0)
 
 static const yytype_int8 yycheck[] =
 {
-       3,     4,     5,     6,     7,     9,    10,    11,    16,    12,
-      13,    14,    15,     0,    16,    16,    12,    15,    12,    11,
-      -1,    12,    11
+       3,     4,     5,     6,     7,    18,     9,    18,    18,    13,
+      13,    14,    15,    16,    17,    10,    11,    12,     0,    13,
+      17,    13,    12,    -1,    13,    13
 };
 
 /* 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,    12,    13,    14,    15,
-      19,    20,    21,    16,    16,    16,     9,    10,    11,     0,
-      21,    12,    15,    12,    11,    12
+       0,     3,     4,     5,     6,     7,     9,    13,    14,    15,
+      16,    17,    21,    22,    23,    18,    18,    18,    13,    10,
+      11,    12,     0,    23,    13,    17,    13,    12,    13
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1428,21 +1435,31 @@ yyreduce:
         case 4:
 
 /* Line 1806 of yacc.c  */
-#line 78 "sapi/phpdbg/dev/phpdbg_parser.y"
+#line 80 "sapi/phpdbg/dev/phpdbg_parser.y"
     { phpdbg_stack_push(stack, &(yyvsp[(1) - (1)])); }
     break;
 
   case 5:
 
 /* Line 1806 of yacc.c  */
-#line 79 "sapi/phpdbg/dev/phpdbg_parser.y"
+#line 81 "sapi/phpdbg/dev/phpdbg_parser.y"
     { phpdbg_stack_push(stack, &(yyvsp[(2) - (2)])); }
     break;
 
   case 6:
 
 /* Line 1806 of yacc.c  */
-#line 83 "sapi/phpdbg/dev/phpdbg_parser.y"
+#line 85 "sapi/phpdbg/dev/phpdbg_parser.y"
+    {
+               (yyval).type = OPLINE_PARAM;
+               (yyval).num = (yyvsp[(2) - (2)]).num; 
+       }
+    break;
+
+  case 7:
+
+/* Line 1806 of yacc.c  */
+#line 89 "sapi/phpdbg/dev/phpdbg_parser.y"
     {  
                (yyval).type = FILE_PARAM;
                (yyval).file.name = (yyvsp[(1) - (3)]).str;
@@ -1450,10 +1467,10 @@ yyreduce:
        }
     break;
 
-  case 7:
+  case 8:
 
 /* Line 1806 of yacc.c  */
-#line 88 "sapi/phpdbg/dev/phpdbg_parser.y"
+#line 94 "sapi/phpdbg/dev/phpdbg_parser.y"
     { 
                (yyval).type = METHOD_PARAM;
                (yyval).method.class = (yyvsp[(1) - (3)]).str;
@@ -1461,10 +1478,10 @@ yyreduce:
        }
     break;
 
-  case 8:
+  case 9:
 
 /* Line 1806 of yacc.c  */
-#line 93 "sapi/phpdbg/dev/phpdbg_parser.y"
+#line 99 "sapi/phpdbg/dev/phpdbg_parser.y"
     { 
                (yyval).type = NUMERIC_METHOD_PARAM;
                (yyval).method.class = (yyvsp[(1) - (5)]).str;
@@ -1473,84 +1490,104 @@ yyreduce:
        }
     break;
 
-  case 9:
+  case 10:
 
 /* Line 1806 of yacc.c  */
-#line 99 "sapi/phpdbg/dev/phpdbg_parser.y"
-    { 
+#line 105 "sapi/phpdbg/dev/phpdbg_parser.y"
+    {
                (yyval).type = NUMERIC_FUNCTION_PARAM;
                (yyval).str = (yyvsp[(1) - (3)]).str;
+               (yyval).len = (yyvsp[(1) - (3)]).len;
                (yyval).num = (yyvsp[(3) - (3)]).num; 
        }
     break;
 
-  case 10:
-
-/* Line 1806 of yacc.c  */
-#line 104 "sapi/phpdbg/dev/phpdbg_parser.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
-    break;
-
   case 11:
 
 /* Line 1806 of yacc.c  */
-#line 105 "sapi/phpdbg/dev/phpdbg_parser.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 111 "sapi/phpdbg/dev/phpdbg_parser.y"
+    { 
+               (yyval).type = COND_PARAM; 
+               (yyval).str = (yyvsp[(2) - (2)]).str;
+               (yyval).len = (yyvsp[(2) - (2)]).len;
+       }
     break;
 
   case 12:
 
 /* Line 1806 of yacc.c  */
-#line 106 "sapi/phpdbg/dev/phpdbg_parser.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 116 "sapi/phpdbg/dev/phpdbg_parser.y"
+    { 
+               (yyval).type = EVAL_PARAM; 
+               (yyval).str = (yyvsp[(2) - (2)]).str;
+               (yyval).len = (yyvsp[(2) - (2)]).len;
+       }
     break;
 
   case 13:
 
 /* Line 1806 of yacc.c  */
-#line 107 "sapi/phpdbg/dev/phpdbg_parser.y"
-    { (yyval) = (yyvsp[(1) - (1)]); }
+#line 121 "sapi/phpdbg/dev/phpdbg_parser.y"
+    {  
+               (yyval).type = SHELL_PARAM; 
+               (yyval).str = (yyvsp[(2) - (2)]).str;
+               (yyval).len = (yyvsp[(2) - (2)]).len;
+       }
     break;
 
   case 14:
 
 /* Line 1806 of yacc.c  */
-#line 108 "sapi/phpdbg/dev/phpdbg_parser.y"
+#line 126 "sapi/phpdbg/dev/phpdbg_parser.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 15:
 
 /* Line 1806 of yacc.c  */
-#line 109 "sapi/phpdbg/dev/phpdbg_parser.y"
+#line 127 "sapi/phpdbg/dev/phpdbg_parser.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 16:
 
 /* Line 1806 of yacc.c  */
-#line 110 "sapi/phpdbg/dev/phpdbg_parser.y"
-    { (yyval) = (yyvsp[(2) - (2)]); (yyval).type = COND_PARAM; }
+#line 128 "sapi/phpdbg/dev/phpdbg_parser.y"
+    { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 17:
 
 /* Line 1806 of yacc.c  */
-#line 111 "sapi/phpdbg/dev/phpdbg_parser.y"
-    { (yyval) = (yyvsp[(2) - (2)]); (yyval).type = EVAL_PARAM;  }
+#line 129 "sapi/phpdbg/dev/phpdbg_parser.y"
+    { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 18:
 
 /* Line 1806 of yacc.c  */
-#line 112 "sapi/phpdbg/dev/phpdbg_parser.y"
-    { (yyval) = (yyvsp[(2) - (2)]); (yyval).type = SHELL_PARAM; }
+#line 130 "sapi/phpdbg/dev/phpdbg_parser.y"
+    { (yyval) = (yyvsp[(1) - (1)]); }
+    break;
+
+  case 19:
+
+/* Line 1806 of yacc.c  */
+#line 131 "sapi/phpdbg/dev/phpdbg_parser.y"
+    { (yyval) = (yyvsp[(1) - (1)]); }
+    break;
+
+  case 20:
+
+/* Line 1806 of yacc.c  */
+#line 132 "sapi/phpdbg/dev/phpdbg_parser.y"
+    { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
 
 
 /* Line 1806 of yacc.c  */
-#line 1554 "sapi/phpdbg/phpdbg_parser.c"
+#line 1591 "sapi/phpdbg/phpdbg_parser.c"
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -1781,6 +1818,6 @@ yyreturn:
 
 
 /* Line 2067 of yacc.c  */
-#line 115 "sapi/phpdbg/dev/phpdbg_parser.y"
+#line 135 "sapi/phpdbg/dev/phpdbg_parser.y"
 
 
index d0ba3b13604f32675fbce49dfb06114dc36e53a5..ca9d8b08b3e9d73b91221af045c3f0bc45d76cd4 100644 (file)
@@ -58,15 +58,17 @@ typedef void* yyscan_t;
      T_TRUTHY = 261,
      T_FALSY = 262,
      T_STRING = 263,
-     T_COLON = 264,
-     T_DCOLON = 265,
-     T_POUND = 266,
-     T_DIGITS = 267,
-     T_LITERAL = 268,
-     T_OPLINE = 269,
-     T_ID = 270,
-     T_INPUT = 271,
-     T_UNEXPECTED = 272
+     T_SQUIGGLE = 264,
+     T_COLON = 265,
+     T_DCOLON = 266,
+     T_POUND = 267,
+     T_DIGITS = 268,
+     T_LITERAL = 269,
+     T_ADDR = 270,
+     T_OPCODE = 271,
+     T_ID = 272,
+     T_INPUT = 273,
+     T_UNEXPECTED = 274
    };
 #endif
 
index 24d24956f9d0592ba12a4c657977474283ce13a5..98fbcdf518977564c711af08b1d0491763680cbb 100644 (file)
@@ -784,6 +784,9 @@ PHPDBG_COMMAND(break) /* {{{ */
                case STR_PARAM:
                        phpdbg_set_breakpoint_symbol(param->str, param->len TSRMLS_CC);
                        break;
+               case OP_PARAM:
+                       phpdbg_set_breakpoint_opcode(param->str, param->len TSRMLS_CC);
+                       break;
 
                phpdbg_default_switch_case();
        }