X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fadt%2Farray.h;h=76eaf2bc32a2e1f6019c2f9daa9bc67bef8ff022;hb=79c5b1531ee8a6f759b6efc595d62d092e867176;hp=d42322ec314448110cded7e13f71debd45b09923;hpb=b751adfd19f36b83ed09d00deec0602ffeba0909;p=libfirm diff --git a/ir/adt/array.h b/ir/adt/array.h index d42322ec3..76eaf2bc3 100644 --- a/ir/adt/array.h +++ b/ir/adt/array.h @@ -21,9 +21,12 @@ #include #include -#include "cookies.h" -#include "xmalloc.h" +#include "fourcc.h" +#include "align.h" +#define ARR_D_MAGIC FOURCC('A','R','R','D') +#define ARR_A_MAGIC FOURCC('A','R','R','A') +#define ARR_F_MAGIC FOURCC('A','R','R','F') /** * Creates a flexible array. @@ -38,7 +41,7 @@ * first element of this array). */ #define NEW_ARR_F(type, nelts) \ - (XMALLOC_TRACE (type *)_new_arr_f ((nelts), sizeof(type) * (nelts))) + ((type *)_new_arr_f ((nelts), sizeof(type) * (nelts))) /** * Creates a new flxible array with the same number of elements as a @@ -76,7 +79,7 @@ * * @param arr The flexible array. */ -#define DEL_ARR_F(arr) (XMALLOC_TRACE _del_arr_f ((arr))) +#define DEL_ARR_F(arr) (_del_arr_f ((arr))) /** * Creates a dynamic array on an obstack. @@ -131,7 +134,7 @@ /** * Create an automatic array which will be deleted at return from function. - * Beware, the data will be allocated un the functions stack! + * Beware, the data will be allocated on the function stack! * * @param type The element type of the new array. * @param var A lvalue of type (type *) which will hold the new array. @@ -216,7 +219,7 @@ * @remark This macro may change arr, so update all references! */ #define ARR_RESIZE(type, arr, n) \ - (XMALLOC_TRACE (arr) = _arr_resize ((arr), (n), sizeof(type))) + ((arr) = _arr_resize ((arr), (n), sizeof(type))) /** * Resize a flexible array, always reallocate data. @@ -228,7 +231,13 @@ * @remark This macro may change arr, so update all references! */ #define ARR_SETLEN(type, arr, n) \ - (XMALLOC_TRACE (arr) = _arr_setlen ((arr), (n), sizeof(type) * (n))) + ((arr) = _arr_setlen ((arr), (n), sizeof(type) * (n))) + +/** Set a length smaller than the current length of the array. Do not + * resize. len must be <= ARR_LEN(arr). */ +#define ARR_SHRINKLEN(arr,len) \ + (ARR_VRFY ((arr)), assert(_ARR_DESCR((arr))->nelts >= len), \ + _ARR_DESCR((arr))->nelts = len) /** * Resize a flexible array by growing it by delta elements. @@ -271,10 +280,10 @@ # define ARR_IDX_VRFY(arr, idx) ((void)0) #else # define ARR_VRFY(arr) \ - assert ( ( (_ARR_DESCR((arr))->cookie == ARR_D_MAGIC) \ - || (_ARR_DESCR((arr))->cookie == ARR_A_MAGIC) \ - || (_ARR_DESCR((arr))->cookie == ARR_F_MAGIC)) \ - && ( (_ARR_DESCR((arr))->cookie != ARR_F_MAGIC) \ + assert ( ( (_ARR_DESCR((arr))->magic == ARR_D_MAGIC) \ + || (_ARR_DESCR((arr))->magic == ARR_A_MAGIC) \ + || (_ARR_DESCR((arr))->magic == ARR_F_MAGIC)) \ + && ( (_ARR_DESCR((arr))->magic != ARR_F_MAGIC) \ || (_ARR_DESCR((arr))->u.allocated >= _ARR_DESCR((arr))->nelts)) \ && (_ARR_DESCR((arr))->nelts >= 0)) # define ARR_IDX_VRFY(arr, idx) \ @@ -287,11 +296,11 @@ ... or at the IPD, either. */ #ifdef NDEBUG # define _ARR_DBGINF_DECL -# define _ARR_SET_DBGINF(descr, co, es) ((co), (es)) +# define _ARR_SET_DBGINF(descr, co, es) #else -# define _ARR_DBGINF_DECL int cookie; size_t eltsize; +# define _ARR_DBGINF_DECL int magic; size_t eltsize; # define _ARR_SET_DBGINF(descr, co, es) \ - ((descr)->cookie = (co), (descr)->eltsize = (es)) + ( (descr)->magic = (co), (descr)->eltsize = (es) ) #endif /**