Adapt to libFirm API
[cparser] / type_t.h
index a793f7a..194c1b5 100644 (file)
--- a/type_t.h
+++ b/type_t.h
 #include "ast_t.h"
 #include "adt/obst.h"
 
-extern struct obstack *type_obst;
-
 typedef enum type_kind_t {
-       TYPE_INVALID,
-       TYPE_ERROR,
+       TYPE_ERROR = 1,
        TYPE_ATOMIC,
        TYPE_COMPLEX,
        TYPE_IMAGINARY,
@@ -46,8 +43,6 @@ typedef enum type_kind_t {
        TYPE_POINTER,
        TYPE_REFERENCE,
        TYPE_ARRAY,
-       TYPE_BITFIELD,
-       TYPE_BUILTIN,
        TYPE_TYPEDEF,
        TYPE_TYPEOF,
 } type_kind_t;
@@ -75,12 +70,6 @@ struct imaginary_type_t {
        atomic_type_kind_t  akind;
 };
 
-struct builtin_type_t {
-       type_base_t  base;
-       symbol_t    *symbol;
-       type_t      *real_type;
-};
-
 struct pointer_type_t {
        type_base_t  base;
        type_t      *points_to;
@@ -117,8 +106,7 @@ struct function_parameter_t {
 
 /** Linkage specifications. */
 typedef enum linkage_kind_t {
-       LINKAGE_INVALID,
-       LINKAGE_C,       /**< C linkage. */
+       LINKAGE_C = 1,   /**< C linkage. */
        LINKAGE_CXX      /**< C++ linkage. */
 } linkage_kind_t;
 
@@ -176,20 +164,12 @@ struct typeof_type_t {
        type_t       *resolved_type;
 };
 
-struct bitfield_type_t {
-       type_base_t   base;
-       type_t       *base_type;
-       expression_t *size_expression; /**< The expression for the bit size. */
-       il_size_t     bit_size;        /**< Size of this bitfield in bits. */
-};
-
 union type_t {
        type_kind_t      kind;
        type_base_t      base;
        atomic_type_t    atomic;
        complex_type_t   complex;
        imaginary_type_t imaginary;
-       builtin_type_t   builtin;
        pointer_type_t   pointer;
        reference_type_t reference;
        array_type_t     array;
@@ -197,10 +177,25 @@ union type_t {
        compound_type_t  compound;
        enum_type_t      enumt;
        typedef_type_t   typedeft;
-       bitfield_type_t  bitfield;
        typeof_type_t    typeoft;
 };
 
+typedef struct atomic_type_properties_t atomic_type_properties_t;
+struct atomic_type_properties_t {
+       unsigned   size;              /**< type size in bytes */
+       unsigned   alignment;         /**< type alignment in bytes */
+       /** some ABIs are broken and require an alignment different from the
+        * recommended/best alignment inside structs. Fixing ABIs is difficult
+        * so people rather stick with the wrong values for compatibility.
+        * (double type on x86 System V ABI)
+        */
+       unsigned   struct_alignment;
+       unsigned   flags;             /**< type flags from atomic_type_flag_t */
+};
+
+extern atomic_type_properties_t atomic_type_properties[ATOMIC_TYPE_LAST+1];
+extern atomic_type_properties_t pointer_properties;
+
 /** The default calling convention for functions. */
 extern cc_kind_t default_calling_convention;
 
@@ -213,6 +208,7 @@ type_t *make_based_pointer_type(type_t *points_to,
                                                                type_qualifiers_t qualifiers, variable_t *variable);
 type_t *make_array_type(type_t *element_type, size_t size,
                         type_qualifiers_t qualifiers);
+function_parameter_t *allocate_parameter(type_t*);
 
 type_t *duplicate_type(const type_t *type);
 type_t *identify_new_type(type_t *type);
@@ -269,12 +265,6 @@ static inline bool is_type_struct(const type_t *type)
        return type->kind == TYPE_COMPOUND_STRUCT;
 }
 
-static inline bool is_type_builtin(const type_t *type)
-{
-       assert(!is_typeref(type));
-       return type->kind == TYPE_BUILTIN;
-}
-
 static inline bool is_type_compound(const type_t *type)
 {
        assert(!is_typeref(type));