Use a context object instead of a singleton

This Cl replaces the TypeManager singleton with a context object.

Bug: tint:29
Change-Id: Ia662709db1b562c34955633977ce4363f28f238e
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/17780
Reviewed-by: David Neto <dneto@google.com>
diff --git a/src/reader/wgsl/parser_impl_and_expression_test.cc b/src/reader/wgsl/parser_impl_and_expression_test.cc
index be1c581..262611c 100644
--- a/src/reader/wgsl/parser_impl_and_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_and_expression_test.cc
@@ -18,17 +18,16 @@
 #include "src/ast/identifier_expression.h"
 #include "src/ast/relational_expression.h"
 #include "src/reader/wgsl/parser_impl.h"
+#include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
 namespace reader {
 namespace wgsl {
 
-using ParserImplTest = testing::Test;
-
 TEST_F(ParserImplTest, AndExpression_Parses) {
-  ParserImpl p{"a & true"};
-  auto e = p.and_expression();
-  ASSERT_FALSE(p.has_error()) << p.error();
+  auto p = parser("a & true");
+  auto e = p->and_expression();
+  ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsRelational());
@@ -48,24 +47,24 @@
 }
 
 TEST_F(ParserImplTest, AndExpression_InvalidLHS) {
-  ParserImpl p{"if (a) {} & true"};
-  auto e = p.and_expression();
-  ASSERT_FALSE(p.has_error()) << p.error();
+  auto p = parser("if (a) {} & true");
+  auto e = p->and_expression();
+  ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_EQ(e, nullptr);
 }
 
 TEST_F(ParserImplTest, AndExpression_InvalidRHS) {
-  ParserImpl p{"true & if (a) {}"};
-  auto e = p.and_expression();
-  ASSERT_TRUE(p.has_error());
+  auto p = parser("true & if (a) {}");
+  auto e = p->and_expression();
+  ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
-  EXPECT_EQ(p.error(), "1:8: unable to parse right side of & expression");
+  EXPECT_EQ(p->error(), "1:8: unable to parse right side of & expression");
 }
 
 TEST_F(ParserImplTest, AndExpression_NoOr_ReturnsLHS) {
-  ParserImpl p{"a true"};
-  auto e = p.and_expression();
-  ASSERT_FALSE(p.has_error()) << p.error();
+  auto p = parser("a true");
+  auto e = p->and_expression();
+  ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsIdentifier());
 }