diff --git a/src/parser/input-impl.h b/src/parser/input-impl.h index 0f8fc2e86d4..3ffce07f8d0 100644 --- a/src/parser/input-impl.h +++ b/src/parser/input-impl.h @@ -100,7 +100,7 @@ inline std::optional ParseInput::takeOffset() { if (subLexer == subLexer.end()) { return {}; } - if (auto o = subLexer->getU64()) { + if (auto o = subLexer->getU()) { ++subLexer; if (subLexer == subLexer.end()) { ++lexer; @@ -122,7 +122,7 @@ inline std::optional ParseInput::takeAlign() { if (subLexer == subLexer.end()) { return {}; } - if (auto a = subLexer->getU32()) { + if (auto a = subLexer->getU()) { ++subLexer; if (subLexer == subLexer.end()) { ++lexer; @@ -134,9 +134,9 @@ inline std::optional ParseInput::takeAlign() { return {}; } -inline std::optional ParseInput::takeU64() { +template inline std::optional ParseInput::takeU() { if (auto t = peek()) { - if (auto n = t->getU64()) { + if (auto n = t->getU()) { ++lexer; return n; } @@ -144,67 +144,33 @@ inline std::optional ParseInput::takeU64() { return std::nullopt; } -inline std::optional ParseInput::takeS64() { +template inline std::optional ParseInput::takeI() { if (auto t = peek()) { - if (auto n = t->getS64()) { + if (auto n = t->getI()) { ++lexer; return n; } } - return {}; + return std::nullopt; } -inline std::optional ParseInput::takeI64() { - if (auto t = peek()) { - if (auto n = t->getI64()) { - ++lexer; - return n; - } - } - return {}; +inline std::optional ParseInput::takeU64() { + return takeU(); } -inline std::optional ParseInput::takeU32() { - if (auto t = peek()) { - if (auto n = t->getU32()) { - ++lexer; - return n; - } - } - return std::nullopt; +inline std::optional ParseInput::takeI64() { + return takeI(); } -inline std::optional ParseInput::takeS32() { - if (auto t = peek()) { - if (auto n = t->getS32()) { - ++lexer; - return n; - } - } - return {}; +inline std::optional ParseInput::takeU32() { + return takeU(); } -inline std::optional ParseInput::takeI32() { - if (auto t = peek()) { - if (auto n = t->getI32()) { - ++lexer; - return n; - } - } - return {}; +inline std::optional ParseInput::takeI32() { + return takeI(); } -inline std::optional ParseInput::takeU8() { - if (auto t = peek()) { - if (auto n = t->getU32()) { - if (n <= std::numeric_limits::max()) { - ++lexer; - return uint8_t(*n); - } - } - } - return {}; -} +inline std::optional ParseInput::takeU8() { return takeU(); } inline std::optional ParseInput::takeF64() { if (auto t = peek()) { diff --git a/src/parser/input.h b/src/parser/input.h index dbf3e486857..d4fdde1bd25 100644 --- a/src/parser/input.h +++ b/src/parser/input.h @@ -51,11 +51,9 @@ struct ParseInput { std::optional takeOffset(); std::optional takeAlign(); std::optional takeU64(); - std::optional takeS64(); - std::optional takeI64(); + std::optional takeI64(); std::optional takeU32(); - std::optional takeS32(); - std::optional takeI32(); + std::optional takeI32(); std::optional takeU8(); std::optional takeF64(); std::optional takeF32(); @@ -67,6 +65,11 @@ struct ParseInput { Index getPos(); [[nodiscard]] Err err(Index pos, std::string reason); [[nodiscard]] Err err(std::string reason) { return err(getPos(), reason); } + +private: + template std::optional takeU(); + template std::optional takeS(); + template std::optional takeI(); }; #include "input-impl.h" diff --git a/src/parser/lexer.cpp b/src/parser/lexer.cpp index 0796013fed4..288660c76a7 100644 --- a/src/parser/lexer.cpp +++ b/src/parser/lexer.cpp @@ -767,77 +767,52 @@ std::optional keyword(std::string_view in) { } // anonymous namespace -std::optional Token::getU64() const { +template std::optional Token::getU() const { + static_assert(std::is_integral_v && std::is_unsigned_v); if (auto* tok = std::get_if(&data)) { - if (tok->sign == NoSign) { - return tok->n; - } - } - return {}; -} - -std::optional Token::getS64() const { - if (auto* tok = std::get_if(&data)) { - if (tok->sign == Neg) { - if (uint64_t(INT64_MIN) <= tok->n || tok->n == 0) { - return int64_t(tok->n); - } - // TODO: Add error production for signed underflow. - } else { - if (tok->n <= uint64_t(INT64_MAX)) { - return int64_t(tok->n); - } - // TODO: Add error production for signed overflow. - } - } - return {}; -} - -std::optional Token::getI64() const { - if (auto n = getU64()) { - return *n; - } - if (auto n = getS64()) { - return *n; - } - return {}; -} - -std::optional Token::getU32() const { - if (auto* tok = std::get_if(&data)) { - if (tok->sign == NoSign && tok->n <= UINT32_MAX) { - return int32_t(tok->n); + if (tok->sign == NoSign && tok->n <= std::numeric_limits::max()) { + return T(tok->n); } // TODO: Add error production for unsigned overflow. } return {}; } -std::optional Token::getS32() const { +template std::optional Token::getS() const { + static_assert(std::is_integral_v && std::is_signed_v); if (auto* tok = std::get_if(&data)) { if (tok->sign == Neg) { - if (uint64_t(INT32_MIN) <= tok->n || tok->n == 0) { - return int32_t(tok->n); + if (uint64_t(std::numeric_limits::min()) <= tok->n || tok->n == 0) { + return T(tok->n); } } else { - if (tok->n <= uint64_t(INT32_MAX)) { - return int32_t(tok->n); + if (tok->n <= uint64_t(std::numeric_limits::max())) { + return T(tok->n); } } } return {}; } -std::optional Token::getI32() const { - if (auto n = getU32()) { +template std::optional Token::getI() const { + static_assert(std::is_integral_v && std::is_unsigned_v); + if (auto n = getU()) { return *n; } - if (auto n = getS32()) { - return uint32_t(*n); + if (auto n = getS>()) { + return T(*n); } return {}; } +template std::optional Token::getU() const; +template std::optional Token::getS() const; +template std::optional Token::getI() const; +template std::optional Token::getU() const; +template std::optional Token::getS() const; +template std::optional Token::getI() const; +template std::optional Token::getU() const; + std::optional Token::getF64() const { constexpr int signif = 52; constexpr uint64_t payloadMask = (1ull << signif) - 1; diff --git a/src/parser/lexer.h b/src/parser/lexer.h index 67d29b002fc..42b18508e46 100644 --- a/src/parser/lexer.h +++ b/src/parser/lexer.h @@ -125,12 +125,10 @@ struct Token { } return {}; } - std::optional getU64() const; - std::optional getS64() const; - std::optional getI64() const; - std::optional getU32() const; - std::optional getS32() const; - std::optional getI32() const; + + template std::optional getU() const; + template std::optional getS() const; + template std::optional getI() const; std::optional getF64() const; std::optional getF32() const; std::optional getString() const; diff --git a/test/gtest/wat-lexer.cpp b/test/gtest/wat-lexer.cpp index 2ae29a59f70..b46f9927f38 100644 --- a/test/gtest/wat-lexer.cpp +++ b/test/gtest/wat-lexer.cpp @@ -380,21 +380,21 @@ TEST(LexerTest, ClassifyInt) { Lexer lexer("0"sv); ASSERT_FALSE(lexer.empty()); - ASSERT_TRUE(lexer->getU64()); - ASSERT_TRUE(lexer->getS64()); - ASSERT_TRUE(lexer->getI64()); - ASSERT_TRUE(lexer->getU32()); - ASSERT_TRUE(lexer->getS32()); - ASSERT_TRUE(lexer->getI32()); + ASSERT_TRUE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); + ASSERT_TRUE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); ASSERT_TRUE(lexer->getF64()); ASSERT_TRUE(lexer->getF32()); - EXPECT_EQ(*lexer->getU64(), 0ull); - EXPECT_EQ(*lexer->getS64(), 0ll); - EXPECT_EQ(*lexer->getI64(), 0ull); - EXPECT_EQ(*lexer->getU32(), 0u); - EXPECT_EQ(*lexer->getS32(), 0); - EXPECT_EQ(*lexer->getI32(), 0u); + EXPECT_EQ(*lexer->getU(), 0ull); + EXPECT_EQ(*lexer->getS(), 0ll); + EXPECT_EQ(*lexer->getI(), 0ull); + EXPECT_EQ(*lexer->getU(), 0u); + EXPECT_EQ(*lexer->getS(), 0); + EXPECT_EQ(*lexer->getI(), 0u); EXPECT_EQ(*lexer->getF64(), 0.0); EXPECT_EQ(*lexer->getF32(), 0.0); EXPECT_FALSE(std::signbit(*lexer->getF64())); @@ -404,19 +404,19 @@ TEST(LexerTest, ClassifyInt) { Lexer lexer("+0"sv); ASSERT_FALSE(lexer.empty()); - EXPECT_FALSE(lexer->getU64()); - ASSERT_TRUE(lexer->getS64()); - ASSERT_TRUE(lexer->getI64()); - EXPECT_FALSE(lexer->getU32()); - ASSERT_TRUE(lexer->getS32()); - ASSERT_TRUE(lexer->getI32()); + EXPECT_FALSE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); + EXPECT_FALSE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); ASSERT_TRUE(lexer->getF64()); ASSERT_TRUE(lexer->getF32()); - EXPECT_EQ(*lexer->getS64(), 0ll); - EXPECT_EQ(*lexer->getI64(), 0ull); - EXPECT_EQ(*lexer->getS32(), 0); - EXPECT_EQ(*lexer->getI32(), 0u); + EXPECT_EQ(*lexer->getS(), 0ll); + EXPECT_EQ(*lexer->getI(), 0ull); + EXPECT_EQ(*lexer->getS(), 0); + EXPECT_EQ(*lexer->getI(), 0u); EXPECT_EQ(*lexer->getF64(), 0.0); EXPECT_EQ(*lexer->getF32(), 0.0); EXPECT_FALSE(std::signbit(*lexer->getF64())); @@ -426,19 +426,19 @@ TEST(LexerTest, ClassifyInt) { Lexer lexer("-0"sv); ASSERT_FALSE(lexer.empty()); - EXPECT_FALSE(lexer->getU64()); - ASSERT_TRUE(lexer->getS64()); - ASSERT_TRUE(lexer->getI64()); - EXPECT_FALSE(lexer->getU32()); - ASSERT_TRUE(lexer->getS32()); - ASSERT_TRUE(lexer->getI32()); + EXPECT_FALSE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); + EXPECT_FALSE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); ASSERT_TRUE(lexer->getF64()); ASSERT_TRUE(lexer->getF32()); - EXPECT_EQ(*lexer->getS64(), 0ll); - EXPECT_EQ(*lexer->getI64(), 0ull); - EXPECT_EQ(*lexer->getS32(), 0); - EXPECT_EQ(*lexer->getI32(), 0u); + EXPECT_EQ(*lexer->getS(), 0ll); + EXPECT_EQ(*lexer->getI(), 0ull); + EXPECT_EQ(*lexer->getS(), 0); + EXPECT_EQ(*lexer->getI(), 0u); EXPECT_EQ(*lexer->getF64(), -0.0); EXPECT_EQ(*lexer->getF32(), -0.0); ASSERT_TRUE(std::signbit(*lexer->getF64())); @@ -448,21 +448,21 @@ TEST(LexerTest, ClassifyInt) { Lexer lexer("0x7fff_ffff"sv); ASSERT_FALSE(lexer.empty()); - ASSERT_TRUE(lexer->getU64()); - ASSERT_TRUE(lexer->getS64()); - ASSERT_TRUE(lexer->getI64()); - ASSERT_TRUE(lexer->getU32()); - ASSERT_TRUE(lexer->getS32()); - ASSERT_TRUE(lexer->getI32()); + ASSERT_TRUE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); + ASSERT_TRUE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); ASSERT_TRUE(lexer->getF64()); ASSERT_TRUE(lexer->getF32()); - EXPECT_EQ(*lexer->getU64(), 0x7fffffffull); - EXPECT_EQ(*lexer->getS64(), 0x7fffffffll); - EXPECT_EQ(*lexer->getI64(), 0x7fffffffull); - EXPECT_EQ(*lexer->getU32(), 0x7fffffffu); - EXPECT_EQ(*lexer->getS32(), 0x7fffffff); - EXPECT_EQ(*lexer->getI32(), 0x7fffffffu); + EXPECT_EQ(*lexer->getU(), 0x7fffffffull); + EXPECT_EQ(*lexer->getS(), 0x7fffffffll); + EXPECT_EQ(*lexer->getI(), 0x7fffffffull); + EXPECT_EQ(*lexer->getU(), 0x7fffffffu); + EXPECT_EQ(*lexer->getS(), 0x7fffffff); + EXPECT_EQ(*lexer->getI(), 0x7fffffffu); EXPECT_EQ(*lexer->getF64(), 0x7fffffff.p0); EXPECT_EQ(*lexer->getF32(), 0x7fffffff.p0f); } @@ -470,20 +470,20 @@ TEST(LexerTest, ClassifyInt) { Lexer lexer("0x8000_0000"sv); ASSERT_FALSE(lexer.empty()); - ASSERT_TRUE(lexer->getU64()); - ASSERT_TRUE(lexer->getS64()); - ASSERT_TRUE(lexer->getI64()); - ASSERT_TRUE(lexer->getU32()); - EXPECT_FALSE(lexer->getS32()); - ASSERT_TRUE(lexer->getI32()); + ASSERT_TRUE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); + ASSERT_TRUE(lexer->getU()); + EXPECT_FALSE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); ASSERT_TRUE(lexer->getF64()); ASSERT_TRUE(lexer->getF32()); - EXPECT_EQ(*lexer->getU64(), 0x80000000ull); - EXPECT_EQ(*lexer->getS64(), 0x80000000ll); - EXPECT_EQ(*lexer->getI64(), 0x80000000ull); - EXPECT_EQ(*lexer->getU32(), 0x80000000u); - EXPECT_EQ(*lexer->getI32(), 0x80000000u); + EXPECT_EQ(*lexer->getU(), 0x80000000ull); + EXPECT_EQ(*lexer->getS(), 0x80000000ll); + EXPECT_EQ(*lexer->getI(), 0x80000000ull); + EXPECT_EQ(*lexer->getU(), 0x80000000u); + EXPECT_EQ(*lexer->getI(), 0x80000000u); EXPECT_EQ(*lexer->getF64(), 0x80000000.p0); EXPECT_EQ(*lexer->getF32(), 0x80000000.p0f); } @@ -491,19 +491,19 @@ TEST(LexerTest, ClassifyInt) { Lexer lexer("+0x7fff_ffff"sv); ASSERT_FALSE(lexer.empty()); - EXPECT_FALSE(lexer->getU64()); - ASSERT_TRUE(lexer->getS64()); - ASSERT_TRUE(lexer->getI64()); - EXPECT_FALSE(lexer->getU32()); - ASSERT_TRUE(lexer->getS32()); - ASSERT_TRUE(lexer->getI32()); + EXPECT_FALSE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); + EXPECT_FALSE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); ASSERT_TRUE(lexer->getF64()); ASSERT_TRUE(lexer->getF32()); - EXPECT_EQ(*lexer->getS64(), 0x7fffffffll); - EXPECT_EQ(*lexer->getI64(), 0x7fffffffull); - EXPECT_EQ(*lexer->getS32(), 0x7fffffff); - EXPECT_EQ(*lexer->getI32(), 0x7fffffffu); + EXPECT_EQ(*lexer->getS(), 0x7fffffffll); + EXPECT_EQ(*lexer->getI(), 0x7fffffffull); + EXPECT_EQ(*lexer->getS(), 0x7fffffff); + EXPECT_EQ(*lexer->getI(), 0x7fffffffu); EXPECT_EQ(*lexer->getF64(), 0x7fffffff.p0); EXPECT_EQ(*lexer->getF32(), 0x7fffffff.p0f); } @@ -511,17 +511,17 @@ TEST(LexerTest, ClassifyInt) { Lexer lexer("+0x8000_0000"sv); ASSERT_FALSE(lexer.empty()); - EXPECT_FALSE(lexer->getU64()); - ASSERT_TRUE(lexer->getS64()); - ASSERT_TRUE(lexer->getI64()); - EXPECT_FALSE(lexer->getU32()); - EXPECT_FALSE(lexer->getS32()); - EXPECT_FALSE(lexer->getI32()); + EXPECT_FALSE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); + EXPECT_FALSE(lexer->getU()); + EXPECT_FALSE(lexer->getS()); + EXPECT_FALSE(lexer->getI()); ASSERT_TRUE(lexer->getF64()); ASSERT_TRUE(lexer->getF32()); - EXPECT_EQ(*lexer->getS64(), 0x80000000ll); - EXPECT_EQ(*lexer->getI64(), 0x80000000ull); + EXPECT_EQ(*lexer->getS(), 0x80000000ll); + EXPECT_EQ(*lexer->getI(), 0x80000000ull); EXPECT_EQ(*lexer->getF64(), 0x80000000.p0); EXPECT_EQ(*lexer->getF32(), 0x80000000.p0f); } @@ -529,19 +529,19 @@ TEST(LexerTest, ClassifyInt) { Lexer lexer("-0x8000_0000"sv); ASSERT_FALSE(lexer.empty()); - EXPECT_FALSE(lexer->getU64()); - ASSERT_TRUE(lexer->getS64()); - ASSERT_TRUE(lexer->getI64()); - EXPECT_FALSE(lexer->getU32()); - ASSERT_TRUE(lexer->getS32()); - ASSERT_TRUE(lexer->getI32()); + EXPECT_FALSE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); + EXPECT_FALSE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); ASSERT_TRUE(lexer->getF64()); ASSERT_TRUE(lexer->getF32()); - EXPECT_EQ(*lexer->getS64(), -0x80000000ll); - EXPECT_EQ(*lexer->getI64(), -0x80000000ull); - EXPECT_EQ(*lexer->getS32(), -0x7fffffffll - 1); - EXPECT_EQ(*lexer->getI32(), -0x80000000u); + EXPECT_EQ(*lexer->getS(), -0x80000000ll); + EXPECT_EQ(*lexer->getI(), -0x80000000ull); + EXPECT_EQ(*lexer->getS(), -0x7fffffffll - 1); + EXPECT_EQ(*lexer->getI(), -0x80000000u); EXPECT_EQ(*lexer->getF64(), -0x80000000.p0); EXPECT_EQ(*lexer->getF32(), -0x80000000.p0f); } @@ -549,17 +549,17 @@ TEST(LexerTest, ClassifyInt) { Lexer lexer("-0x8000_0001"sv); ASSERT_FALSE(lexer.empty()); - EXPECT_FALSE(lexer->getU64()); - ASSERT_TRUE(lexer->getS64()); - ASSERT_TRUE(lexer->getI64()); - EXPECT_FALSE(lexer->getU32()); - EXPECT_FALSE(lexer->getS32()); - EXPECT_FALSE(lexer->getI32()); + EXPECT_FALSE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); + EXPECT_FALSE(lexer->getU()); + EXPECT_FALSE(lexer->getS()); + EXPECT_FALSE(lexer->getI()); ASSERT_TRUE(lexer->getF64()); ASSERT_TRUE(lexer->getF32()); - EXPECT_EQ(*lexer->getS64(), -0x80000001ll); - EXPECT_EQ(*lexer->getI64(), -0x80000001ull); + EXPECT_EQ(*lexer->getS(), -0x80000001ll); + EXPECT_EQ(*lexer->getI(), -0x80000001ull); EXPECT_EQ(*lexer->getF64(), -0x80000001.p0); EXPECT_EQ(*lexer->getF32(), -0x80000001.p0f); } @@ -567,20 +567,20 @@ TEST(LexerTest, ClassifyInt) { Lexer lexer("0xffff_ffff"sv); ASSERT_FALSE(lexer.empty()); - ASSERT_TRUE(lexer->getU64()); - ASSERT_TRUE(lexer->getS64()); - ASSERT_TRUE(lexer->getI64()); - ASSERT_TRUE(lexer->getU32()); - EXPECT_FALSE(lexer->getS32()); - ASSERT_TRUE(lexer->getI32()); + ASSERT_TRUE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); + ASSERT_TRUE(lexer->getU()); + EXPECT_FALSE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); ASSERT_TRUE(lexer->getF64()); ASSERT_TRUE(lexer->getF32()); - EXPECT_EQ(*lexer->getU64(), 0xffffffffull); - EXPECT_EQ(*lexer->getS64(), 0xffffffffll); - EXPECT_EQ(*lexer->getI64(), 0xffffffffull); - EXPECT_EQ(*lexer->getU32(), 0xffffffffu); - EXPECT_EQ(*lexer->getI32(), 0xffffffffu); + EXPECT_EQ(*lexer->getU(), 0xffffffffull); + EXPECT_EQ(*lexer->getS(), 0xffffffffll); + EXPECT_EQ(*lexer->getI(), 0xffffffffull); + EXPECT_EQ(*lexer->getU(), 0xffffffffu); + EXPECT_EQ(*lexer->getI(), 0xffffffffu); EXPECT_EQ(*lexer->getF64(), 0xffffffff.p0); EXPECT_EQ(*lexer->getF32(), 0xffffffff.p0f); } @@ -588,18 +588,18 @@ TEST(LexerTest, ClassifyInt) { Lexer lexer("0x1_0000_0000"sv); ASSERT_FALSE(lexer.empty()); - ASSERT_TRUE(lexer->getU64()); - ASSERT_TRUE(lexer->getS64()); - ASSERT_TRUE(lexer->getI64()); - EXPECT_FALSE(lexer->getU32()); - EXPECT_FALSE(lexer->getS32()); - EXPECT_FALSE(lexer->getI32()); + ASSERT_TRUE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); + EXPECT_FALSE(lexer->getU()); + EXPECT_FALSE(lexer->getS()); + EXPECT_FALSE(lexer->getI()); ASSERT_TRUE(lexer->getF64()); ASSERT_TRUE(lexer->getF32()); - EXPECT_EQ(*lexer->getU64(), 0x100000000ull); - EXPECT_EQ(*lexer->getS64(), 0x100000000ll); - EXPECT_EQ(*lexer->getI64(), 0x100000000ull); + EXPECT_EQ(*lexer->getU(), 0x100000000ull); + EXPECT_EQ(*lexer->getS(), 0x100000000ll); + EXPECT_EQ(*lexer->getI(), 0x100000000ull); EXPECT_EQ(*lexer->getF64(), 0x100000000.p0); EXPECT_EQ(*lexer->getF32(), 0x100000000.p0f); } @@ -607,17 +607,17 @@ TEST(LexerTest, ClassifyInt) { Lexer lexer("+0xffff_ffff"sv); ASSERT_FALSE(lexer.empty()); - EXPECT_FALSE(lexer->getU64()); - ASSERT_TRUE(lexer->getS64()); - ASSERT_TRUE(lexer->getI64()); - EXPECT_FALSE(lexer->getU32()); - EXPECT_FALSE(lexer->getS32()); - EXPECT_FALSE(lexer->getI32()); + EXPECT_FALSE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); + EXPECT_FALSE(lexer->getU()); + EXPECT_FALSE(lexer->getS()); + EXPECT_FALSE(lexer->getI()); ASSERT_TRUE(lexer->getF64()); ASSERT_TRUE(lexer->getF32()); - EXPECT_EQ(*lexer->getS64(), 0xffffffffll); - EXPECT_EQ(*lexer->getI64(), 0xffffffffull); + EXPECT_EQ(*lexer->getS(), 0xffffffffll); + EXPECT_EQ(*lexer->getI(), 0xffffffffull); EXPECT_EQ(*lexer->getF64(), 0xffffffff.p0); EXPECT_EQ(*lexer->getF32(), 0xffffffff.p0f); } @@ -625,17 +625,17 @@ TEST(LexerTest, ClassifyInt) { Lexer lexer("+0x1_0000_0000"sv); ASSERT_FALSE(lexer.empty()); - EXPECT_FALSE(lexer->getU64()); - ASSERT_TRUE(lexer->getS64()); - ASSERT_TRUE(lexer->getI64()); - EXPECT_FALSE(lexer->getU32()); - EXPECT_FALSE(lexer->getS32()); - EXPECT_FALSE(lexer->getI32()); + EXPECT_FALSE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); + EXPECT_FALSE(lexer->getU()); + EXPECT_FALSE(lexer->getS()); + EXPECT_FALSE(lexer->getI()); ASSERT_TRUE(lexer->getF64()); ASSERT_TRUE(lexer->getF32()); - EXPECT_EQ(*lexer->getS64(), 0x100000000ll); - EXPECT_EQ(*lexer->getI64(), 0x100000000ull); + EXPECT_EQ(*lexer->getS(), 0x100000000ll); + EXPECT_EQ(*lexer->getI(), 0x100000000ull); EXPECT_EQ(*lexer->getF64(), 0x100000000.p0); EXPECT_EQ(*lexer->getF32(), 0x100000000.p0f); } @@ -643,18 +643,18 @@ TEST(LexerTest, ClassifyInt) { Lexer lexer("0x7fff_ffff_ffff_ffff"sv); ASSERT_FALSE(lexer.empty()); - ASSERT_TRUE(lexer->getU64()); - ASSERT_TRUE(lexer->getS64()); - ASSERT_TRUE(lexer->getI64()); - EXPECT_FALSE(lexer->getU32()); - EXPECT_FALSE(lexer->getS32()); - EXPECT_FALSE(lexer->getI32()); + ASSERT_TRUE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); + EXPECT_FALSE(lexer->getU()); + EXPECT_FALSE(lexer->getS()); + EXPECT_FALSE(lexer->getI()); ASSERT_TRUE(lexer->getF64()); ASSERT_TRUE(lexer->getF32()); - EXPECT_EQ(*lexer->getU64(), 0x7fffffffffffffffull); - EXPECT_EQ(*lexer->getS64(), 0x7fffffffffffffffll); - EXPECT_EQ(*lexer->getI64(), 0x7fffffffffffffffull); + EXPECT_EQ(*lexer->getU(), 0x7fffffffffffffffull); + EXPECT_EQ(*lexer->getS(), 0x7fffffffffffffffll); + EXPECT_EQ(*lexer->getI(), 0x7fffffffffffffffull); EXPECT_EQ(*lexer->getF64(), 0x7fffffffffffffff.p0); EXPECT_EQ(*lexer->getF32(), 0x7fffffffffffffff.p0f); } @@ -662,17 +662,17 @@ TEST(LexerTest, ClassifyInt) { Lexer lexer("+0x7fff_ffff_ffff_ffff"sv); ASSERT_FALSE(lexer.empty()); - EXPECT_FALSE(lexer->getU64()); - ASSERT_TRUE(lexer->getS64()); - ASSERT_TRUE(lexer->getI64()); - EXPECT_FALSE(lexer->getU32()); - EXPECT_FALSE(lexer->getS32()); - EXPECT_FALSE(lexer->getI32()); + EXPECT_FALSE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); + EXPECT_FALSE(lexer->getU()); + EXPECT_FALSE(lexer->getS()); + EXPECT_FALSE(lexer->getI()); ASSERT_TRUE(lexer->getF64()); ASSERT_TRUE(lexer->getF32()); - EXPECT_EQ(*lexer->getS64(), 0x7fffffffffffffffll); - EXPECT_EQ(*lexer->getI64(), 0x7fffffffffffffffull); + EXPECT_EQ(*lexer->getS(), 0x7fffffffffffffffll); + EXPECT_EQ(*lexer->getI(), 0x7fffffffffffffffull); EXPECT_EQ(*lexer->getF64(), 0x7fffffffffffffff.p0); EXPECT_EQ(*lexer->getF32(), 0x7fffffffffffffff.p0f); } @@ -680,17 +680,17 @@ TEST(LexerTest, ClassifyInt) { Lexer lexer("-0x8000_0000_0000_0000"sv); ASSERT_FALSE(lexer.empty()); - EXPECT_FALSE(lexer->getU64()); - ASSERT_TRUE(lexer->getS64()); - ASSERT_TRUE(lexer->getI64()); - EXPECT_FALSE(lexer->getU32()); - EXPECT_FALSE(lexer->getS32()); - EXPECT_FALSE(lexer->getI32()); + EXPECT_FALSE(lexer->getU()); + ASSERT_TRUE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); + EXPECT_FALSE(lexer->getU()); + EXPECT_FALSE(lexer->getS()); + EXPECT_FALSE(lexer->getI()); ASSERT_TRUE(lexer->getF64()); ASSERT_TRUE(lexer->getF32()); - EXPECT_EQ(*lexer->getS64(), -0x7fffffffffffffffll - 1); - EXPECT_EQ(*lexer->getI64(), -0x8000000000000000ull); + EXPECT_EQ(*lexer->getS(), -0x7fffffffffffffffll - 1); + EXPECT_EQ(*lexer->getI(), -0x8000000000000000ull); EXPECT_EQ(*lexer->getF64(), -0x8000000000000000.p0); EXPECT_EQ(*lexer->getF32(), -0x8000000000000000.p0f); } @@ -698,17 +698,17 @@ TEST(LexerTest, ClassifyInt) { Lexer lexer("0xffff_ffff_ffff_ffff"sv); ASSERT_FALSE(lexer.empty()); - ASSERT_TRUE(lexer->getU64()); - EXPECT_FALSE(lexer->getS64()); - ASSERT_TRUE(lexer->getI64()); - EXPECT_FALSE(lexer->getU32()); - EXPECT_FALSE(lexer->getS32()); - EXPECT_FALSE(lexer->getI32()); + ASSERT_TRUE(lexer->getU()); + EXPECT_FALSE(lexer->getS()); + ASSERT_TRUE(lexer->getI()); + EXPECT_FALSE(lexer->getU()); + EXPECT_FALSE(lexer->getS()); + EXPECT_FALSE(lexer->getI()); ASSERT_TRUE(lexer->getF64()); ASSERT_TRUE(lexer->getF32()); - EXPECT_EQ(*lexer->getU64(), 0xffffffffffffffffull); - EXPECT_EQ(*lexer->getI64(), 0xffffffffffffffffull); + EXPECT_EQ(*lexer->getU(), 0xffffffffffffffffull); + EXPECT_EQ(*lexer->getI(), 0xffffffffffffffffull); EXPECT_EQ(*lexer->getF64(), 0xffffffffffffffff.p0); EXPECT_EQ(*lexer->getF32(), 0xffffffffffffffff.p0f); } @@ -716,12 +716,12 @@ TEST(LexerTest, ClassifyInt) { Lexer lexer("+0xffff_ffff_ffff_ffff"sv); ASSERT_FALSE(lexer.empty()); - EXPECT_FALSE(lexer->getU64()); - EXPECT_FALSE(lexer->getS64()); - EXPECT_FALSE(lexer->getI64()); - EXPECT_FALSE(lexer->getU32()); - EXPECT_FALSE(lexer->getS32()); - EXPECT_FALSE(lexer->getI32()); + EXPECT_FALSE(lexer->getU()); + EXPECT_FALSE(lexer->getS()); + EXPECT_FALSE(lexer->getI()); + EXPECT_FALSE(lexer->getU()); + EXPECT_FALSE(lexer->getS()); + EXPECT_FALSE(lexer->getI()); ASSERT_TRUE(lexer->getF64()); ASSERT_TRUE(lexer->getF32());