1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-09 03:52:19 +02:00

Allow catch-all '#pragma warning disable'

This commit is contained in:
Brian Fiete 2025-01-16 07:36:45 -08:00
parent d367213c31
commit f10f389400
2 changed files with 22 additions and 11 deletions

View file

@ -363,21 +363,18 @@ bool BfParserData::IsUnwarnedAt(BfAstNode* node)
bool BfParserData::IsWarningEnabledAtSrcIndex(int warningNumber, int srcIdx)
{
int enabled = 1; //CDH TODO if/when we add warning level support, this default will change based on the warning number and the general project warning level setting
int lastUnwarnPos = 0;
for (const auto& it : mWarningEnabledChanges)
{
if (it.mKey > srcIdx)
break;
if (it.mValue.mWarningNumber == warningNumber)
if ((it.mValue.mWarningNumber == warningNumber) || (it.mValue.mWarningNumber == -1))
{
if (it.mValue.mEnable)
enabled++;
else
enabled--;
}
if (it.mValue.mWarningNumber == -1)
lastUnwarnPos = -1;
}
}
return enabled > 0;
}
@ -923,10 +920,14 @@ void BfParser::HandlePragma(const StringImpl& pragma, BfBlock* block)
mPassInstance->FailAt("Expected \"disable\" or \"restore\" after \"warning\"", mSourceData, iterNode->GetSrcStart(), iterNode->GetSrcLength());
}
//iterNode = parentNode->mChildArr.GetAs<BfAstNode*>(++curIdx);
int srcStart = iterNode->GetSrcStart();
int nodeCount = 0;
iterNode = itr.Get();
while (iterNode)
{
++nodeCount;
++itr;
auto tokenStr = iterNode->ToString();
if (tokenStr != ",") // commas allowed between warning numbers but not required; we just ignore them
@ -941,11 +942,14 @@ void BfParser::HandlePragma(const StringImpl& pragma, BfBlock* block)
break;
}
}
if (isNum)
int warningNum = atoi(tokenStr.c_str());
if ((isNum) && (warningNum > 0))
{
BfParserWarningEnabledChange wec;
wec.mEnable = enable;
wec.mWarningNumber = atoi(tokenStr.c_str());
wec.mWarningNumber = warningNum;
mParserData->mWarningEnabledChanges[iterNode->GetSrcStart()] = wec;
}
else
@ -953,10 +957,17 @@ void BfParser::HandlePragma(const StringImpl& pragma, BfBlock* block)
mPassInstance->FailAt("Expected decimal warning number", mSourceData, iterNode->GetSrcStart(), iterNode->GetSrcLength());
}
}
//iterNode = parentNode->mChildArr.Get(++curIdx);
iterNode = itr.Get();
}
if (nodeCount == 0)
{
BfParserWarningEnabledChange wec;
wec.mEnable = enable;
wec.mWarningNumber = -1;
mParserData->mWarningEnabledChanges[srcStart] = wec;
}
}
else
{