#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <ctype.h>
-
#include "gmqcc.h"
#include "lexer.h"
#define TYPE_ASM 1
#define TYPE_SRC 2
-
static const char *app_name;
static void version(void) {
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")) {
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;
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);
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;
}
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 */
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));
if (!line[0] || (line[0] == '/' && line[1] == '/'))
continue;
-
+
if (hasline) {
item.filename = util_strdup(line);
item.type = TYPE_QC;
mem_d(line);
}
- if (retval)
- goto cleanup;
-
if (vec_size(items)) {
if (!OPTS_OPTION_BOOL(OPTION_QUIET) &&
!OPTS_OPTION_BOOL(OPTION_PP_ONLY))
}
}
- /* 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)
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)