X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=main.c;h=eab582dc5cae10d3b19db19c697c7130a870f7ee;hb=9908209f5825821eb8c73ff4926bc2b504848792;hp=3dac2e1973cfe1bfe0a17b7359ba6e3549b515b7;hpb=7e76b42f116c985f84b65b5e6f158a9a64686ed1;p=xonotic%2Fgmqcc.git diff --git a/main.c b/main.c index 3dac2e1..eab582d 100644 --- a/main.c +++ b/main.c @@ -25,8 +25,6 @@ #include #include #include -#include - #include "gmqcc.h" #include "lexer.h" @@ -47,7 +45,6 @@ static ppitem *ppems = NULL; #define TYPE_ASM 1 #define TYPE_SRC 2 - static const char *app_name; static void version(void) { @@ -168,6 +165,9 @@ static bool options_parse(int argc, char **argv) { opts_set(opts.flags, ADJUST_VECTOR_FIELDS, true); opts_set(opts.flags, CORRECT_LOGIC, true); + opts_set(opts.flags, SHORT_LOGIC, true); + opts_set(opts.flags, UNTYPED_NIL, true); + opts_set(opts.flags, VARIADIC_ARGS, true); opts_set(opts.flags, FALSE_EMPTY_STRINGS, false); opts_set(opts.flags, TRUE_EMPTY_STRINGS, true); opts_set(opts.flags, LOOP_LABELS, true); @@ -176,10 +176,11 @@ static bool options_parse(int argc, char **argv) { opts_set(opts.werror, WARN_INVALID_PARAMETER_COUNT, true); opts_set(opts.werror, WARN_MISSING_RETURN_VALUES, true); opts_set(opts.flags, EXPRESSIONS_FOR_BUILTINS, true); + opts_set(opts.warn, WARN_BREAKDEF, true); + OPTS_OPTION_U32(OPTION_STANDARD) = COMPILER_GMQCC; - OPTS_OPTION_BOOL(OPTION_STATISTICS) = true; } else if (!strcmp(argarg, "qcc")) { @@ -196,6 +197,7 @@ static bool options_parse(int argc, char **argv) { opts_set(opts.flags, ASSIGN_FUNCTION_TYPES, true); opts_set(opts.flags, CORRECT_TERNARY, false); opts_set(opts.warn, WARN_TERNARY_PRECEDENCE, true); + opts_set(opts.warn, WARN_BREAKDEF, true); OPTS_OPTION_U32(OPTION_STANDARD) = COMPILER_FTEQCC; @@ -357,7 +359,7 @@ static bool options_parse(int argc, char **argv) { else if (!strcmp(argv[0]+2, "NO_ERROR") || !strcmp(argv[0]+2, "NO_ERROR_ALL")) { - for (itr = 0; itr < sizeof(opts.werror)/sizeof(opts.werror[0]); ++itr) + for (itr = 0; itr < GMQCC_ARRAY_COUNT(opts.werror); ++itr) opts.werror[itr] = 0; break; } @@ -365,19 +367,19 @@ static bool options_parse(int argc, char **argv) { !strcmp(argv[0]+2, "ERROR_ALL")) { opts_backup_non_Werror_all(); - for (itr = 0; itr < sizeof(opts.werror)/sizeof(opts.werror[0]); ++itr) + for (itr = 0; itr < GMQCC_ARRAY_COUNT(opts.werror); ++itr) opts.werror[itr] = 0xFFFFFFFFL; opts_restore_non_Werror_all(); break; } else if (!strcmp(argv[0]+2, "NONE")) { - for (itr = 0; itr < sizeof(opts.warn)/sizeof(opts.warn[0]); ++itr) + for (itr = 0; itr < GMQCC_ARRAY_COUNT(opts.warn); ++itr) opts.warn[itr] = 0; break; } else if (!strcmp(argv[0]+2, "ALL")) { opts_backup_non_Wall(); - for (itr = 0; itr < sizeof(opts.warn)/sizeof(opts.warn[0]); ++itr) + for (itr = 0; itr < GMQCC_ARRAY_COUNT(opts.warn); ++itr) opts.warn[itr] = 0xFFFFFFFFL; opts_restore_non_Wall(); break; @@ -411,7 +413,7 @@ static bool options_parse(int argc, char **argv) { con_out("option -O requires a numerical argument, or optimization name with an optional 'no-' prefix\n"); return false; } - if (isdigit(argarg[0])) { + if (util_isdigit(argarg[0])) { uint32_t val = (uint32_t)strtol(argarg, NULL, 10); OPTS_OPTION_U32(OPTION_O) = val; opts_setoptimlevel(val); @@ -428,7 +430,8 @@ static bool options_parse(int argc, char **argv) { else if (!strcmp(argarg, "ALL")) opts_setoptimlevel(OPTS_OPTION_U32(OPTION_O) = 9999); else if (!strncmp(argarg, "NO_", 3)) { - if (!opts_setoptim(argarg+3, false)) { + /* constant folding cannot be turned off for obvious reasons */ + if (!strcmp(argarg, "NO_CONST_FOLD") || !opts_setoptim(argarg+3, false)) { con_out("unknown optimization: %s\n", argarg+3); return false; } @@ -536,9 +539,9 @@ static bool progs_nextline(char **out, size_t *alen,FILE *src) { return false; /* start at first non-blank */ - for (start = line; isspace(*start); ++start) {} + for (start = line; util_isspace(*start); ++start) {} /* end at the first non-blank */ - for (end = start; *end && !isspace(*end); ++end) {} + for (end = start; *end && !util_isspace(*end); ++end) {} *out = line; /* move the actual filename to the beginning */ @@ -561,7 +564,7 @@ int main(int argc, char **argv) { app_name = argv[0]; con_init (); - opts_init("progs.dat", COMPILER_GMQCC, (1024 << 3)); + opts_init("progs.dat", COMPILER_QCC, (1024 << 3)); util_seed(time(0)); @@ -577,13 +580,13 @@ int main(int argc, char **argv) { /* the standard decides which set of operators to use */ if (OPTS_OPTION_U32(OPTION_STANDARD) == COMPILER_GMQCC) { operators = c_operators; - operator_count = c_operator_count; + operator_count = GMQCC_ARRAY_COUNT(c_operators); } else if (OPTS_OPTION_U32(OPTION_STANDARD) == COMPILER_FTEQCC) { operators = fte_operators; - operator_count = fte_operator_count; + operator_count = GMQCC_ARRAY_COUNT(fte_operators); } else { operators = qcc_operators; - operator_count = qcc_operator_count; + operator_count = GMQCC_ARRAY_COUNT(qcc_operators); } if (operators == fte_operators) { @@ -681,7 +684,7 @@ int main(int argc, char **argv) { if (!line[0] || (line[0] == '/' && line[1] == '/')) continue; - + if (hasline) { item.filename = util_strdup(line); item.type = TYPE_QC; @@ -697,9 +700,6 @@ int main(int argc, char **argv) { mem_d(line); } - if (retval) - goto cleanup; - if (vec_size(items)) { if (!OPTS_OPTION_BOOL(OPTION_QUIET) && !OPTS_OPTION_BOOL(OPTION_PP_ONLY)) @@ -771,17 +771,6 @@ int main(int argc, char **argv) { } } - /* stuff */ - if (!OPTS_OPTION_BOOL(OPTION_QUIET) && - !OPTS_OPTION_BOOL(OPTION_PP_ONLY)) - { - for (itr = 0; itr < COUNT_OPTIMIZATIONS; ++itr) { - if (opts_optimizationcount[itr]) { - con_out("%s: %u\n", opts_opt_list[itr].name, (unsigned int)opts_optimizationcount[itr]); - } - } - } - cleanup: util_debug("COM", "cleaning ...\n"); if (ftepp) @@ -791,7 +780,7 @@ cleanup: vec_free(ppems); if (!OPTS_OPTION_BOOL(OPTION_PP_ONLY)) - parser_cleanup(parser); + if(parser) parser_cleanup(parser); if (opts_output_free) mem_d(OPTS_OPTION_STR(OPTION_OUTPUT)); if (operators_free)