From fc47008d0c01fd1658626f6ed7fa4a7a695da3be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Capucho?= Date: Thu, 19 Aug 2021 20:56:44 +0100 Subject: [PATCH] [glsl-in] Allow expression statements to begin with ++ or -- This would otherwise cause the parser to enter an infinite loop. Fixes #1232 --- src/front/glsl/parser/functions.rs | 2 ++ src/front/glsl/parser_tests.rs | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/front/glsl/parser/functions.rs b/src/front/glsl/parser/functions.rs index af1568fcd4..c91e6aeb22 100644 --- a/src/front/glsl/parser/functions.rs +++ b/src/front/glsl/parser/functions.rs @@ -495,6 +495,8 @@ impl<'source> ParsingContext<'source> { | TokenValue::Bang | TokenValue::Tilde | TokenValue::LeftParen + | TokenValue::Increment + | TokenValue::Decrement | TokenValue::Identifier(_) | TokenValue::TypeName(_) | TokenValue::IntConstant(_) diff --git a/src/front/glsl/parser_tests.rs b/src/front/glsl/parser_tests.rs index 10c4b92c20..717737bc59 100644 --- a/src/front/glsl/parser_tests.rs +++ b/src/front/glsl/parser_tests.rs @@ -778,9 +778,10 @@ fn swizzles() { } #[test] -fn vector_indexing() { +fn expressions() { let mut parser = Parser::default(); + // Vector indexing parser .parse( &Options::from(ShaderStage::Vertex), @@ -795,4 +796,20 @@ fn vector_indexing() { "#, ) .unwrap(); + + // Prefix increment/decrement + parser + .parse( + &Options::from(ShaderStage::Vertex), + r#" + # version 450 + void main() { + uint index = 0; + + --index; + ++index; + } + "#, + ) + .unwrap(); }