[Mlir-commits] [mlir] [mlir][tblgen] Add custom parsing and printing within struct (PR #133939)
Jorn Tuyls
llvmlistbot at llvm.org
Wed Apr 9 05:29:49 PDT 2025
================
@@ -736,6 +736,78 @@ def TypeS : TestType<"TestS"> {
let assemblyFormat = "$a";
}
+/// Test that a `struct` with nested `custom` parser and printer are generated correctly.
+
+// ATTR: ::mlir::Attribute TestTAttr::parse(::mlir::AsmParser &odsParser,
+// ATTR: ::mlir::Type odsType) {
+// ATTR: bool _seen_v0 = false;
+// ATTR: bool _seen_v1 = false;
+// ATTR: bool _seen_v2 = false;
+// ATTR: const auto _loop_body = [&](::llvm::StringRef _paramKey) -> bool {
+// ATTR: if (odsParser.parseEqual())
+// ATTR: return {};
+// ATTR: if (!_seen_v0 && _paramKey == "v0") {
+// ATTR: _seen_v0 = true;
+// ATTR: _result_v0 = ::parseAttrParamA(odsParser, odsType);
+// ATTR: if (::mlir::failed(_result_v0))
+// ATTR: return {};
+// ATTR: } else if (!_seen_v1 && _paramKey == "v1") {
+// ATTR: _seen_v1 = true;
+// ATTR: {
+// ATTR: auto odsCustomResult = parseNestedCustom(odsParser,
+// ATTR-NEXT: ::mlir::detail::unwrapForCustomParse(_result_v1));
+// ATTR: if (::mlir::failed(odsCustomResult)) return {};
+// ATTR: if (::mlir::failed(_result_v1)) {
+// ATTR: odsParser.emitError(odsCustomLoc, "custom parser failed to parse parameter 'v1'");
+// ATTR: return {};
+// ATTR: }
+// ATTR: }
+// ATTR: } else if (!_seen_v2 && _paramKey == "v2") {
----------------
jtuyls wrote:
Yes, it wasn't the main purpose of this test. I just wanted to have a more complex test case with a parameter, custom directive and optional parameter. But I added the internals of this block to the test as well now.
https://github.com/llvm/llvm-project/pull/133939
More information about the Mlir-commits
mailing list