Add new constructors for ast_type_specifier

Add a constructor that uses an ast_struct_specifier and one that uses
a type name.  This saves a (trivial) bit of code, but it also ensures
some of the class invariants (i.e., type_name != NULL) are met.
This commit is contained in:
Ian Romanick 2010-03-15 14:28:17 -07:00
parent 7f9d309743
commit ed85a5dd4b
2 changed files with 18 additions and 4 deletions

16
ast.h
View file

@ -357,6 +357,22 @@ class ast_type_specifier : public ast_node {
public:
ast_type_specifier(int specifier);
/** Construct a type specifier from a type name */
ast_type_specifier(const char *name)
: type_specifier(ast_type_name), type_name(name), structure(NULL),
is_array(false), array_size(NULL), precision(ast_precision_high)
{
/* empty */
}
/** Construct a type specifier from a structure definition */
ast_type_specifier(ast_struct_specifier *s)
: type_specifier(ast_struct), type_name(s->name), structure(s),
is_array(false), array_size(NULL), precision(ast_precision_high)
{
/* empty */
}
virtual void print(void) const;
enum ast_types type_specifier;

View file

@ -861,13 +861,11 @@ type_specifier_nonarray:
}
| struct_specifier
{
$$ = new ast_type_specifier(ast_struct);
$$->structure = $1;
$$ = new ast_type_specifier($1);
}
| TYPE_NAME
{
$$ = new ast_type_specifier(ast_type_name);
$$->type_name = $1;
$$ = new ast_type_specifier($1);
}
;