X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=gmqcc.h;h=b9aca8378f44c8c29c78c3347fc04e5ebcf871be;hb=81cc4194dca1a128851fb0a5aed86e30df2542e3;hp=036cab99eb59d7b5fba3e52dbbd5770cc2d27ef2;hpb=d97e032fcfe6e1c1a080aa66f435426330e8585e;p=xonotic%2Fgmqcc.git diff --git a/gmqcc.h b/gmqcc.h index 036cab9..b9aca83 100644 --- a/gmqcc.h +++ b/gmqcc.h @@ -315,6 +315,13 @@ void _util_vec_grow(void **a, size_t i, size_t s); #define vec_upload(X,Y,S) memcpy(vec_add((X), (S) * sizeof(*(Y))), (Y), (S) * sizeof(*(Y))) #define vec_remove(A,I,N) memmove((A)+(I),(A)+((I)+(N)),sizeof(*(A))*(vec_meta(A)->used-(I)-(N))),vec_meta(A)->used-=(N) +typedef struct trie_s { + void *value; + struct trie_s *entries; +} correct_trie_t; + +correct_trie_t* correct_trie_new(); + typedef struct hash_table_t { size_t size; struct hash_node_t **table; @@ -426,9 +433,15 @@ GMQCC_INLINE FILE *file_open (const char *, const char *); /*===================================================================*/ /*=========================== correct.c =============================*/ /*===================================================================*/ -void correct_del(ht, size_t **); -void correct_add(ht, size_t ***, const char *); -char *correct_str(ht, /********/ const char *); +typedef struct { + char ***edits; +} correction_t; + +void correct_del (correct_trie_t*, size_t **); +void correct_add (correct_trie_t*, size_t ***, const char *); +char *correct_str (correction_t *, correct_trie_t*, const char *); +void correct_init(correction_t *); +void correct_free(correction_t *); /*===================================================================*/ /*=========================== code.c ================================*/ @@ -1043,6 +1056,12 @@ void opts_set (uint32_t *, size_t, bool); void opts_setoptimlevel(unsigned int); void opts_ini_init (const char *); +/* Saner flag handling */ +void opts_backup_non_Wall(); +void opts_restore_non_Wall(); +void opts_backup_non_Werror_all(); +void opts_restore_non_Werror_all(); + enum { # define GMQCC_TYPE_FLAGS # define GMQCC_DEFINE_FLAG(X) X, @@ -1113,17 +1132,20 @@ typedef struct { bool pp_only; /* -E */ size_t max_array_size; /* --max-array= */ - uint32_t flags [1 + (COUNT_FLAGS / 32)]; - uint32_t warn [1 + (COUNT_WARNINGS / 32)]; - uint32_t werror [1 + (COUNT_WARNINGS / 32)]; - uint32_t optimization[1 + (COUNT_OPTIMIZATIONS / 32)]; + uint32_t flags [1 + (COUNT_FLAGS / 32)]; + uint32_t warn [1 + (COUNT_WARNINGS / 32)]; + uint32_t werror [1 + (COUNT_WARNINGS / 32)]; + uint32_t warn_backup [1 + (COUNT_WARNINGS / 32)]; + uint32_t werror_backup[1 + (COUNT_WARNINGS / 32)]; + uint32_t optimization [1 + (COUNT_OPTIMIZATIONS / 32)]; } opts_cmd_t; extern opts_cmd_t opts; -#define OPTS_FLAG(i) (!! (opts.flags [(i)/32] & (1<< ((i)%32)))) -#define OPTS_WARN(i) (!! (opts.warn [(i)/32] & (1<< ((i)%32)))) -#define OPTS_WERROR(i) (!! (opts.werror [(i)/32] & (1<< ((i)%32)))) -#define OPTS_OPTIMIZATION(i) (!! (opts.optimization[(i)/32] & (1<< ((i)%32)))) +#define OPTS_GENERIC(f,i) (!! (((f)[(i)/32]) & (1<< ((i)%32)))) +#define OPTS_FLAG(i) OPTS_GENERIC(opts.flags, (i)) +#define OPTS_WARN(i) OPTS_GENERIC(opts.warn, (i)) +#define OPTS_WERROR(i) OPTS_GENERIC(opts.werror, (i)) +#define OPTS_OPTIMIZATION(i) OPTS_GENERIC(opts.optimization, (i)) #endif