]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - gmqcc.h
fixed a bug which allowed some statements to end in tokens other than semicolons...
[xonotic/gmqcc.git] / gmqcc.h
diff --git a/gmqcc.h b/gmqcc.h
index 036cab99eb59d7b5fba3e52dbbd5770cc2d27ef2..b9aca8378f44c8c29c78c3347fc04e5ebcf871be 100644 (file)
--- 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