Author: Finn Plummer Date: 2025-04-24T09:55:31-07:00 New Revision: e329b6c530f30bc645ea188cd25068c6759eb16a
URL: https://github.com/llvm/llvm-project/commit/e329b6c530f30bc645ea188cd25068c6759eb16a DIFF: https://github.com/llvm/llvm-project/commit/e329b6c530f30bc645ea188cd25068c6759eb16a.diff LOG: [NFC][RootSignatures] Conform to new std::optional calling conventions (#136747) - It was determined to define the parsing methods much more inline with a recursive descent parser to follow the EBNF notation better - As part of this change, we decided to go with a calling convention to the parse.* methods of returning an optional rather than a bool and a reference to the parsed struct This is a clean-up task from https://github.com/llvm/llvm-project/pull/133800 Added: Modified: clang/include/clang/Parse/ParseHLSLRootSignature.h clang/lib/Parse/ParseHLSLRootSignature.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Parse/ParseHLSLRootSignature.h b/clang/include/clang/Parse/ParseHLSLRootSignature.h index 3eb3f8ea8422d..d9f121030c1fc 100644 --- a/clang/include/clang/Parse/ParseHLSLRootSignature.h +++ b/clang/include/clang/Parse/ParseHLSLRootSignature.h @@ -71,8 +71,9 @@ class RootSignatureParser { // expected, or, there is a lexing error /// Root Element parse methods: - bool parseDescriptorTable(); - bool parseDescriptorTableClause(); + std::optional<llvm::hlsl::rootsig::DescriptorTable> parseDescriptorTable(); + std::optional<llvm::hlsl::rootsig::DescriptorTableClause> + parseDescriptorTableClause(); /// Parameter arguments (eg. `bReg`, `space`, ...) can be specified in any /// order and only exactly once. `ParsedClauseParams` denotes the current diff --git a/clang/lib/Parse/ParseHLSLRootSignature.cpp b/clang/lib/Parse/ParseHLSLRootSignature.cpp index 4f8bfccfa2243..1bf33b8e8329c 100644 --- a/clang/lib/Parse/ParseHLSLRootSignature.cpp +++ b/clang/lib/Parse/ParseHLSLRootSignature.cpp @@ -26,22 +26,14 @@ RootSignatureParser::RootSignatureParser(SmallVector<RootElement> &Elements, bool RootSignatureParser::parse() { // Iterate as many RootElements as possible - while (tryConsumeExpectedToken(TokenKind::kw_DescriptorTable)) { - // Dispatch onto parser method. - // We guard against the unreachable here as we just ensured that CurToken - // will be one of the kinds in the while condition - switch (CurToken.TokKind) { - case TokenKind::kw_DescriptorTable: - if (parseDescriptorTable()) + do { + if (tryConsumeExpectedToken(TokenKind::kw_DescriptorTable)) { + auto Table = parseDescriptorTable(); + if (!Table.has_value()) return true; - break; - default: - llvm_unreachable("Switch for consumed token was not provided"); + Elements.push_back(*Table); } - - if (!tryConsumeExpectedToken(TokenKind::pu_comma)) - break; - } + } while (tryConsumeExpectedToken(TokenKind::pu_comma)); if (consumeExpectedToken(TokenKind::end_of_stream, diag::err_hlsl_unexpected_end_of_params, @@ -51,38 +43,38 @@ bool RootSignatureParser::parse() { return false; } -bool RootSignatureParser::parseDescriptorTable() { +std::optional<DescriptorTable> RootSignatureParser::parseDescriptorTable() { assert(CurToken.TokKind == TokenKind::kw_DescriptorTable && "Expects to only be invoked starting at given keyword"); - DescriptorTable Table; - if (consumeExpectedToken(TokenKind::pu_l_paren, diag::err_expected_after, CurToken.TokKind)) - return true; - - // Iterate as many Clauses as possible - while (tryConsumeExpectedToken({TokenKind::kw_CBV, TokenKind::kw_SRV, - TokenKind::kw_UAV, TokenKind::kw_Sampler})) { - if (parseDescriptorTableClause()) - return true; + return std::nullopt; - Table.NumClauses++; + DescriptorTable Table; - if (!tryConsumeExpectedToken(TokenKind::pu_comma)) - break; - } + // Iterate as many Clauses as possible + do { + if (tryConsumeExpectedToken({TokenKind::kw_CBV, TokenKind::kw_SRV, + TokenKind::kw_UAV, TokenKind::kw_Sampler})) { + auto Clause = parseDescriptorTableClause(); + if (!Clause.has_value()) + return std::nullopt; + Elements.push_back(*Clause); + Table.NumClauses++; + } + } while (tryConsumeExpectedToken(TokenKind::pu_comma)); if (consumeExpectedToken(TokenKind::pu_r_paren, diag::err_hlsl_unexpected_end_of_params, /*param of=*/TokenKind::kw_DescriptorTable)) - return true; + return std::nullopt; - Elements.push_back(Table); - return false; + return Table; } -bool RootSignatureParser::parseDescriptorTableClause() { +std::optional<DescriptorTableClause> +RootSignatureParser::parseDescriptorTableClause() { assert((CurToken.TokKind == TokenKind::kw_CBV || CurToken.TokKind == TokenKind::kw_SRV || CurToken.TokKind == TokenKind::kw_UAV || @@ -93,7 +85,7 @@ bool RootSignatureParser::parseDescriptorTableClause() { if (consumeExpectedToken(TokenKind::pu_l_paren, diag::err_expected_after, CurToken.TokKind)) - return true; + return std::nullopt; DescriptorTableClause Clause; TokenKind ExpectedReg; @@ -120,13 +112,13 @@ bool RootSignatureParser::parseDescriptorTableClause() { auto Params = parseDescriptorTableClauseParams(ExpectedReg); if (!Params.has_value()) - return true; + return std::nullopt; // Check mandatory parameters were provided if (!Params->Reg.has_value()) { getDiags().Report(CurToken.TokLoc, diag::err_hlsl_rootsig_missing_param) << ExpectedReg; - return true; + return std::nullopt; } Clause.Reg = Params->Reg.value(); @@ -138,10 +130,9 @@ bool RootSignatureParser::parseDescriptorTableClause() { if (consumeExpectedToken(TokenKind::pu_r_paren, diag::err_hlsl_unexpected_end_of_params, /*param of=*/ParamKind)) - return true; + return std::nullopt; - Elements.push_back(Clause); - return false; + return Clause; } std::optional<RootSignatureParser::ParsedClauseParams> _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits