Make defines proxy accept parameter values that have parenthesis

This commit is contained in:
Jan 2021-11-28 15:52:45 +01:00
parent e7eb43a955
commit e94c48338c
2 changed files with 36 additions and 3 deletions

View File

@ -504,6 +504,7 @@ void DefinesStreamProxy::ExtractParametersFromDefineUsage(const ParserLine& line
std::ostringstream currentValue; std::ostringstream currentValue;
auto pos = parameterStart + 1; auto pos = parameterStart + 1;
auto valueHasStarted = false; auto valueHasStarted = false;
auto parenthesisDepth = 0;
while (true) while (true)
{ {
if (pos >= line.m_line.size()) if (pos >= line.m_line.size())
@ -518,11 +519,26 @@ void DefinesStreamProxy::ExtractParametersFromDefineUsage(const ParserLine& line
currentValue.str(std::string()); currentValue.str(std::string());
valueHasStarted = false; valueHasStarted = false;
} }
else if(c == '(')
{
valueHasStarted = true;
parenthesisDepth++;
currentValue << c;
}
else if (c == ')') else if (c == ')')
{ {
parameterValues.emplace_back(currentValue.str()); if(parenthesisDepth > 0)
parameterEnd = pos + 1; {
break; valueHasStarted = true;
parenthesisDepth--;
currentValue << c;
}
else
{
parameterValues.emplace_back(currentValue.str());
parameterEnd = pos + 1;
break;
}
} }
else if (valueHasStarted || !isspace(c)) else if (valueHasStarted || !isspace(c))
{ {

View File

@ -670,4 +670,21 @@ namespace test::parsing::impl::defines_stream_proxy
REQUIRE(proxy.Eof()); REQUIRE(proxy.Eof());
} }
TEST_CASE("DefinesStreamProxy: Ensure can use parenthesis in parameters values", "[parsing][parsingstream]")
{
const std::vector<std::string> lines
{
"#define someStuff(param1) Hello param1 World",
"someStuff(A sentence with (parenthesis) and stuff)"
};
MockParserLineStream mockStream(lines);
DefinesStreamProxy proxy(&mockStream);
ExpectLine(&proxy, 1, "");
ExpectLine(&proxy, 2, "Hello A sentence with (parenthesis) and stuff World");
REQUIRE(proxy.Eof());
}
} }