Make case selectors an integer value

Change-Id: I819983701ed6cca4eba1a05b4edc5fdff10fa88d
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/22542
Reviewed-by: David Neto <dneto@google.com>
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index 038e397..89edc77 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -1856,13 +1856,19 @@
   ast::CaseSelectorList selectors;
 
   for (;;) {
+    auto t = peek();
     auto cond = const_literal();
     if (has_error())
       return {};
     if (cond == nullptr)
       break;
+    if (!cond->IsInt()) {
+      set_error(t, "invalid case selector must be an integer value");
+      return {};
+    }
 
-    selectors.push_back(std::move(cond));
+    std::unique_ptr<ast::IntLiteral> selector(cond.release()->AsInt());
+    selectors.push_back(std::move(selector));
   }
 
   return selectors;