static bool GMQCC_WARN ftepp_warn(ftepp_t *ftepp, int warntype, const char *fmt, ...)
{
+ bool r;
va_list ap;
- int lvl = LVL_WARNING;
-
- if (!OPTS_WARN(warntype))
- return false;
-
- if (opts_werror) {
- lvl = LVL_ERROR;
- ftepp->errors++;
- }
va_start(ap, fmt);
- con_cvprintmsg((void*)&ftepp->lex->tok.ctx, lvl, "error", fmt, ap);
+ r = vcompile_warning(ftepp->lex->tok.ctx, warntype, fmt, ap);
va_end(ap);
- return opts_werror;
+ return r;
}
static pptoken *pptoken_make(ftepp_t *ftepp)
return ftepp_preprocess_done();
}
+
+void ftepp_add_macro(const char *name, const char *value) {
+ char *create = NULL;
+
+ /* use saner path for empty macros */
+ if (!value) {
+ ftepp_add_define("__builtin__", name);
+ return;
+ }
+
+ vec_upload(create, "#define ", 8);
+ vec_upload(create, name, strlen(name));
+ vec_push (create, ' ');
+ vec_upload(create, value, strlen(value));
+ vec_push (create, 0);
+
+ ftepp_preprocess_string("__builtin__", create);
+ vec_free (create);
+}
+
bool ftepp_init()
{
char minor[32];
char major[32];
- char *verminor = NULL;
- char *vermajor = NULL;
ftepp = ftepp_new();
if (!ftepp)
/* set the right macro based on the selected standard */
ftepp_add_define(NULL, "GMQCC");
- if (opts_standard == COMPILER_FTEQCC) {
+ if (opts.standard == COMPILER_FTEQCC) {
ftepp_add_define(NULL, "__STD_FTEQCC__");
/* 1.00 */
- major[0] = '1';
- minor[0] = '0';
- } else if (opts_standard == COMPILER_GMQCC) {
+ major[0] = '"';
+ major[1] = '1';
+ major[2] = '"';
+
+ minor[0] = '"';
+ minor[1] = '0';
+ minor[2] = '"';
+ } else if (opts.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_QCC) {
+ sprintf(major, "\"%d\"", GMQCC_VERSION_MAJOR);
+ sprintf(minor, "\"%d\"", GMQCC_VERSION_MINOR);
+ } else if (opts.standard == COMPILER_QCC) {
ftepp_add_define(NULL, "__STD_QCC__");
/* 1.0 */
- major[0] = '1';
- minor[0] = '0';
- }
+ major[0] = '"';
+ major[1] = '1';
+ major[2] = '"';
- vec_upload(verminor, "#define __STD_VERSION_MINOR__ \"", 31);
- vec_upload(vermajor, "#define __STD_VERSION_MAJOR__ \"", 31);
- vec_upload(verminor, minor, strlen(minor));
- vec_upload(vermajor, major, strlen(major));
- vec_push (verminor, '"');
- vec_push (vermajor, '"');
- vec_push (verminor, 0);
- vec_push (vermajor, 0);
+ minor[0] = '"';
+ minor[1] = '0';
+ minor[2] = '"';
+ }
- ftepp_preprocess_string("__builtin__", verminor);
- ftepp_preprocess_string("__builtin__", vermajor);
+ ftepp_add_macro("__STD_VERSION_MINOR__", minor);
+ ftepp_add_macro("__STD_VERSION_MAJOR__", major);
- vec_free(verminor);
- vec_free(vermajor);
return true;
}