mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2025-02-17 09:02:25 +00:00
Warn when preprocessor directive is found inside a macro body.
This commit is contained in:
parent
08891068c8
commit
8f359f3849
1 changed files with 16 additions and 0 deletions
16
ftepp.c
16
ftepp.c
|
@ -1523,6 +1523,11 @@ static bool ftepp_else_allowed(ftepp_t *ftepp)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GMQCC_INLINE void ftepp_inmacro(ftepp_t *ftepp, const char *hash) {
|
||||||
|
if (ftepp->in_macro)
|
||||||
|
(void)!ftepp_warn(ftepp, WARN_CPP, "`#%s` directive in macro", hash);
|
||||||
|
}
|
||||||
|
|
||||||
static bool ftepp_hash(ftepp_t *ftepp)
|
static bool ftepp_hash(ftepp_t *ftepp)
|
||||||
{
|
{
|
||||||
ppcondition cond;
|
ppcondition cond;
|
||||||
|
@ -1538,12 +1543,15 @@ static bool ftepp_hash(ftepp_t *ftepp)
|
||||||
case TOKEN_IDENT:
|
case TOKEN_IDENT:
|
||||||
case TOKEN_TYPENAME:
|
case TOKEN_TYPENAME:
|
||||||
if (!strcmp(ftepp_tokval(ftepp), "define")) {
|
if (!strcmp(ftepp_tokval(ftepp), "define")) {
|
||||||
|
ftepp_inmacro(ftepp, "define");
|
||||||
return ftepp_define(ftepp);
|
return ftepp_define(ftepp);
|
||||||
}
|
}
|
||||||
else if (!strcmp(ftepp_tokval(ftepp), "undef")) {
|
else if (!strcmp(ftepp_tokval(ftepp), "undef")) {
|
||||||
|
ftepp_inmacro(ftepp, "undef");
|
||||||
return ftepp_undef(ftepp);
|
return ftepp_undef(ftepp);
|
||||||
}
|
}
|
||||||
else if (!strcmp(ftepp_tokval(ftepp), "ifdef")) {
|
else if (!strcmp(ftepp_tokval(ftepp), "ifdef")) {
|
||||||
|
ftepp_inmacro(ftepp, "ifdef");
|
||||||
if (!ftepp_ifdef(ftepp, &cond))
|
if (!ftepp_ifdef(ftepp, &cond))
|
||||||
return false;
|
return false;
|
||||||
cond.was_on = cond.on;
|
cond.was_on = cond.on;
|
||||||
|
@ -1552,6 +1560,7 @@ static bool ftepp_hash(ftepp_t *ftepp)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (!strcmp(ftepp_tokval(ftepp), "ifndef")) {
|
else if (!strcmp(ftepp_tokval(ftepp), "ifndef")) {
|
||||||
|
ftepp_inmacro(ftepp, "ifndef");
|
||||||
if (!ftepp_ifdef(ftepp, &cond))
|
if (!ftepp_ifdef(ftepp, &cond))
|
||||||
return false;
|
return false;
|
||||||
cond.on = !cond.on;
|
cond.on = !cond.on;
|
||||||
|
@ -1561,6 +1570,7 @@ static bool ftepp_hash(ftepp_t *ftepp)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (!strcmp(ftepp_tokval(ftepp), "elifdef")) {
|
else if (!strcmp(ftepp_tokval(ftepp), "elifdef")) {
|
||||||
|
ftepp_inmacro(ftepp, "elifdef");
|
||||||
if (!ftepp_else_allowed(ftepp))
|
if (!ftepp_else_allowed(ftepp))
|
||||||
return false;
|
return false;
|
||||||
if (!ftepp_ifdef(ftepp, &cond))
|
if (!ftepp_ifdef(ftepp, &cond))
|
||||||
|
@ -1572,6 +1582,7 @@ static bool ftepp_hash(ftepp_t *ftepp)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (!strcmp(ftepp_tokval(ftepp), "elifndef")) {
|
else if (!strcmp(ftepp_tokval(ftepp), "elifndef")) {
|
||||||
|
ftepp_inmacro(ftepp, "elifndef");
|
||||||
if (!ftepp_else_allowed(ftepp))
|
if (!ftepp_else_allowed(ftepp))
|
||||||
return false;
|
return false;
|
||||||
if (!ftepp_ifdef(ftepp, &cond))
|
if (!ftepp_ifdef(ftepp, &cond))
|
||||||
|
@ -1584,6 +1595,7 @@ static bool ftepp_hash(ftepp_t *ftepp)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (!strcmp(ftepp_tokval(ftepp), "elif")) {
|
else if (!strcmp(ftepp_tokval(ftepp), "elif")) {
|
||||||
|
ftepp_inmacro(ftepp, "elif");
|
||||||
if (!ftepp_else_allowed(ftepp))
|
if (!ftepp_else_allowed(ftepp))
|
||||||
return false;
|
return false;
|
||||||
if (!ftepp_if(ftepp, &cond))
|
if (!ftepp_if(ftepp, &cond))
|
||||||
|
@ -1595,6 +1607,7 @@ static bool ftepp_hash(ftepp_t *ftepp)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (!strcmp(ftepp_tokval(ftepp), "if")) {
|
else if (!strcmp(ftepp_tokval(ftepp), "if")) {
|
||||||
|
ftepp_inmacro(ftepp, "if");
|
||||||
if (!ftepp_if(ftepp, &cond))
|
if (!ftepp_if(ftepp, &cond))
|
||||||
return false;
|
return false;
|
||||||
cond.was_on = cond.on;
|
cond.was_on = cond.on;
|
||||||
|
@ -1603,6 +1616,7 @@ static bool ftepp_hash(ftepp_t *ftepp)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (!strcmp(ftepp_tokval(ftepp), "else")) {
|
else if (!strcmp(ftepp_tokval(ftepp), "else")) {
|
||||||
|
ftepp_inmacro(ftepp, "else");
|
||||||
if (!ftepp_else_allowed(ftepp))
|
if (!ftepp_else_allowed(ftepp))
|
||||||
return false;
|
return false;
|
||||||
pc = &vec_last(ftepp->conditions);
|
pc = &vec_last(ftepp->conditions);
|
||||||
|
@ -1613,6 +1627,7 @@ static bool ftepp_hash(ftepp_t *ftepp)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (!strcmp(ftepp_tokval(ftepp), "endif")) {
|
else if (!strcmp(ftepp_tokval(ftepp), "endif")) {
|
||||||
|
ftepp_inmacro(ftepp, "endif");
|
||||||
if (!vec_size(ftepp->conditions)) {
|
if (!vec_size(ftepp->conditions)) {
|
||||||
ftepp_error(ftepp, "#endif without #if");
|
ftepp_error(ftepp, "#endif without #if");
|
||||||
return false;
|
return false;
|
||||||
|
@ -1623,6 +1638,7 @@ static bool ftepp_hash(ftepp_t *ftepp)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (!strcmp(ftepp_tokval(ftepp), "include")) {
|
else if (!strcmp(ftepp_tokval(ftepp), "include")) {
|
||||||
|
ftepp_inmacro(ftepp, "include");
|
||||||
return ftepp_include(ftepp);
|
return ftepp_include(ftepp);
|
||||||
}
|
}
|
||||||
else if (!strcmp(ftepp_tokval(ftepp), "pragma")) {
|
else if (!strcmp(ftepp_tokval(ftepp), "pragma")) {
|
||||||
|
|
Loading…
Reference in a new issue