gdb/
Revert this part of: 2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com> Support @entry in input expressions. * c-exp.y (ENTRY, unknown_cpp_name): New. (exp: UNKNOWN_CPP_NAME): Change to `exp: unknown_cpp_name'. (unknown_cpp_name: UNKNOWN_CPP_NAME, unknown_cpp_name: ENTRY) (variable: name_not_typename '@' ENTRY, name: ENTRY) (name_not_typename: ENTRY): New. (yylex): Recognize ENTRY. Reimplement @entry in input expressions. * c-exp.y (ENTRY): New. (variable: name_not_typename ENTRY): New. (lex_one_token): Optionally return ENTRY instead of the '@' lex. gdb/testsuite/ Reimplement @entry in input expressions. * gdb.base/exprs.c (v_int_array_init): New variable. * gdb.base/exprs.exp (print v_int_array_init) (print *v_int_array_init@1, print *v_int_array_init@2) (print v_int_array_init[0]@1, print v_int_array_init[0]@2) (print v_int_array_init[1]@1): New tests.
This commit is contained in:
parent
3c4d7e1201
commit
941b2081b1
5 changed files with 57 additions and 18 deletions
|
@ -1,3 +1,20 @@
|
|||
2011-10-11 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Revert this part of:
|
||||
2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
Support @entry in input expressions.
|
||||
* c-exp.y (ENTRY, unknown_cpp_name): New.
|
||||
(exp: UNKNOWN_CPP_NAME): Change to `exp: unknown_cpp_name'.
|
||||
(unknown_cpp_name: UNKNOWN_CPP_NAME, unknown_cpp_name: ENTRY)
|
||||
(variable: name_not_typename '@' ENTRY, name: ENTRY)
|
||||
(name_not_typename: ENTRY): New.
|
||||
(yylex): Recognize ENTRY.
|
||||
|
||||
Reimplement @entry in input expressions.
|
||||
* c-exp.y (ENTRY): New.
|
||||
(variable: name_not_typename ENTRY): New.
|
||||
(lex_one_token): Optionally return ENTRY instead of the '@' lex.
|
||||
|
||||
2011-10-11 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* linux-nat.c (linux_handle_extended_wait): Always dump both the
|
||||
|
|
36
gdb/c-exp.y
36
gdb/c-exp.y
|
@ -186,7 +186,6 @@ static struct stoken operator_stoken (const char *);
|
|||
%token <tsval> STRING
|
||||
%token <tsval> CHAR
|
||||
%token <ssym> NAME /* BLOCKNAME defined below to give it higher precedence. */
|
||||
%token <ssym> ENTRY
|
||||
%token <ssym> UNKNOWN_CPP_NAME
|
||||
%token <voidval> COMPLETE
|
||||
%token <tsym> TYPENAME
|
||||
|
@ -195,9 +194,6 @@ static struct stoken operator_stoken (const char *);
|
|||
%type <ssym> name_not_typename
|
||||
%type <tsym> typename
|
||||
|
||||
/* It is UNKNOWN_CPP_NAME or ENTRY, depending on the context. */
|
||||
%type <ssym> unknown_cpp_name
|
||||
|
||||
/* A NAME_OR_INT is a symbol which is not known in the symbol table,
|
||||
but which would parse as a valid number in the current input radix.
|
||||
E.g. "c" when input_radix==16. Depending on the parse, it will be
|
||||
|
@ -212,6 +208,7 @@ static struct stoken operator_stoken (const char *);
|
|||
%token NEW DELETE
|
||||
%type <sval> operator
|
||||
%token REINTERPRET_CAST DYNAMIC_CAST STATIC_CAST CONST_CAST
|
||||
%token ENTRY
|
||||
|
||||
/* Special type cases, put in to allow the parser to distinguish different
|
||||
legal basetypes. */
|
||||
|
@ -396,7 +393,7 @@ exp : exp '('
|
|||
write_exp_elt_opcode (OP_FUNCALL); }
|
||||
;
|
||||
|
||||
exp : unknown_cpp_name '('
|
||||
exp : UNKNOWN_CPP_NAME '('
|
||||
{
|
||||
/* This could potentially be a an argument defined
|
||||
lookup function (Koenig). */
|
||||
|
@ -419,10 +416,6 @@ exp : unknown_cpp_name '('
|
|||
}
|
||||
;
|
||||
|
||||
unknown_cpp_name : UNKNOWN_CPP_NAME
|
||||
| ENTRY
|
||||
;
|
||||
|
||||
lcurly : '{'
|
||||
{ start_arglist (); }
|
||||
;
|
||||
|
@ -764,7 +757,7 @@ block : block COLONCOLON name
|
|||
$$ = SYMBOL_BLOCK_VALUE (tem); }
|
||||
;
|
||||
|
||||
variable: name_not_typename '@' ENTRY
|
||||
variable: name_not_typename ENTRY
|
||||
{ struct symbol *sym = $1.sym;
|
||||
|
||||
if (sym == NULL || !SYMBOL_IS_ARGUMENT (sym)
|
||||
|
@ -1340,13 +1333,11 @@ name : NAME { $$ = $1.stoken; }
|
|||
| TYPENAME { $$ = $1.stoken; }
|
||||
| NAME_OR_INT { $$ = $1.stoken; }
|
||||
| UNKNOWN_CPP_NAME { $$ = $1.stoken; }
|
||||
| ENTRY { $$ = $1.stoken; }
|
||||
| operator { $$ = $1; }
|
||||
;
|
||||
|
||||
name_not_typename : NAME
|
||||
| BLOCKNAME
|
||||
| ENTRY
|
||||
/* These would be useful if name_not_typename was useful, but it is just
|
||||
a fake for "variable", so these cause reduce/reduce conflicts because
|
||||
the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
|
||||
|
@ -2249,6 +2240,21 @@ lex_one_token (void)
|
|||
return toktype;
|
||||
}
|
||||
|
||||
case '@':
|
||||
{
|
||||
char *p = &tokstart[1];
|
||||
size_t len = strlen ("entry");
|
||||
|
||||
while (isspace (*p))
|
||||
p++;
|
||||
if (strncmp (p, "entry", len) == 0 && !isalnum (p[len])
|
||||
&& p[len] != '_')
|
||||
{
|
||||
lexptr = &p[len];
|
||||
return ENTRY;
|
||||
}
|
||||
}
|
||||
/* FALLTHRU */
|
||||
case '+':
|
||||
case '-':
|
||||
case '*':
|
||||
|
@ -2259,7 +2265,6 @@ lex_one_token (void)
|
|||
case '^':
|
||||
case '~':
|
||||
case '!':
|
||||
case '@':
|
||||
case '<':
|
||||
case '>':
|
||||
case '?':
|
||||
|
@ -2550,11 +2555,6 @@ yylex (void)
|
|||
current.token = lex_one_token ();
|
||||
if (current.token == NAME)
|
||||
current.token = classify_name (expression_context_block);
|
||||
if ((current.token == NAME || current.token == UNKNOWN_CPP_NAME)
|
||||
&& yylval.sval.length == strlen ("entry")
|
||||
&& strncmp (yylval.sval.ptr, "entry", strlen ("entry")) == 0)
|
||||
current.token = ENTRY;
|
||||
|
||||
if (parse_language->la_language != language_cplus
|
||||
|| (current.token != TYPENAME && current.token != COLONCOLON))
|
||||
return current.token;
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
2011-10-11 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Reimplement @entry in input expressions.
|
||||
* gdb.base/exprs.c (v_int_array_init): New variable.
|
||||
* gdb.base/exprs.exp (print v_int_array_init)
|
||||
(print *v_int_array_init@1, print *v_int_array_init@2)
|
||||
(print v_int_array_init[0]@1, print v_int_array_init[0]@2)
|
||||
(print v_int_array_init[1]@1): New tests.
|
||||
|
||||
2011-10-10 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* gdb.cp/gdb2495.exp: Do not include directories in filename in
|
||||
|
|
|
@ -75,6 +75,11 @@ unsigned long v_unsigned_long_array[2];
|
|||
|
||||
float v_float_array[2];
|
||||
double v_double_array[2];
|
||||
|
||||
/**** initialized array *******/
|
||||
|
||||
int v_int_array_init[2] = { 10, 20 };
|
||||
|
||||
/**** pointers *******/
|
||||
|
||||
char *v_char_pointer;
|
||||
|
|
|
@ -262,3 +262,11 @@ gdb_test "print v_int--" "\\$\[0-9\]* = 3"
|
|||
gdb_test "print --v_int" "\\$\[0-9\]* = 1"
|
||||
gdb_test "print v_int++ = 5" "Left operand of assignment is not an lvalue."
|
||||
gdb_test "print v_int-- = 5" "Left operand of assignment is not an lvalue."
|
||||
|
||||
# initialized array
|
||||
gdb_test {print v_int_array_init} { = \{10, 20\}}
|
||||
gdb_test {print *v_int_array_init@1} { = \{10\}}
|
||||
gdb_test {print *v_int_array_init@2} { = \{10, 20\}}
|
||||
gdb_test {print v_int_array_init[0]@1} { = \{10\}}
|
||||
gdb_test {print v_int_array_init[0]@2} { = \{10, 20\}}
|
||||
gdb_test {print v_int_array_init[1]@1} { = \{20\}}
|
||||
|
|
Loading…
Add table
Reference in a new issue