[clang] [llvm] [HLSL][RootSignature] Implement Parsing of Descriptor Tables (PR #122982)
Finn Plummer via cfe-commits
cfe-commits at lists.llvm.org
Fri Feb 14 13:59:35 PST 2025
================
@@ -93,6 +96,108 @@ class RootSignatureLexer {
}
};
+class RootSignatureParser {
+public:
+ RootSignatureParser(SmallVector<llvm::hlsl::rootsig::RootElement> &Elements,
+ RootSignatureLexer &Lexer, DiagnosticsEngine &Diags);
+
+ /// Iterates over the provided tokens and constructs the in-memory
+ /// representations of the RootElements.
+ ///
+ /// The return value denotes if there was a failure and the method will
+ /// return on the first encountered failure, or, return false if it
+ /// can sucessfully reach the end of the tokens.
+ bool Parse();
+
+private:
+ // Root Element helpers
+ bool ParseRootElement();
+ bool ParseDescriptorTable();
+ bool ParseDescriptorTableClause();
+
+ /// Helper dispatch method
+ ///
+ /// These will switch on the Variant kind to dispatch to the respective Parse
+ /// method and store the parsed value back into Ref.
+ ///
+ /// It is helpful to have a generalized dispatch method so that when we need
+ /// to parse multiple optional parameters in any order, we can invoke this
+ /// method
+ bool ParseParam(llvm::hlsl::rootsig::ParamType Ref);
+
+ // Parse as many optional parameters as possible in any order
+ bool ParseOptionalParams(
+ llvm::SmallDenseMap<TokenKind, llvm::hlsl::rootsig::ParamType> &RefMap);
+
+ // Common parsing helpers
----------------
inbelic wrote:
I restructured the comments a bit so I don't think this applies anymore.
https://github.com/llvm/llvm-project/pull/122982
More information about the cfe-commits
mailing list