Add case_selectors update

This CL adds the missing case_selectors option from the grammar updates.

Change-Id: Ia6c110e917dd574711d396fb34ad53a2a67cf1fe
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/22306
Reviewed-by: David Neto <dneto@google.com>
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index c02a375..e81ef0c 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -1800,7 +1800,7 @@
 }
 
 // switch_body
-//   : CASE const_literal COLON BRACKET_LEFT case_body BRACKET_RIGHT
+//   : CASE case_selectors COLON BRACKET_LEFT case_body BRACKET_RIGHT
 //   | DEFAULT COLON BRACKET_LEFT case_body BRACKET_RIGHT
 std::unique_ptr<ast::CaseStatement> ParserImpl::switch_body() {
   auto t = peek();
@@ -1813,14 +1813,14 @@
   auto stmt = std::make_unique<ast::CaseStatement>();
   stmt->set_source(source);
   if (t.IsCase()) {
-    auto cond = const_literal();
+    auto cond = case_selectors();
     if (has_error())
       return nullptr;
-    if (cond == nullptr) {
+    if (cond.empty()) {
       set_error(peek(), "unable to parse case conditional");
       return nullptr;
     }
-    stmt->set_condition(std::move(cond));
+    stmt->set_conditions(std::move(cond));
   }
 
   t = next();
@@ -1850,6 +1850,24 @@
   return stmt;
 }
 
+// case_selectors
+//   : const_literal (COMMA const_literal)*
+ast::CaseSelectorList ParserImpl::case_selectors() {
+  ast::CaseSelectorList selectors;
+
+  for (;;) {
+    auto cond = const_literal();
+    if (has_error())
+      return {};
+    if (cond == nullptr)
+      break;
+
+    selectors.push_back(std::move(cond));
+  }
+
+  return selectors;
+}
+
 // case_body
 //   :
 //   | statement case_body