X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=gmqcc.h;h=835931df990a5431399f463728053f652321ce72;hb=68c2baa7c1b9ee1ca7804656d6fb5cf65b435a90;hp=97f0e4d1774be599c661fe409e18cf1e7522f853;hpb=2ddb5ad50ddf958ad5639f79e15ad91c37bdb720;p=xonotic%2Fgmqcc.git diff --git a/gmqcc.h b/gmqcc.h index 97f0e4d..835931d 100644 --- a/gmqcc.h +++ b/gmqcc.h @@ -180,12 +180,12 @@ GMQCC_IND_STRING(GMQCC_VERSION_PATCH) \ /* stat.c */ void stat_info (void); char *stat_mem_strdup (const char *, size_t, const char *, bool); +void stat_mem_deallocate(void *, size_t, const char *); void *stat_mem_reallocate(void *, size_t, size_t, const char *, const char *); -void stat_mem_deallocate(void *); void *stat_mem_allocate (size_t, size_t, const char *, const char *); #define mem_a(SIZE) stat_mem_allocate ((SIZE), __LINE__, __FILE__, #SIZE) -#define mem_d(PTRN) stat_mem_deallocate((void*)(PTRN)) +#define mem_d(PTRN) stat_mem_deallocate((void*)(PTRN), __LINE__, __FILE__) #define mem_r(PTRN, SIZE) stat_mem_reallocate((void*)(PTRN), (SIZE), __LINE__, __FILE__, #SIZE) #define mem_af(SIZE, FILE, LINE) stat_mem_allocate ((SIZE), (LINE), (FILE), #SIZE) @@ -258,6 +258,8 @@ typedef struct { /* hidden interface */ void _util_vec_grow(void **a, size_t i, size_t s); +void _util_vec_delete(void *vec, size_t line, const char *file); + #define GMQCC_VEC_WILLGROW(X,Y) ( \ ((!(X) || vec_meta(X)->used + Y >= vec_meta(X)->allocated)) ? \ (void)_util_vec_grow(((void**)&(X)), (Y), sizeof(*(X))) : \ @@ -265,8 +267,8 @@ void _util_vec_grow(void **a, size_t i, size_t s); ) /* exposed interface */ -#define vec_meta(A) (((vector_t*)((void*)A)) - 1) -#define vec_free(A) ((void)((A) ? (mem_d((void*)vec_meta(A)), (A) = NULL) : 0)) +#define vec_meta(A) ((vector_t*)(((char *)(A)) - (sizeof(vector_t) + 4))) +#define vec_free(A) ((void)((A) ? (_util_vec_delete((void *)(A), __LINE__, __FILE__), (A) = NULL) : 0)) #define vec_push(A,V) (GMQCC_VEC_WILLGROW((A),1), (A)[vec_meta(A)->used++] = (V)) #define vec_size(A) ((A) ? vec_meta(A)->used : 0) #define vec_add(A,N) (GMQCC_VEC_WILLGROW((A),(N)), vec_meta(A)->used += (N), &(A)[vec_meta(A)->used-(N)]) @@ -627,6 +629,11 @@ enum { /* TODO: elide */ extern const char *util_instr_str[VINSTR_END]; +void util_swap_header (prog_header_t *code_header); +void util_swap_statements (prog_section_statement_t *statements); +void util_swap_defs_fields(prog_section_both_t *section); +void util_swap_functions (prog_section_function_t *functions); +void util_swap_globals (int32_t *globals); typedef float qcfloat_t; typedef int32_t qcint_t;