[clang] [HLSL] Rewrite semantics parsing (PR #152537)
Steven Perron via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 18 08:42:59 PDT 2025
================
@@ -118,6 +118,48 @@ static void fixSeparateAttrArgAndNumber(StringRef ArgStr, SourceLocation ArgLoc,
Slot = new (Ctx) IdentifierLoc(ArgLoc, PP.getIdentifierInfo(FixedArg));
}
+Parser::ParsedSemantic Parser::ParseHLSLSemantic() {
+ assert(Tok.is(tok::identifier) && "Not a HLSL Annotation");
+
+ // Semantic pattern: [A-Za-z_]+[0-9]*
+ // The first part is the semantic name, the second is the optional
+ // semantic index.
+ bool Invalid = false;
+ SmallString<256> Buffer;
+ Buffer.resize(Tok.getLength() + 1);
+ StringRef Identifier = PP.getSpelling(Tok, Buffer);
+ if (Invalid) {
+ // FIXME: fix error message.
+ Diag(Tok.getLocation(), diag::err_expected_semantic_identifier);
+ return {/* Name= */ "", /* Location= */ 0, /* Explicit= */ false};
+ }
+
+ unsigned I = 0;
+ for (; I < Identifier.size() && !isDigit(Identifier[I]); ++I)
+ continue;
----------------
s-perron wrote:
It will probably be better to start at the end, and find the first character that is not a digit. This will allow digits to appear in the middle of the semantic name. Also, the name will often be larger than the index, do may be a little faster.
https://github.com/llvm/llvm-project/pull/152537
More information about the cfe-commits
mailing list