ast2firm: Use conv_to_storage_type().
[cparser] / type_t.h
index b0c21ac..2fe19fb 100644 (file)
--- 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,7 +222,7 @@ 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;
 
@@ -291,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.