mirror of
https://github.com/bkaradzic/bx.git
synced 2026-10-23 01:01:06 +00:00
Fixed LiteralParser accepting a float suffix on a hex float with no exponent. (#437)
This commit is contained in:
committed by
GitHub
parent
1c986bd1e9
commit
74adb68722
@@ -154,8 +154,9 @@ namespace bx
|
||||
{
|
||||
const bool anyHex = acceptDigits(_scanner, isHexNum, _profile.separator);
|
||||
|
||||
bool isFloat = false;
|
||||
bool anyHexFrac = false;
|
||||
bool isFloat = false;
|
||||
bool anyHexFrac = false;
|
||||
bool anyExponent = false;
|
||||
if (0 != (_profile.flags & LiteralParser::HexFloat) )
|
||||
{
|
||||
if (!_scanner.accept('.').isEmpty() )
|
||||
@@ -168,7 +169,8 @@ namespace bx
|
||||
if ('p' == ch
|
||||
|| 'P' == ch)
|
||||
{
|
||||
isFloat = true;
|
||||
isFloat = true;
|
||||
anyExponent = true;
|
||||
_scanner.accept();
|
||||
_scanner.accept('-', '+');
|
||||
|
||||
@@ -188,7 +190,10 @@ namespace bx
|
||||
return LiteralType::Unknown;
|
||||
}
|
||||
|
||||
acceptSuffix(_scanner, _profile.floatSuffix);
|
||||
if (anyExponent)
|
||||
{
|
||||
acceptSuffix(_scanner, _profile.floatSuffix);
|
||||
}
|
||||
|
||||
return LiteralType::Float;
|
||||
}
|
||||
|
||||
@@ -212,17 +212,21 @@ TEST_CASE("LiteralParser WGSL profile", "[parser]")
|
||||
REQUIRE(testWgsl("0xffu", LP::Hexadecimal) );
|
||||
|
||||
// floats: fraction/exponent, edge dots, suffixes, hex float
|
||||
REQUIRE(testWgsl("1.0", LP::Float) );
|
||||
REQUIRE(testWgsl(".5", LP::Float) );
|
||||
REQUIRE(testWgsl("2.", LP::Float) );
|
||||
REQUIRE(testWgsl("1e5", LP::Float) );
|
||||
REQUIRE(testWgsl("3.14e-2", LP::Float) );
|
||||
REQUIRE(testWgsl("1.5f", LP::Float) );
|
||||
REQUIRE(testWgsl("1f", LP::Float) ); // bare integer + float suffix -> float
|
||||
REQUIRE(testWgsl("1h", LP::Float) );
|
||||
REQUIRE(testWgsl("1lf", LP::Float) );
|
||||
REQUIRE(testWgsl("0x1p-3", LP::Float) );
|
||||
REQUIRE(testWgsl("0x1.8p3", LP::Float) );
|
||||
REQUIRE(testWgsl("1.0", LP::Float) );
|
||||
REQUIRE(testWgsl(".5", LP::Float) );
|
||||
REQUIRE(testWgsl("2.", LP::Float) );
|
||||
REQUIRE(testWgsl("1e5", LP::Float) );
|
||||
REQUIRE(testWgsl("3.14e-2", LP::Float) );
|
||||
REQUIRE(testWgsl("1.5f", LP::Float) );
|
||||
REQUIRE(testWgsl("1f", LP::Float) ); // bare integer + float suffix -> float
|
||||
REQUIRE(testWgsl("1h", LP::Float) );
|
||||
REQUIRE(testWgsl("1lf", LP::Float) );
|
||||
REQUIRE(testWgsl("0x1p-3", LP::Float) );
|
||||
REQUIRE(testWgsl("0x1.8p3", LP::Float) );
|
||||
REQUIRE(testWgsl("0x1.8p3h", LP::Float) );
|
||||
REQUIRE(testWgsl("0x1.8p3f", LP::Float) );
|
||||
REQUIRE(testWgsl("0xf.h", "0xf.", LP::Float) );
|
||||
REQUIRE(testWgsl("0xf.f", LP::Float) );
|
||||
|
||||
// prefix match: trailing input is not part of the literal
|
||||
REQUIRE(testWgsl("42;", "42", LP::Decimal) );
|
||||
|
||||
Reference in New Issue
Block a user