diff --git a/src/front/wgsl/mod.rs b/src/front/wgsl/mod.rs index 1b4e7a1cc9..fe36e24854 100644 --- a/src/front/wgsl/mod.rs +++ b/src/front/wgsl/mod.rs @@ -626,6 +626,17 @@ impl Parser { }) } else { match word { + "min" | "max" => { + lexer.expect(Token::Paren('('))?; + let a = self.parse_primary_expression(lexer, ctx.reborrow())?; + lexer.expect(Token::Separator(','))?; + let b = self.parse_primary_expression(lexer, ctx.reborrow())?; + lexer.expect(Token::Paren(')'))?; + Some(crate::Expression::Call { + origin: crate::FunctionOrigin::External(word.to_string()), + arguments: vec![a, b], + }) + } "dot" => { lexer.expect(Token::Paren('('))?; let a = self.parse_primary_expression(lexer, ctx.reborrow())?; diff --git a/src/front/wgsl/tests.rs b/src/front/wgsl/tests.rs index b5e25891c0..ccc34f229e 100644 --- a/src/front/wgsl/tests.rs +++ b/src/front/wgsl/tests.rs @@ -6,6 +6,20 @@ fn parse_types() { assert!(parse_str("const a : x32 = 2;").is_err()); } +#[test] +fn parse_type_cast() { + parse_str( + " + const a : i32 = 2; + fn main() { + var x: f32 = f32(a); + #x = f32(i32(a + 1) / 2); //TODO + } + ", + ) + .unwrap(); +} + #[test] fn parse_if() { parse_str(