diff options
author | Michael Snyder <msnyder@vmware.com> | 2001-09-27 21:16:43 +0000 |
---|---|---|
committer | Michael Snyder <msnyder@vmware.com> | 2001-09-27 21:16:43 +0000 |
commit | 56e2d25ab5b69584198204090fe049e920cd57db (patch) | |
tree | 1b1a3821b0a1b7d7f64be1fa2a25a221115f9a56 /gdb/c-exp.y | |
parent | 3e9986d2216e847a63ccd55fea53c381b8f5afa7 (diff) | |
download | gdb-56e2d25ab5b69584198204090fe049e920cd57db.zip gdb-56e2d25ab5b69584198204090fe049e920cd57db.tar.gz gdb-56e2d25ab5b69584198204090fe049e920cd57db.tar.bz2 |
2001-09-20 Michael Snyder <msnyder@redhat.com>
Changes by Daniel Berlin <dan@cgsoftware.com>, to support
better parsing of const and volatile type expressions.
* c-exp.y (const_and_volatile, const_or_volatile_noopt,
const_or_volatile): New non-terminals.
(ptype): Use new rule for const_or_volatile.
(typebase): Use new rule for const_or_volatile_noopt.
* parser-defs.h (enum type_pieces): New values tp_const, tp_volatile.
* parse.c (follow_types): Handle tp_const and tp_volatile on the
type stack: call make_cv_type to create new const/volatile type.
Diffstat (limited to 'gdb/c-exp.y')
-rw-r--r-- | gdb/c-exp.y | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/gdb/c-exp.y b/gdb/c-exp.y index 4b72377..6605751 100644 --- a/gdb/c-exp.y +++ b/gdb/c-exp.y @@ -720,21 +720,22 @@ variable: name_not_typename ptype : typebase - /* "const" and "volatile" are curently ignored. A type qualifier - before the type is currently handled in the typebase rule. - The reason for recognizing these here (shift/reduce conflicts) - might be obsolete now that some pointer to member rules have - been deleted. */ - | typebase CONST_KEYWORD - | typebase VOLATILE_KEYWORD - | typebase abs_decl - { $$ = follow_types ($1); } - | typebase CONST_KEYWORD abs_decl - { $$ = follow_types ($1); } - | typebase VOLATILE_KEYWORD abs_decl + | ptype const_or_volatile abs_decl const_or_volatile { $$ = follow_types ($1); } ; - +const_and_volatile: CONST_KEYWORD VOLATILE_KEYWORD + | VOLATILE_KEYWORD CONST_KEYWORD + ; +const_or_volatile_noopt: const_and_volatile + { push_type (tp_const); push_type (tp_volatile);} + | CONST_KEYWORD + { push_type (tp_const);} + | VOLATILE_KEYWORD + { push_type (tp_volatile); } + ; +const_or_volatile: const_or_volatile_noopt + | + ; abs_decl: '*' { push_type (tp_pointer); $$ = 0; } | '*' abs_decl @@ -851,11 +852,8 @@ typebase /* Implements (approximately): (type-qualifier)* type-specifier */ { $$ = lookup_template_type(copy_name($2), $4, expression_context_block); } - /* "const" and "volatile" are curently ignored. A type qualifier - after the type is handled in the ptype rule. I think these could - be too. */ - | CONST_KEYWORD typebase { $$ = $2; } - | VOLATILE_KEYWORD typebase { $$ = $2; } + | const_or_volatile_noopt typebase { $$ = follow_types ($2); } + | typebase const_or_volatile_noopt { $$ = follow_types ($1); } ; typename: TYPENAME |