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.
This commit is contained in:
Michael Snyder 2001-09-27 21:16:43 +00:00
parent 3e9986d221
commit 56e2d25ab5
2 changed files with 27 additions and 18 deletions

View File

@ -106,6 +106,17 @@
* c-exp.y (typebase): Accept (signed long long) as a type expr.
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.
2001-09-20 Kevin Buettner <kevinb@redhat.com>
* solib-svr4.c (fetch_link_map_offsets): Add comment.

View File

@ -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