char *ftepp_predef_date(lex_file *context) {
struct tm *itime;
time_t rtime;
- char *value = mem_a(82);
+ char *value = (char*)mem_a(82);
/* 82 is enough for strftime but we also have " " in our string */
(void)context;
char *ftepp_predef_time(lex_file *context) {
struct tm *itime;
time_t rtime;
- char *value = mem_a(82);
+ char *value = (char*)mem_a(82);
/* 82 is enough for strftime but we also have " " in our string */
(void)context;
case TOKEN_KEYWORD:
macro = ftepp_macro_find(ftepp, ftepp_tokval(ftepp));
if (macro && ftepp->output_on) {
- if (ftepp_warn(ftepp, WARN_PREPROCESSOR, "redefining `%s`", ftepp_tokval(ftepp)))
+ if (ftepp_warn(ftepp, WARN_CPP, "redefining `%s`", ftepp_tokval(ftepp)))
return false;
ftepp_macro_delete(ftepp, ftepp_tokval(ftepp));
}
default:
ftepp_error(ftepp, "junk in #if: `%s` ...", ftepp_tokval(ftepp));
- if (opts.debug)
+ if (OPTS_OPTION_BOOL(OPTION_DEBUG))
ftepp_error(ftepp, "internal: token %i\n", ftepp->token);
return false;
}
ftepp_next(ftepp);
}
vec_push(message, '\0');
- store = ftepp_warn(ftepp, WARN_CPP, message);
+ if (ftepp->output_on)
+ store = ftepp_warn(ftepp, WARN_CPP, message);
+ else
+ store = false;
vec_free(message);
return store;
}
+ if (!ftepp->output_on)
+ return false;
+
unescape (ftepp_tokval(ftepp), ftepp_tokval(ftepp));
return ftepp_warn(ftepp, WARN_CPP, "#warning %s", ftepp_tokval(ftepp));
}
ftepp_next(ftepp);
}
vec_push(message, '\0');
- ftepp_error(ftepp, message);
+ if (ftepp->output_on)
+ ftepp_error(ftepp, message);
vec_free(message);
return;
}
+ if (!ftepp->output_on)
+ return;
+
unescape (ftepp_tokval(ftepp), ftepp_tokval(ftepp));
ftepp_error(ftepp, "#error %s", ftepp_tokval(ftepp));
}
+static void ftepp_directive_message(ftepp_t *ftepp) {
+ char *message = NULL;
+
+ if (!ftepp_skipspace(ftepp))
+ return;
+
+ /* handle the odd non string constant case so it works like C */
+ if (ftepp->token != TOKEN_STRINGCONST) {
+ vec_upload(message, "#message", 8);
+ ftepp_next(ftepp);
+ while (ftepp->token != TOKEN_EOL) {
+ vec_upload(message, ftepp_tokval(ftepp), strlen(ftepp_tokval(ftepp)));
+ ftepp_next(ftepp);
+ }
+ vec_push(message, '\0');
+ if (ftepp->output_on)
+ con_cprintmsg(&ftepp->lex->tok.ctx, LVL_MSG, "message", message);
+ vec_free(message);
+ return;
+ }
+
+ if (!ftepp->output_on)
+ return;
+
+ unescape (ftepp_tokval(ftepp), ftepp_tokval(ftepp));
+ con_cprintmsg(&ftepp->lex->tok.ctx, LVL_MSG, "message", ftepp_tokval(ftepp));
+}
+
/**
* Include a file.
* FIXME: do we need/want a -I option?
return false;
}
+ if (!ftepp->output_on) {
+ ftepp_next(ftepp);
+ return true;
+ }
+
ctx = ftepp_ctx(ftepp);
unescape(ftepp_tokval(ftepp), ftepp_tokval(ftepp));
ftepp_directive_error(ftepp);
break;
}
+ else if (!strcmp(ftepp_tokval(ftepp), "message")) {
+ ftepp_directive_message(ftepp);
+ break;
+ }
else {
if (ftepp->output_on) {
ftepp_error(ftepp, "unrecognized preprocessor directive: `%s`", ftepp_tokval(ftepp));
/* set the right macro based on the selected standard */
ftepp_add_define(NULL, "GMQCC");
- if (opts.standard == COMPILER_FTEQCC) {
+ if (OPTS_OPTION_U32(OPTION_STANDARD) == COMPILER_FTEQCC) {
ftepp_add_define(NULL, "__STD_FTEQCC__");
/* 1.00 */
major[0] = '"';
minor[0] = '"';
minor[1] = '0';
minor[2] = '"';
- } else if (opts.standard == COMPILER_GMQCC) {
+ } else if (OPTS_OPTION_U32(OPTION_STANDARD) == COMPILER_GMQCC) {
ftepp_add_define(NULL, "__STD_GMQCC__");
sprintf(major, "\"%d\"", GMQCC_VERSION_MAJOR);
sprintf(minor, "\"%d\"", GMQCC_VERSION_MINOR);
- } else if (opts.standard == COMPILER_QCCX) {
+ } else if (OPTS_OPTION_U32(OPTION_STANDARD) == COMPILER_QCCX) {
ftepp_add_define(NULL, "__STD_QCCX__");
sprintf(major, "\"%d\"", GMQCC_VERSION_MAJOR);
sprintf(minor, "\"%d\"", GMQCC_VERSION_MINOR);
- } else if (opts.standard == COMPILER_QCC) {
+ } else if (OPTS_OPTION_U32(OPTION_STANDARD) == COMPILER_QCC) {
ftepp_add_define(NULL, "__STD_QCC__");
/* 1.0 */
major[0] = '"';