[Mlir-commits] [mlir] [mlir][python] namespace generated enums in python (PR #77830)
Maksim Levental
llvmlistbot at llvm.org
Fri Jan 12 16:58:10 PST 2024
================
@@ -120,11 +125,34 @@ static bool emitAttributeBuilder(const EnumAttr &enumAttr, raw_ostream &os) {
/// Emits an attribute builder for the given dialect enum attribute to support
/// automatic conversion between enum values and attributes in Python. Returns
/// `false` on success, `true` on failure.
-static bool emitDialectEnumAttributeBuilder(StringRef attrDefName,
- StringRef formatString,
- raw_ostream &os) {
- os << llvm::formatv("@register_attribute_builder(\"{0}\")\n", attrDefName);
- os << llvm::formatv("def _{0}(x, context):\n", attrDefName.lower());
+static bool emitDialectEnumAttributeBuilderRegistration(const llvm::Record &def,
+ raw_ostream &os) {
+ const AttrOrTypeDef attr(&def);
+ StringRef mnemonic = attr.getMnemonic().value();
+ std::optional<StringRef> assemblyFormat = attr.getAssemblyFormat();
+ StringRef dialect = attr.getDialect().getName();
+ std::string formatString;
+ if (assemblyFormat == "`<` $value `>`")
+ formatString =
+ llvm::formatv("#{0}.{1}<{{str(x)}>", dialect, mnemonic).str();
+ else if (assemblyFormat == "$value")
+ formatString =
+ llvm::formatv("#{0}<{1} {{str(x)}>", dialect, mnemonic).str();
+ else {
+ llvm::errs()
+ << "unsupported assembly format for python enum bindings generation";
+ return true;
+ }
----------------
makslevental wrote:
This simply got moved here from below.
https://github.com/llvm/llvm-project/pull/77830
More information about the Mlir-commits
mailing list