Merge pull request #328 from paulfd/parser-define-bug

Failing parser test on a define
This commit is contained in:
Paul Ferrand 2020-07-23 23:58:39 +02:00 committed by GitHub
commit efc8f9449d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 1 deletions

View file

@ -314,7 +314,7 @@ void Parser::processOpcode()
// if sequence of identifier chars and then "=", an opcode follows
else if (isIdentifierChar(valueRaw[i])) {
++i;
while (i < valueSize && isIdentifierChar(valueRaw[i]))
while (i < valueSize && (isIdentifierChar(valueRaw[i]) || valueRaw[i] == '$'))
++i;
if (i < valueSize && valueRaw[i] == '=')
stop = true;

View file

@ -622,6 +622,48 @@ R"(#define $B foo-$A-baz
REQUIRE(mock.fullBlockMembers == expectedMembers);
}
TEST_CASE("[Parsing] Strange #define behavior")
{
sfz::Parser parser;
ParsingMocker mock;
parser.setListener(&mock);
parser.parseString("/define_cc_bug.sfz",R"(
#define $CCVAL 100
<region> amplitude_oncc$CCVAL=100 sample=*sine
<region> transpose=-12 amplitude_oncc$CCVAL=100 sample=*sine
<region> transpose=-12 amplitude_oncc100=100 sample=*sine
)");
std::vector<std::vector<sfz::Opcode>> expectedMembers = {
{{"amplitude_oncc100", "100"},
{"sample", "*sine"}},
{{"transpose", "-12"},
{"amplitude_oncc100", "100"},
{"sample", "*sine"}},
{{"transpose", "-12"},
{"amplitude_oncc100", "100"},
{"sample", "*sine"}},
};
std::vector<std::string> expectedHeaders = {
"region", "region", "region"
};
std::vector<sfz::Opcode> expectedOpcodes;
for (auto& members: expectedMembers)
for (auto& opcode: members)
expectedOpcodes.push_back(opcode);
REQUIRE(mock.beginnings == 1);
REQUIRE(mock.endings == 1);
REQUIRE(mock.errors.empty());
REQUIRE(mock.warnings.empty());
REQUIRE(mock.opcodes == expectedOpcodes);
REQUIRE(mock.headers == expectedHeaders);
REQUIRE(mock.fullBlockHeaders == expectedHeaders);
REQUIRE(mock.fullBlockMembers == expectedMembers);
}
TEST_CASE("[Parsing] Opcode value special character")
{
sfz::Parser parser;