Use /usr/public/libxml2 for now --flo
[libfirm] / ir / tr / type.h
index a938636..da983e6 100644 (file)
@@ -125,11 +125,14 @@ typedef struct type type;
 */
 void        free_type_entities(type *tp);
 
-/** Frees the memory used by the type.   Does not free the entities
-    belonging to the type, except for the array element entity.
-    Does not free if tp is "none" or "unknown".
-    Frees entities in value param subtypes of method types!!! Make sure these
-    are not referenced any more. */
+/** Frees the memory used by the type.
+ *
+ * Removes the type from the type list. Does not free the entities
+ * belonging to the type, except for the array element entity.  Does
+ * not free if tp is "none" or "unknown".  Frees entities in value
+ * param subtypes of method types!!! Make sure these are not
+ * referenced any more.  Further make sure there is no pointer type
+ * that refers to this type.                           */
 void        free_type(type *tp);
 
 tp_op*      get_type_tpop(type *tp);
@@ -177,15 +180,26 @@ ir_mode*    get_type_mode(type *tp);
  */
 void        set_type_mode(type *tp, ir_mode* m);
 
-/** Returns the size of a type. */
-int         get_type_size(type *tp);
+/** Returns the size of a type in bytes, retuns -1 if the size is NOT
+ *  a byte size, ie not dividable by 8. */
+int         get_type_size_bytes(type *tp);
 
-/** Sets the size of a type.
+/** Returns the size of a type in bits. */
+int         get_type_size_bits(type *tp);
+
+/** Sets the size of a type in bytes.
+ *
+ * For primitive, enumeration, pointer and method types the size
+ * is always fixed. This call is legal but has no effect.
+ */
+void        set_type_size_bytes(type *tp, int size);
+
+/** Sets the size of a type in bits.
  *
  * For primitive, enumeration, pointer and method types the size
  * is always fixed. This call is legal but has no effect.
  */
-void        set_type_size(type *tp, int size);
+void        set_type_size_bits(type *tp, int size);
 
 
 unsigned long get_type_visited(type *tp);
@@ -563,7 +577,7 @@ type *get_method_param_type(type *method, int pos);
     changing the type of the corresponding entity if the representation is constructed. */
 void  set_method_param_type(type *method, int pos, type* tp);
 /** Returns an entity that represents the copied value argument.  Only necessary
-   for compounds passed by value. This information is constructed only on demand. */
+   for compounds passed by value. This information is constrnewucted only on demand. */
 entity *get_method_value_param_ent(type *method, int pos);
 /**
  * Returns a type that represents the copied value arguments.
@@ -691,6 +705,7 @@ type *new_type_array         (ident *name, int n_dimensions,
  * Initializes order to the order of the dimensions.
  * The entity for array elements is built automatically.
  * Set dimension sizes after call to constructor with set_* routines.
+ * A legal array type must have at least one dimension set.
  */
 type *new_d_type_array         (ident *name, int n_dimensions,
                              type *element_type, dbg_info* db);
@@ -709,11 +724,16 @@ void  set_array_lower_bound  (type *array, int dimension, ir_node *lower_bound);
 void  set_array_lower_bound_int (type *array, int dimension, int lower_bound);
 void  set_array_upper_bound  (type *array, int dimension, ir_node *upper_bound);
 void  set_array_upper_bound_int (type *array, int dimension, int lower_bound);
-/* returns true if lower bound != Unknown */
-int       has_array_lower_bound  (type *array, int dimension);
-ir_node * get_array_lower_bound  (type *array, int dimension);
-int       has_array_upper_bound  (type *array, int dimension);
-ir_node * get_array_upper_bound  (type *array, int dimension);
+/** returns true if lower bound != Unknown */
+int       has_array_lower_bound     (type *array, int dimension);
+ir_node * get_array_lower_bound     (type *array, int dimension);
+/** Works only if bound is Const node with tarval that can be converted to long. */
+long      get_array_lower_bound_int (type *array, int dimension);
+/** returns true if lower bound != Unknown */
+int       has_array_upper_bound     (type *array, int dimension);
+ir_node * get_array_upper_bound     (type *array, int dimension);
+/** Works only if bound is Const node with tarval that can be converted to long. */
+long      get_array_upper_bound_int (type *array, int dimension);
 
 void set_array_order (type *array, int dimension, int order);
 int  get_array_order (type *array, int dimension);
@@ -920,11 +940,6 @@ long get_type_nr(type *tp);
 /*******************************************************************/
 
 
-/** Write the type and all its attributes to stdout.
- *
- *  Writes the type and all its attributes to stdout if DEBUG_libfirm
- *  is set.  Else does nothing. */
-void    dump_type (type *tp);
 
 
 # endif /* _TYPE_H_ */