Skip to content

hlslparser: Accept the comma operator in for loop increments - #1054

Open
r3wretrhy wants to merge 1 commit into
projectM-visualizer:masterfrom
r3wretrhy:fix/hlsl-for-increment-comma
Open

r3wretrhy wants to merge 1 commit into
projectM-visualizer:masterfrom
r3wretrhy:fix/hlsl-for-increment-comma

Conversation

@r3wretrhy

Copy link
Copy Markdown

Fixes #1043.

HLSL allows several expressions in the increment part of a for loop, like for (int i = 0; i < 10; i++, j++), but the parser stopped after the first one and complained about the comma.

With this change the parser keeps going while it sees commas and links the extra expressions through nextExpression, the same way function arguments are stored. The GLSL generator writes them back as a list, and the tree visitor walks all of them instead of just the first. Single increment loops come out exactly as before.

I added two cases to HLSLParserTest, one for parsing and one that checks the generated GLSL for a loop with three increments. The libprojectM and playlist unit tests pass on Linux with GCC. I didn't test it with an actual preset in a running visualizer.

The increment part of a for statement can be a comma-separated list
of expressions, e.g. "for (int i = 0; i < 10; i++, j++)". The parser
only read a single expression and then expected ')', so such shaders
failed to translate.

Parse the additional expressions and chain them through nextExpression,
write them back as a list in the GLSL generator and visit all of them
in HLSLTreeVisitor.

Fixes projectM-visualizer#1043

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[DEV BUG] HLSLParser does not support comma operator in for loop increment statements

1 participant