]> de.git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - main.c
moving -Olocal-temps to -O4 until the issues are solved
[xonotic/gmqcc.git] / main.c
diff --git a/main.c b/main.c
index 916a95e01ee52833b95fe029ab0fcb06effbfa04..77bb8da63931294e8e2ad7ce17083380bbc9a93e 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012
+ * Copyright (C) 2012, 2013
  *     Dale Weiler
  *     Wolfgang Bumiller
  *
@@ -23,6 +23,7 @@
  */
 #include "gmqcc.h"
 #include "lexer.h"
+#include <time.h>
 
 /* TODO: cleanup this whole file .. it's a fuckign mess */
 
@@ -61,6 +62,7 @@ static int usage() {
     con_out("  -o, --output=file      output file, defaults to progs.dat\n"
             "  -s filename            add a progs.src file to be used\n");
     con_out("  -E                     stop after preprocessing\n");
+    con_out("  -q, --quiet            be less verbose\n");
     con_out("  -config file           use the specified ini file\n");
     con_out("  -std=standard          select one of the following standards\n"
             "       -std=qcc          original QuakeC\n"
@@ -156,7 +158,15 @@ static bool options_parse(int argc, char **argv) {
             if (options_long_gcc("std", &argc, &argv, &argarg)) {
                 if (!strcmp(argarg, "gmqcc") || !strcmp(argarg, "default")) {
 
-                    opts_set(opts.flags, ADJUST_VECTOR_FIELDS,  true);
+                    opts_set(opts.flags, ADJUST_VECTOR_FIELDS,          true);
+                    opts_set(opts.flags, CORRECT_LOGIC,                 true);
+                    opts_set(opts.flags, FALSE_EMPTY_STRINGS,           false);
+                    opts_set(opts.flags, TRUE_EMPTY_STRINGS,            true);
+                    opts_set(opts.flags, LOOP_LABELS,                   true);
+                    opts_set(opts.flags, TRANSLATABLE_STRINGS,          true);
+                    opts_set(opts.flags, INITIALIZED_NONCONSTANTS,      true);
+                    opts_set(opts.werror, WARN_INVALID_PARAMETER_COUNT, true);
+                    opts_set(opts.werror, WARN_MISSING_RETURN_VALUES,   true);
                     opts.standard = COMPILER_GMQCC;
 
                 } else if (!strcmp(argarg, "qcc")) {
@@ -171,8 +181,8 @@ static bool options_parse(int argc, char **argv) {
                     opts_set(opts.flags, TRANSLATABLE_STRINGS,     true);
                     opts_set(opts.flags, ADJUST_VECTOR_FIELDS,     false);
                     opts_set(opts.flags, ASSIGN_FUNCTION_TYPES,    true);
-                    opts_set(opts.warn, WARN_TERNARY_PRECEDENCE,   true);
                     opts_set(opts.flags, CORRECT_TERNARY,          false);
+                    opts_set(opts.warn, WARN_TERNARY_PRECEDENCE,   true);
                     opts.standard = COMPILER_FTEQCC;
 
                 } else if (!strcmp(argarg, "qccx")) {
@@ -261,6 +271,7 @@ static bool options_parse(int argc, char **argv) {
 
                 case 'E':
                     opts.pp_only = true;
+                    opts_set(opts.flags, FTEPP_PREDEFS, true); /* predefs on for -E */
                     break;
 
                 /* debug turns on -flno */
@@ -269,6 +280,10 @@ static bool options_parse(int argc, char **argv) {
                     opts.g = true;
                     break;
 
+                case 'q':
+                    opts.quiet = true;
+                    break;
+
                 case 'D':
                     if (!strlen(argv[0]+2)) {
                         con_err("expected name after -D\n");
@@ -437,6 +452,10 @@ static bool options_parse(int argc, char **argv) {
                         version();
                         exit(0);
                     }
+                    else if (!strcmp(argv[0]+2, "quiet")) {
+                        opts.quiet = true;
+                        break;
+                    }
                     else {
             /* All long options with arguments */
                         if (options_long_witharg("output", &argc, &argv, &argarg)) {
@@ -504,13 +523,15 @@ int main(int argc, char **argv) {
     con_init ();
     opts_init("progs.dat", COMPILER_GMQCC, (1024 << 3));
 
+    util_seed(time(0));
+
     if (!options_parse(argc, argv)) {
         return usage();
     }
 
     if (OPTS_FLAG(TRUE_EMPTY_STRINGS) && OPTS_FLAG(FALSE_EMPTY_STRINGS)) {
         con_err("-ftrue-empty-strings and -ffalse-empty-strings are mutually exclusive");
-        exit(1);
+        exit(EXIT_FAILURE);
     }
 
     /* the standard decides which set of operators to use */
@@ -533,10 +554,10 @@ int main(int argc, char **argv) {
                 operators[operator_count-1].id != opid2(':','?'))
             {
                 con_err("internal error: operator precedence table wasn't updated correctly!\n");
-                exit(1);
+                exit(EXIT_FAILURE);
             }
             operators_free = true;
-            newops = mem_a(sizeof(operators[0]) * operator_count);
+            newops = (oper_info*)mem_a(sizeof(operators[0]) * operator_count);
             memcpy(newops, operators, sizeof(operators[0]) * operator_count);
             memcpy(&newops[operator_count-2], &operators[operator_count-1], sizeof(newops[0]));
             memcpy(&newops[operator_count-1], &operators[operator_count-2], sizeof(newops[0]));
@@ -550,7 +571,7 @@ int main(int argc, char **argv) {
             con_out("Flag %s = %i\n",    opts_flag_list[itr].name, OPTS_FLAG(itr));
         for (itr = 0; itr < COUNT_WARNINGS; ++itr)
             con_out("Warning %s = %i\n", opts_warn_list[itr].name, OPTS_WARN(itr));
-        
+
         con_out("output             = %s\n", opts.output);
         con_out("optimization level = %d\n", opts.O);
         con_out("standard           = %i\n", opts.standard);
@@ -566,7 +587,7 @@ int main(int argc, char **argv) {
             }
         }
         else {
-         /* TODO: stdout without stdout .. */
+            outfile = con_default_out();
         }
     }
 
@@ -647,12 +668,12 @@ srcdone:
         goto cleanup;
 
     if (vec_size(items)) {
-        if (!opts.pp_only) {
+        if (!opts.quiet && !opts.pp_only) {
             con_out("Mode: %s\n", (progs_src ? "progs.src" : "manual"));
             con_out("There are %lu items to compile:\n", (unsigned long)vec_size(items));
         }
         for (itr = 0; itr < vec_size(items); ++itr) {
-            if (!opts.pp_only) {
+            if (!opts.quiet && !opts.pp_only) {
                 con_out("  item: %s (%s)\n",
                        items[itr].filename,
                        ( (items[itr].type == TYPE_QC ? "qc" :
@@ -712,7 +733,7 @@ srcdone:
     }
 
     /* stuff */
-    if (!opts.pp_only) {
+    if (!opts.quiet && !opts.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]);