[llvm-branch-commits] [clang] [llvm] [HLSL][RootSignature] Implement Parsing of Descriptor Tables (PR #122982)
Justin Bogner via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Feb 3 10:32:00 PST 2025
================
@@ -80,6 +85,99 @@ class RootSignatureLexer {
}
};
+class RootSignatureParser {
+public:
+ RootSignatureParser(SmallVector<rs::RootElement> &Elements,
+ const SmallVector<RootSignatureToken> &Tokens,
+ 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 First);
+ 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(rs::ParamType Ref);
+
+ // Parse as many optional parameters as possible in any order
+ bool
+ ParseOptionalParams(llvm::SmallDenseMap<TokenKind, rs::ParamType> RefMap);
----------------
bogner wrote:
Do you really want to be passing a `SmallDenseMap` by value here? This and the other similar APIs should probably be using references.
https://github.com/llvm/llvm-project/pull/122982
More information about the llvm-branch-commits
mailing list