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:
parent
9b28427211
commit
2e2394a075
2 changed files with 37 additions and 1 deletions
30
gdb/parse.c
30
gdb/parse.c
|
@ -1255,6 +1255,8 @@ struct type *
|
|||
follow_types (struct type *follow_type)
|
||||
{
|
||||
int done = 0;
|
||||
int make_const = 0;
|
||||
int make_volatile = 0;
|
||||
int array_size;
|
||||
struct type *range_type;
|
||||
|
||||
|
@ -1263,12 +1265,40 @@ follow_types (struct type *follow_type)
|
|||
{
|
||||
case tp_end:
|
||||
done = 1;
|
||||
if (make_const)
|
||||
follow_type = make_cv_type (make_const,
|
||||
TYPE_VOLATILE (follow_type),
|
||||
follow_type, 0);
|
||||
if (make_volatile)
|
||||
follow_type = make_cv_type (TYPE_CONST (follow_type),
|
||||
make_volatile,
|
||||
follow_type, 0);
|
||||
break;
|
||||
case tp_const:
|
||||
make_const = 1;
|
||||
break;
|
||||
case tp_volatile:
|
||||
make_volatile = 1;
|
||||
break;
|
||||
case tp_pointer:
|
||||
follow_type = lookup_pointer_type (follow_type);
|
||||
if (make_const)
|
||||
follow_type = make_cv_type (make_const,
|
||||
TYPE_VOLATILE (follow_type),
|
||||
follow_type, 0);
|
||||
if (make_volatile)
|
||||
follow_type = make_cv_type (TYPE_CONST (follow_type),
|
||||
make_volatile,
|
||||
follow_type, 0);
|
||||
make_const = make_volatile = 0;
|
||||
break;
|
||||
case tp_reference:
|
||||
follow_type = lookup_reference_type (follow_type);
|
||||
if (make_const)
|
||||
follow_type = make_cv_type (make_const, TYPE_VOLATILE (follow_type), follow_type, 0);
|
||||
if (make_volatile)
|
||||
follow_type = make_cv_type (TYPE_CONST (follow_type), make_volatile, follow_type, 0);
|
||||
make_const = make_volatile = 0;
|
||||
break;
|
||||
case tp_array:
|
||||
array_size = pop_type_int ();
|
||||
|
|
|
@ -84,7 +84,13 @@ struct symtoken
|
|||
An array should be preceded in the list by the size of the array. */
|
||||
enum type_pieces
|
||||
{
|
||||
tp_end = -1, tp_pointer, tp_reference, tp_array, tp_function
|
||||
tp_end = -1,
|
||||
tp_pointer,
|
||||
tp_reference,
|
||||
tp_array,
|
||||
tp_function,
|
||||
tp_const,
|
||||
tp_volatile
|
||||
};
|
||||
/* The stack can contain either an enum type_pieces or an int. */
|
||||
union type_stack_elt
|
||||
|
|
Loading…
Reference in a new issue