================
@@ -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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits