From 4e6e1138160a7a003c5d09e6d6e9ba45dcb50347 Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Thu, 9 Dec 2021 16:55:04 +0000 Subject: [PATCH] reader/spirv: Allow leading underscore in identifiers Bug: tint:1292 Change-Id: I738c981f503545075115101a3ead30941a19d95a Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/72320 Reviewed-by: David Neto Kokoro: Kokoro Commit-Queue: Ben Clayton --- src/reader/spirv/parser_impl.cc | 9 ++++++++- src/reader/spirv/parser_impl_test.cc | 5 +++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/reader/spirv/parser_impl.cc b/src/reader/spirv/parser_impl.cc index 6e92c3e247..544fcfe17e 100644 --- a/src/reader/spirv/parser_impl.cc +++ b/src/reader/spirv/parser_impl.cc @@ -750,7 +750,14 @@ bool ParserImpl::IsValidIdentifier(const std::string& str) { return false; } std::locale c_locale("C"); - if (!std::isalpha(str[0], c_locale)) { + if (str[0] == '_') { + if (str.length() == 1u || str[1] == '_') { + // https://www.w3.org/TR/WGSL/#identifiers + // must not be '_' (a single underscore) + // must not start with two underscores + return false; + } + } else if (!std::isalpha(str[0], c_locale)) { return false; } for (const char& ch : str) { diff --git a/src/reader/spirv/parser_impl_test.cc b/src/reader/spirv/parser_impl_test.cc index 72c8446dd1..49ccad3713 100644 --- a/src/reader/spirv/parser_impl_test.cc +++ b/src/reader/spirv/parser_impl_test.cc @@ -202,8 +202,9 @@ TEST_F(SpvParserTest, Impl_Source_InvalidId) { TEST_F(SpvParserTest, Impl_IsValidIdentifier) { EXPECT_FALSE(ParserImpl::IsValidIdentifier("")); // empty - EXPECT_FALSE( - ParserImpl::IsValidIdentifier("_")); // leading underscore, but ok later + EXPECT_FALSE(ParserImpl::IsValidIdentifier("_")); + EXPECT_FALSE(ParserImpl::IsValidIdentifier("__")); + EXPECT_TRUE(ParserImpl::IsValidIdentifier("_x")); EXPECT_FALSE( ParserImpl::IsValidIdentifier("9")); // leading digit, but ok later EXPECT_FALSE(ParserImpl::IsValidIdentifier(" ")); // leading space