tint/parser: Use = for source of assignment

Change-Id: I09ebd529fad775d0ce74fc56e2d7ff161a33f15a
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/118380
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: James Price <jrprice@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/tint/reader/wgsl/parser_impl.cc b/src/tint/reader/wgsl/parser_impl.cc
index c9221f1..524b85f 100644
--- a/src/tint/reader/wgsl/parser_impl.cc
+++ b/src/tint/reader/wgsl/parser_impl.cc
@@ -3364,6 +3364,7 @@
         return add_error(peek(0).source(), "expected 'var' for variable declaration");
     }
 
+    Source source;
     const ast::Expression* lhs = nullptr;
     ast::BinaryOp compound_op = ast::BinaryOp::kNone;
     if (peek_is(Token::Type::kUnderscore)) {
@@ -3372,6 +3373,7 @@
         if (!expect("assignment", Token::Type::kEqual)) {
             return Failure::kErrored;
         }
+        source = last_source();
 
         lhs = create<ast::PhonyExpression>(t.source());
 
@@ -3388,12 +3390,13 @@
 
         // Handle increment and decrement statements.
         if (match(Token::Type::kPlusPlus)) {
-            return create<ast::IncrementDecrementStatement>(t.source(), lhs, true);
+            return create<ast::IncrementDecrementStatement>(last_source(), lhs, true);
         }
         if (match(Token::Type::kMinusMinus)) {
-            return create<ast::IncrementDecrementStatement>(t.source(), lhs, false);
+            return create<ast::IncrementDecrementStatement>(last_source(), lhs, false);
         }
 
+        source = peek().source();
         auto compound_op_result = compound_assignment_operator();
         if (compound_op_result.errored) {
             return Failure::kErrored;
@@ -3416,9 +3419,9 @@
     }
 
     if (compound_op != ast::BinaryOp::kNone) {
-        return create<ast::CompoundAssignmentStatement>(t.source(), lhs, rhs.value, compound_op);
+        return create<ast::CompoundAssignmentStatement>(source, lhs, rhs.value, compound_op);
     }
-    return create<ast::AssignmentStatement>(t.source(), lhs, rhs.value);
+    return create<ast::AssignmentStatement>(source, lhs, rhs.value);
 }
 
 // const_literal
diff --git a/src/tint/reader/wgsl/parser_impl_assignment_stmt_test.cc b/src/tint/reader/wgsl/parser_impl_assignment_stmt_test.cc
index 1f2b191..fd76c34 100644
--- a/src/tint/reader/wgsl/parser_impl_assignment_stmt_test.cc
+++ b/src/tint/reader/wgsl/parser_impl_assignment_stmt_test.cc
@@ -30,6 +30,11 @@
     ASSERT_NE(a->lhs, nullptr);
     ASSERT_NE(a->rhs, nullptr);
 
+    EXPECT_EQ(a->source.range.begin.line, 1u);
+    EXPECT_EQ(a->source.range.begin.column, 3u);
+    EXPECT_EQ(a->source.range.end.line, 1u);
+    EXPECT_EQ(a->source.range.end.column, 4u);
+
     ASSERT_TRUE(a->lhs->Is<ast::IdentifierExpression>());
     auto* ident = a->lhs->As<ast::IdentifierExpression>();
     EXPECT_EQ(ident->symbol, p->builder().Symbols().Get("a"));
@@ -53,6 +58,11 @@
     ASSERT_NE(a->lhs, nullptr);
     ASSERT_NE(a->rhs, nullptr);
 
+    EXPECT_EQ(a->source.range.begin.line, 1u);
+    EXPECT_EQ(a->source.range.begin.column, 12u);
+    EXPECT_EQ(a->source.range.end.line, 1u);
+    EXPECT_EQ(a->source.range.end.column, 13u);
+
     ASSERT_TRUE(a->rhs->Is<ast::IntLiteralExpression>());
     EXPECT_EQ(a->rhs->As<ast::IntLiteralExpression>()->value, 123);
     EXPECT_EQ(a->rhs->As<ast::IntLiteralExpression>()->suffix,
@@ -103,6 +113,11 @@
     ASSERT_NE(a->lhs, nullptr);
     ASSERT_NE(a->rhs, nullptr);
 
+    EXPECT_EQ(a->source.range.begin.line, 1u);
+    EXPECT_EQ(a->source.range.begin.column, 3u);
+    EXPECT_EQ(a->source.range.end.line, 1u);
+    EXPECT_EQ(a->source.range.end.column, 4u);
+
     ASSERT_TRUE(a->rhs->Is<ast::IntLiteralExpression>());
     EXPECT_EQ(a->rhs->As<ast::IntLiteralExpression>()->value, 123);
     EXPECT_EQ(a->rhs->As<ast::IntLiteralExpression>()->suffix,
@@ -163,6 +178,11 @@
     ASSERT_NE(a->rhs, nullptr);
     EXPECT_EQ(a->op, params.op);
 
+    EXPECT_EQ(a->source.range.begin.line, 1u);
+    EXPECT_EQ(a->source.range.begin.column, 3u);
+    EXPECT_EQ(a->source.range.end.line, 1u);
+    EXPECT_EQ(a->source.range.end.column, 3u + params.str.length());
+
     ASSERT_TRUE(a->lhs->Is<ast::IdentifierExpression>());
     auto* ident = a->lhs->As<ast::IdentifierExpression>();
     EXPECT_EQ(ident->symbol, p->builder().Symbols().Get("a"));