reader/wgsl: Set source locations for literals Change-Id: I34c6fd6760fb948682d427648cae963b9c1d8a6d Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/49442 Commit-Queue: James Price <jrprice@google.com> Auto-Submit: James Price <jrprice@google.com> Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc index 874e05b..6f75fde 100644 --- a/src/reader/wgsl/parser_impl.cc +++ b/src/reader/wgsl/parser_impl.cc
@@ -2815,16 +2815,16 @@ Maybe<ast::Literal*> ParserImpl::const_literal() { auto t = peek(); if (match(Token::Type::kTrue)) { - return create<ast::BoolLiteral>(Source{}, true); + return create<ast::BoolLiteral>(t.source(), true); } if (match(Token::Type::kFalse)) { - return create<ast::BoolLiteral>(Source{}, false); + return create<ast::BoolLiteral>(t.source(), false); } if (match(Token::Type::kSintLiteral)) { - return create<ast::SintLiteral>(Source{}, t.to_i32()); + return create<ast::SintLiteral>(t.source(), t.to_i32()); } if (match(Token::Type::kUintLiteral)) { - return create<ast::UintLiteral>(Source{}, t.to_u32()); + return create<ast::UintLiteral>(t.source(), t.to_u32()); } if (match(Token::Type::kFloatLiteral)) { auto p = peek(); @@ -2832,7 +2832,7 @@ next(); // Consume 'f' add_error(p.source(), "float literals must not be suffixed with 'f'"); } - return create<ast::FloatLiteral>(Source{}, t.to_f32()); + return create<ast::FloatLiteral>(t.source(), t.to_f32()); } return Failure::kNoMatch; }
diff --git a/src/reader/wgsl/parser_impl_const_literal_test.cc b/src/reader/wgsl/parser_impl_const_literal_test.cc index da61925..d73abaa 100644 --- a/src/reader/wgsl/parser_impl_const_literal_test.cc +++ b/src/reader/wgsl/parser_impl_const_literal_test.cc
@@ -28,6 +28,7 @@ ASSERT_NE(c.value, nullptr); ASSERT_TRUE(c->Is<ast::SintLiteral>()); EXPECT_EQ(c->As<ast::SintLiteral>()->value(), -234); + EXPECT_EQ(c->source().range, (Source::Range{{1u, 1u}, {1u, 5u}})); } TEST_F(ParserImplTest, ConstLiteral_Uint) { @@ -39,6 +40,7 @@ ASSERT_NE(c.value, nullptr); ASSERT_TRUE(c->Is<ast::UintLiteral>()); EXPECT_EQ(c->As<ast::UintLiteral>()->value(), 234u); + EXPECT_EQ(c->source().range, (Source::Range{{1u, 1u}, {1u, 5u}})); } TEST_F(ParserImplTest, ConstLiteral_Float) { @@ -50,6 +52,7 @@ ASSERT_NE(c.value, nullptr); ASSERT_TRUE(c->Is<ast::FloatLiteral>()); EXPECT_FLOAT_EQ(c->As<ast::FloatLiteral>()->value(), 234e12f); + EXPECT_EQ(c->source().range, (Source::Range{{1u, 1u}, {1u, 8u}})); } TEST_F(ParserImplTest, ConstLiteral_InvalidFloat) { @@ -69,6 +72,7 @@ ASSERT_NE(c.value, nullptr); ASSERT_TRUE(c->Is<ast::BoolLiteral>()); EXPECT_TRUE(c->As<ast::BoolLiteral>()->IsTrue()); + EXPECT_EQ(c->source().range, (Source::Range{{1u, 1u}, {1u, 5u}})); } TEST_F(ParserImplTest, ConstLiteral_False) { @@ -80,6 +84,7 @@ ASSERT_NE(c.value, nullptr); ASSERT_TRUE(c->Is<ast::BoolLiteral>()); EXPECT_TRUE(c->As<ast::BoolLiteral>()->IsFalse()); + EXPECT_EQ(c->source().range, (Source::Range{{1u, 1u}, {1u, 6u}})); } TEST_F(ParserImplTest, ConstLiteral_NoMatch) {