fix(parser): allow empty final macro arguments (#948)

Treat a trailing comma as an empty parameter.
This commit is contained in:
mo
2026-08-05 18:13:35 +02:00
committed by GitHub
parent 9f49e0e31c
commit f82f191e6c
2 changed files with 20 additions and 1 deletions
@@ -933,7 +933,8 @@ void DefinesStreamProxy::ContinueMacroParameters(
}
else if (state.m_parameter_state == ParameterState::AFTER_COMMA)
{
throw ParsingException(CreatePos(line, linePos), "Cannot close macro parameters after comma");
state.m_parameters.emplace_back();
state.m_parameter_state = ParameterState::NOT_IN_PARAMETERS;
}
else
{
@@ -761,6 +761,24 @@ namespace test::parsing::impl::defines_stream_proxy
REQUIRE(proxy.Eof());
}
TEST_CASE("DefinesStreamProxy: Ensure can use empty final parameter value in nested macro", "[parsing][parsingstream]")
{
const std::vector<std::string> lines{
"#define inner(param1, param2) param1+param2+end",
"#define outer(param1) inner(param1, )",
"outer(begin)",
};
MockParserLineStream mockStream(lines);
DefinesStreamProxy proxy(&mockStream);
ExpectLine(&proxy, 1, "");
ExpectLine(&proxy, 2, "");
ExpectLine(&proxy, 3, "begin++end");
REQUIRE(proxy.Eof());
}
TEST_CASE("DefinesStreamProxy: Ensure throws error on unclosed parenthesis in params", "[parsing][parsingstream]")
{
const std::vector<std::string> lines{