diff options
Diffstat (limited to 'gcc/c-family/c-common.c')
| -rw-r--r-- | gcc/c-family/c-common.c | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index cd9175a..8b2fd60 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -9461,4 +9461,82 @@ make_tree_vector_copy (const VEC(tree,gc) *orig) return ret; } +/* Return true if KEYWORD starts a type specifier. */ + +bool +keyword_begins_type_specifier (enum rid keyword) +{ + switch (keyword) + { + case RID_INT: + case RID_CHAR: + case RID_FLOAT: + case RID_DOUBLE: + case RID_VOID: + case RID_INT128: + case RID_UNSIGNED: + case RID_LONG: + case RID_SHORT: + case RID_SIGNED: + case RID_DFLOAT32: + case RID_DFLOAT64: + case RID_DFLOAT128: + case RID_FRACT: + case RID_ACCUM: + case RID_BOOL: + case RID_WCHAR: + case RID_CHAR16: + case RID_CHAR32: + case RID_SAT: + case RID_COMPLEX: + case RID_TYPEOF: + case RID_STRUCT: + case RID_CLASS: + case RID_UNION: + case RID_ENUM: + return true; + default: + return false; + } +} + +/* Return true if KEYWORD names a type qualifier. */ + +bool +keyword_is_type_qualifier (enum rid keyword) +{ + switch (keyword) + { + case RID_CONST: + case RID_VOLATILE: + case RID_RESTRICT: + return true; + default: + return false; + } +} + +/* Return true if KEYWORD names a storage class specifier. + + RID_TYPEDEF is not included in this list despite `typedef' being + listed in C99 6.7.1.1. 6.7.1.3 indicates that `typedef' is listed as + such for syntactic convenience only. */ + +bool +keyword_is_storage_class_specifier (enum rid keyword) +{ + switch (keyword) + { + case RID_STATIC: + case RID_EXTERN: + case RID_REGISTER: + case RID_AUTO: + case RID_MUTABLE: + case RID_THREAD: + return true; + default: + return false; + } +} + #include "gt-c-family-c-common.h" |
