X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=gmqcc.h;h=0b97e2f40c4d6fb9f8f55c4f8df96cd45be55224;hp=515ce2daadeed396bce6edfd7c238f793b067b5a;hb=36c5722273f1ea87603621c6ee20b7178a7a641b;hpb=480b2fc7b6e88a2ae92231af6bacc382908a4fe2 diff --git a/gmqcc.h b/gmqcc.h index 515ce2d..0b97e2f 100644 --- a/gmqcc.h +++ b/gmqcc.h @@ -1124,6 +1124,24 @@ static const unsigned int opts_opt_oflag[] = { # include "opts.def" 0 }; + +enum { +# define GMQCC_TYPE_OPTIONS +# define GMQCC_DEFINE_FLAG(X, Y) OPTION_##X, +# include "opts.def" + OPTION_COUNT +}; + +/* disabled for now */ +#if 0 +static const char *opts_options_descriptions[OPTION_COUNT + 1] = { +# define GMQCC_TYPE_OPTIONS +# define GMQCC_DEFINE_FLAG(X, Y) Y, +# include "opts.def" + "" +}; +#endif + extern unsigned int opts_optimizationcount[COUNT_OPTIMIZATIONS]; /* other options: */ @@ -1134,30 +1152,29 @@ typedef enum { COMPILER_GMQCC /* this QuakeC */ } opts_std_t; -/* TODO: cleanup this */ +typedef enum { + OPT_TYPE_BOOL, + OPT_TYPE_U16, + OPT_TYPE_U32, + OPT_TYPE_STR +} opt_type_t; + +typedef union { + bool B; + uint16_t U16; + uint32_t U32; + char *STR; +} opt_value_t; + + typedef struct { - uint32_t O; /* -Ox */ - const char *output; /* -o file */ - bool quiet; /* -q --quiet */ - bool g; /* -g */ - opts_std_t standard; /* -std= */ - bool debug; /* -debug */ - bool memchk; /* -memchk */ - bool dumpfin; /* -dumpfin */ - bool dump; /* -dump */ - bool forcecrc; /* --force-crc= */ - uint16_t forced_crc; /* --force-crc= */ - bool pp_only; /* -E */ - size_t max_array_size; /* --max-array= */ - bool add_info; /* --add-info */ - bool correction; /* --correct */ - - 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)]; + opt_value_t options [OPTION_COUNT]; + 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; @@ -1167,5 +1184,9 @@ extern opts_cmd_t opts; #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