[Mlir-commits] [mlir] [MLIR] print/parse resource handle key quoted and escaped (PR #119746)
Soren Lassen
llvmlistbot at llvm.org
Thu Dec 12 11:10:00 PST 2024
================
@@ -3331,41 +3331,41 @@ void OperationPrinter::printResourceFileMetadata(
auto printFn = [&](StringRef key, ResourceBuilder::ValueFn valueFn) {
checkAddMetadataDict();
- auto printFormatting = [&]() {
- // Emit the top-level resource entry if we haven't yet.
- if (!std::exchange(hadResource, true)) {
- if (needResourceComma)
- os << "," << newLine;
- os << " " << dictName << "_resources: {" << newLine;
- }
- // Emit the parent resource entry if we haven't yet.
- if (!std::exchange(hadEntry, true)) {
- if (needEntryComma)
- os << "," << newLine;
- os << " " << name << ": {" << newLine;
- } else {
- os << "," << newLine;
- }
- };
-
+ std::string resourceStr;
+ auto printResourceStr = [&](raw_ostream &os) { os << resourceStr; };
std::optional<uint64_t> charLimit =
printerFlags.getLargeResourceStringLimit();
if (charLimit.has_value()) {
- std::string resourceStr;
llvm::raw_string_ostream ss(resourceStr);
valueFn(ss);
- // Only print entry if it's string is small enough
+ // Only print entry if its string is small enough.
if (resourceStr.size() > charLimit.value())
return;
- printFormatting();
- os << " " << key << ": " << resourceStr;
+ // Don't recompute resourceStr when valueFn is called below.
+ valueFn = printResourceStr;
----------------
sorenlassen wrote:
the old implementation of `printFn` used the `printFormatting` closure to reduce code duplication across the two charLimit conditional branches, but there was still some code duplication to print the key which became worse with the new logic
therefore I refactored the implementation to instead “reprogram” valueFn in the case where resourceStr is materialized to check charLimit
https://github.com/llvm/llvm-project/pull/119746
More information about the Mlir-commits
mailing list