================
@@ -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
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to