[Mlir-commits] [mlir] [mlir] Add struct parsing and printing utilities (PR #133939)
Mehdi Amini
llvmlistbot at llvm.org
Thu Apr 3 09:40:08 PDT 2025
================
@@ -316,6 +316,43 @@ static ParseResult parseCustomFloatAttr(AsmParser &p, StringAttr &typeStrAttr,
return success();
}
+//===----------------------------------------------------------------------===//
+// TestCustomStructAttr
+//===----------------------------------------------------------------------===//
+
+Attribute TestCustomStructAttr::parse(AsmParser &p, Type type) {
+ std::string typeStr;
+ int64_t value;
+ FailureOr<ArrayAttr> optValue;
+ if (failed(p.parseStruct(AsmParser::Delimiter::LessGreater,
+ {"type_str", "value", "opt_value"},
+ {[&]() { return p.parseString(&typeStr); },
+ [&]() { return p.parseInteger(value); },
+ [&]() {
+ optValue = mlir::FieldParser<ArrayAttr>::parse(p);
+ return success(succeeded(optValue));
+ }}))) {
+ p.emitError(p.getCurrentLocation())
+ << "failed parsing `TestCustomStructAttr`";
+ return {};
+ }
+ return get(p.getContext(), StringAttr::get(p.getContext(), typeStr), value,
+ optValue.value_or(ArrayAttr()));
+}
+
+void TestCustomStructAttr::print(AsmPrinter &p) const {
+ p << "<";
+ p.printStruct(
+ {"type_str", "value"},
+ {[&](AsmPrinter &p) { p.printStrippedAttrOrType(getTypeStr()); },
+ [&](AsmPrinter &p) { p.printStrippedAttrOrType(getValue()); }});
----------------
joker-eph wrote:
Could we have an overload (or just update it?) for `printStruct()` where the callback does not take any argument?
The `(AsmPrinter &p)` is redundant here I believe.
https://github.com/llvm/llvm-project/pull/133939
More information about the Mlir-commits
mailing list