X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=type_t.h;h=2fe19fbc9e929491eb22d8209b65b81a421986ef;hb=f22121e4473703019e76f50d46ff52dcd7d0b020;hp=48db72aed7e8f24e7cba53b39e3f7a5b6654de1b;hpb=952c939a1895224e3af1835ea3316fbbc1f58c73;p=cparser diff --git a/type_t.h b/type_t.h index 48db72a..2fe19fb 100644 --- a/type_t.h +++ b/type_t.h @@ -56,7 +56,7 @@ struct type_base_t { }; /** - * used for atomic types, complex and imaginary + * used for atomic types, complex and imaginary and as base for enum */ struct atomic_type_t { type_base_t base; @@ -222,13 +222,18 @@ static inline bool is_type_atomic(const type_t *type, atomic_type_kind_t atype) { assert(!is_typeref(type)); - if(type->kind != TYPE_ATOMIC) + if (type->kind != TYPE_ATOMIC) return false; const atomic_type_t *atomic_type = &type->atomic; return atomic_type->akind == atype; } +static inline bool is_type_void(type_t const *const type) +{ + return is_type_atomic(type, ATOMIC_TYPE_VOID); +} + static inline bool is_type_pointer(const type_t *type) { assert(!is_typeref(type)); @@ -286,6 +291,19 @@ static inline unsigned get_akind_rank(atomic_type_kind_t akind) return atomic_type_properties[akind].rank; } +static inline bool is_akind_signed(atomic_type_kind_t akind) +{ + return atomic_type_properties[akind].flags & ATOMIC_TYPE_FLAG_SIGNED; +} + +static inline atomic_type_kind_t get_arithmetic_akind(const type_t *type) +{ + assert(type->kind == TYPE_ATOMIC || type->kind == TYPE_COMPLEX + || type->kind == TYPE_IMAGINARY || type->kind == TYPE_ENUM); + /* note that atomic, complex and enum share atomic_type_t base */ + return type->atomic.akind; +} + /** * Allocate a type node of given kind and initialize all * fields with zero.