*/
#if defined(__GNUC__) || defined(__CLANG__)
# define GMQCC_WARN __attribute__((warn_unused_result))
+# define GMQCC_USED __attribute__((used))
#else
# define GMQCC_WARN
+# define GMQCC_USED
#endif
/*
* This is a hack to silent clang regarding empty
/*=========================== correct.c =============================*/
/*===================================================================*/
typedef struct {
- char ***edits;
+ char ***edits;
+ size_t **lens;
} correction_t;
void correct_del (correct_trie_t*, size_t **);
INSTR_BITAND,
INSTR_BITOR,
- /*
- * Virtual instructions used by the assembler
- * keep at the end but before virtual instructions
- * for the IR below.
- */
- AINSTR_END,
-
/*
* Virtual instructions used by the IR
* Keep at the end!
*/
+ VINSTR_END,
VINSTR_PHI,
VINSTR_JUMP,
VINSTR_COND,
typedef struct {
const char *name;
longbit bit;
- const char *description;
} opts_flag_def;
bool opts_setflag (const char *, bool);
enum {
# define GMQCC_TYPE_FLAGS
-# define GMQCC_DEFINE_FLAG(X, Y) X,
+# define GMQCC_DEFINE_FLAG(X) X,
# include "opts.def"
COUNT_FLAGS
};
static const opts_flag_def opts_flag_list[] = {
# define GMQCC_TYPE_FLAGS
-# define GMQCC_DEFINE_FLAG(X, Y) { #X, LONGBIT(X), Y},
+# define GMQCC_DEFINE_FLAG(X) { #X, LONGBIT(X) },
# include "opts.def"
- { NULL, LONGBIT(0), "" }
+ { NULL, LONGBIT(0) }
};
enum {
# define GMQCC_TYPE_WARNS
-# define GMQCC_DEFINE_FLAG(X, Y) WARN_##X,
+# define GMQCC_DEFINE_FLAG(X) WARN_##X,
# include "opts.def"
COUNT_WARNINGS
};
static const opts_flag_def opts_warn_list[] = {
# define GMQCC_TYPE_WARNS
-# define GMQCC_DEFINE_FLAG(X, Y) { #X, LONGBIT(WARN_##X), Y },
+# define GMQCC_DEFINE_FLAG(X) { #X, LONGBIT(WARN_##X) },
# include "opts.def"
- { NULL, LONGBIT(0), "" }
+ { NULL, LONGBIT(0) }
};
enum {
# define GMQCC_TYPE_OPTIMIZATIONS
-# define GMQCC_DEFINE_FLAG(NAME, MIN_O, Y) OPTIM_##NAME,
+# define GMQCC_DEFINE_FLAG(NAME, MIN_O) OPTIM_##NAME,
# include "opts.def"
COUNT_OPTIMIZATIONS
};
static const opts_flag_def opts_opt_list[] = {
# define GMQCC_TYPE_OPTIMIZATIONS
-# define GMQCC_DEFINE_FLAG(NAME, MIN_O, Y) { #NAME, LONGBIT(OPTIM_##NAME), Y},
+# define GMQCC_DEFINE_FLAG(NAME, MIN_O) { #NAME, LONGBIT(OPTIM_##NAME) },
# include "opts.def"
- { NULL, LONGBIT(0), "" }
+ { NULL, LONGBIT(0) }
};
static const unsigned int opts_opt_oflag[] = {
# define GMQCC_TYPE_OPTIMIZATIONS
-# define GMQCC_DEFINE_FLAG(NAME, MIN_O, Y) MIN_O,
+# define GMQCC_DEFINE_FLAG(NAME, MIN_O) MIN_O,
# include "opts.def"
0
};
enum {
# define GMQCC_TYPE_OPTIONS
-# define GMQCC_DEFINE_FLAG(X, Y) OPTION_##X,
+# define GMQCC_DEFINE_FLAG(X) OPTION_##X,
# include "opts.def"
OPTION_COUNT
};
-static const char *opts_options_descriptions[OPTION_COUNT + 1] = {
-# define GMQCC_TYPE_OPTIONS
-# define GMQCC_DEFINE_FLAG(X, Y) Y,
-# include "opts.def"
- ""
-};
extern unsigned int opts_optimizationcount[COUNT_OPTIMIZATIONS];
COMPILER_GMQCC /* this QuakeC */
} opts_std_t;
-typedef enum {
- OPT_TYPE_BOOL,
- OPT_TYPE_U16,
- OPT_TYPE_U32,
- OPT_TYPE_STR
-} opt_type_t;
-
typedef union {
bool B;
uint16_t U16;
} opt_value_t;
-#define OPTION_VALUE_BOOL(X) (opts.options[X].B)
-#define OPTION_VALUE_U16(X) (opts.options[X].U16)
-#define OPTION_VALUE_U32(X) (opts.options[X].U32)
-#define OPTION_VALUE_STR(X) (opts.options[X].STR)
typedef struct {
opt_value_t options [OPTION_COUNT];
uint32_t flags [1 + (COUNT_FLAGS / 32)];
#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))
+#define OPTS_OPTION_BOOL(X) (opts.options[X].B)
+#define OPTS_OPTION_U16(X) (opts.options[X].U16)
+#define OPTS_OPTION_U32(X) (opts.options[X].U32)
+#define OPTS_OPTION_STR(X) (opts.options[X].STR)
#endif