[Tint] Allow trailing commas in var decl
Allow trailing commas after the address space in a var decl when no
access mode is provided, as permitted by the spec.
Bug: 42251291
Change-Id: I119ca64d896aa404dea167b5d8e2da9c1fd5a6f7
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/198275
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: Natalie Chouinard <chouinard@google.com>
diff --git a/src/tint/lang/wgsl/reader/parser/parser.cc b/src/tint/lang/wgsl/reader/parser/parser.cc
index a112464..2abc56e 100644
--- a/src/tint/lang/wgsl/reader/parser/parser.cc
+++ b/src/tint/lang/wgsl/reader/parser/parser.cc
@@ -845,7 +845,7 @@
if (address_space.errored) {
return Failure::kErrored;
}
- if (match(Token::Type::kComma)) {
+ if (match(Token::Type::kComma) && !peek().Is(Token::Type::kTemplateArgsRight)) {
auto access = expect_expression("'var' access mode");
if (access.errored) {
return Failure::kErrored;
diff --git a/src/tint/lang/wgsl/reader/parser/variable_decl_test.cc b/src/tint/lang/wgsl/reader/parser/variable_decl_test.cc
index 69f5f20..04b08df 100644
--- a/src/tint/lang/wgsl/reader/parser/variable_decl_test.cc
+++ b/src/tint/lang/wgsl/reader/parser/variable_decl_test.cc
@@ -117,5 +117,22 @@
ast::CheckIdentifier(v->address_space, "push_constant");
}
+TEST_F(WGSLParserTest, VariableDecl_WithAddressSpaceTrailingComma) {
+ auto p = parser("var<private,> my_var : f32");
+ auto v = p->variable_decl();
+ EXPECT_TRUE(v.matched);
+ EXPECT_FALSE(v.errored);
+ EXPECT_FALSE(p->has_error());
+ ast::CheckIdentifier(v->name, "my_var");
+
+ ast::CheckIdentifier(v->type, "f32");
+ ast::CheckIdentifier(v->address_space, "private");
+
+ EXPECT_EQ(v->source.range.begin.line, 1u);
+ EXPECT_EQ(v->source.range.begin.column, 15u);
+ EXPECT_EQ(v->source.range.end.line, 1u);
+ EXPECT_EQ(v->source.range.end.column, 21u);
+}
+
} // namespace
} // namespace tint::wgsl::reader