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>
This commit is contained in:
James Price 2021-04-29 15:54:44 +00:00 committed by Commit Bot service account
parent e80887d14c
commit 4248a46bfb
2 changed files with 10 additions and 5 deletions

View File

@ -2815,16 +2815,16 @@ Maybe<ast::AssignmentStatement*> ParserImpl::assignment_stmt() {
Maybe<ast::Literal*> ParserImpl::const_literal() { Maybe<ast::Literal*> ParserImpl::const_literal() {
auto t = peek(); auto t = peek();
if (match(Token::Type::kTrue)) { if (match(Token::Type::kTrue)) {
return create<ast::BoolLiteral>(Source{}, true); return create<ast::BoolLiteral>(t.source(), true);
} }
if (match(Token::Type::kFalse)) { if (match(Token::Type::kFalse)) {
return create<ast::BoolLiteral>(Source{}, false); return create<ast::BoolLiteral>(t.source(), false);
} }
if (match(Token::Type::kSintLiteral)) { 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)) { 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)) { if (match(Token::Type::kFloatLiteral)) {
auto p = peek(); auto p = peek();
@ -2832,7 +2832,7 @@ Maybe<ast::Literal*> ParserImpl::const_literal() {
next(); // Consume 'f' next(); // Consume 'f'
add_error(p.source(), "float literals must not be suffixed with '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; return Failure::kNoMatch;
} }

View File

@ -28,6 +28,7 @@ TEST_F(ParserImplTest, ConstLiteral_Int) {
ASSERT_NE(c.value, nullptr); ASSERT_NE(c.value, nullptr);
ASSERT_TRUE(c->Is<ast::SintLiteral>()); ASSERT_TRUE(c->Is<ast::SintLiteral>());
EXPECT_EQ(c->As<ast::SintLiteral>()->value(), -234); EXPECT_EQ(c->As<ast::SintLiteral>()->value(), -234);
EXPECT_EQ(c->source().range, (Source::Range{{1u, 1u}, {1u, 5u}}));
} }
TEST_F(ParserImplTest, ConstLiteral_Uint) { TEST_F(ParserImplTest, ConstLiteral_Uint) {
@ -39,6 +40,7 @@ TEST_F(ParserImplTest, ConstLiteral_Uint) {
ASSERT_NE(c.value, nullptr); ASSERT_NE(c.value, nullptr);
ASSERT_TRUE(c->Is<ast::UintLiteral>()); ASSERT_TRUE(c->Is<ast::UintLiteral>());
EXPECT_EQ(c->As<ast::UintLiteral>()->value(), 234u); EXPECT_EQ(c->As<ast::UintLiteral>()->value(), 234u);
EXPECT_EQ(c->source().range, (Source::Range{{1u, 1u}, {1u, 5u}}));
} }
TEST_F(ParserImplTest, ConstLiteral_Float) { TEST_F(ParserImplTest, ConstLiteral_Float) {
@ -50,6 +52,7 @@ TEST_F(ParserImplTest, ConstLiteral_Float) {
ASSERT_NE(c.value, nullptr); ASSERT_NE(c.value, nullptr);
ASSERT_TRUE(c->Is<ast::FloatLiteral>()); ASSERT_TRUE(c->Is<ast::FloatLiteral>());
EXPECT_FLOAT_EQ(c->As<ast::FloatLiteral>()->value(), 234e12f); 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) { TEST_F(ParserImplTest, ConstLiteral_InvalidFloat) {
@ -69,6 +72,7 @@ TEST_F(ParserImplTest, ConstLiteral_True) {
ASSERT_NE(c.value, nullptr); ASSERT_NE(c.value, nullptr);
ASSERT_TRUE(c->Is<ast::BoolLiteral>()); ASSERT_TRUE(c->Is<ast::BoolLiteral>());
EXPECT_TRUE(c->As<ast::BoolLiteral>()->IsTrue()); EXPECT_TRUE(c->As<ast::BoolLiteral>()->IsTrue());
EXPECT_EQ(c->source().range, (Source::Range{{1u, 1u}, {1u, 5u}}));
} }
TEST_F(ParserImplTest, ConstLiteral_False) { TEST_F(ParserImplTest, ConstLiteral_False) {
@ -80,6 +84,7 @@ TEST_F(ParserImplTest, ConstLiteral_False) {
ASSERT_NE(c.value, nullptr); ASSERT_NE(c.value, nullptr);
ASSERT_TRUE(c->Is<ast::BoolLiteral>()); ASSERT_TRUE(c->Is<ast::BoolLiteral>());
EXPECT_TRUE(c->As<ast::BoolLiteral>()->IsFalse()); EXPECT_TRUE(c->As<ast::BoolLiteral>()->IsFalse());
EXPECT_EQ(c->source().range, (Source::Range{{1u, 1u}, {1u, 6u}}));
} }
TEST_F(ParserImplTest, ConstLiteral_NoMatch) { TEST_F(ParserImplTest, ConstLiteral_NoMatch) {