From f82b32442765faec39e4cc55f5c025ed83eb283d Mon Sep 17 00:00:00 2001 From: Jim Blandy Date: Tue, 21 Nov 2023 17:50:33 -0800 Subject: [PATCH] [naga wgsl-in] Test hex float suffix handling corner case. Test Naga's WGSL front end's handling of `h` and `f` suffixes on hexadecimal float literals. WGSL permits these suffixes only if an exponent is present, because otherwise `f` suffixes can be confused with a hexadecimal digit. --- naga/src/front/wgsl/parse/lexer.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/naga/src/front/wgsl/parse/lexer.rs b/naga/src/front/wgsl/parse/lexer.rs index dc229bb5fa..9bcbb72927 100644 --- a/naga/src/front/wgsl/parse/lexer.rs +++ b/naga/src/front/wgsl/parse/lexer.rs @@ -448,6 +448,7 @@ impl<'a> Lexer<'a> { } #[cfg(test)] +#[track_caller] fn sub_test(source: &str, expected_tokens: &[Token]) { let mut lex = Lexer::new(source); for &token in expected_tokens { @@ -674,6 +675,22 @@ fn test_tokens() { Token::Operation('/'), ], ); + + // Type suffixes are only allowed on hex float literals + // if you provided an exponent. + sub_test( + "0x1.2f 0x1.2f 0x1.2h 0x1.2H", + &[ + // The 'f' suffixes are taken as a hex digit: + // the fractional part is 0x2f / 256. + Token::Number(Ok(Number::F32(1.0 + 0x2f as f32 / 256.0))), + Token::Number(Ok(Number::F32(1.0 + 0x2f as f32 / 256.0))), + Token::Number(Ok(Number::F32(1.125))), + Token::Word("h"), + Token::Number(Ok(Number::F32(1.125))), + Token::Word("H"), + ], + ) } #[test]