Use bytes, not str, to return C++ strings to Python.

`str` must be valid UTF-8, which is not guaranteed for C++ strings.

Reviewed By: ftynse

Differential Revision: https://reviews.llvm.org/D147818
This commit is contained in:
Chris Jones 2023-04-13 17:05:26 +02:00 committed by Alex Zinenko
parent a5f2e60a91
commit 62bf6c2e10
3 changed files with 14 additions and 3 deletions

View File

@ -490,9 +490,9 @@ public:
"data",
[](PyOpaqueAttribute &self) {
MlirStringRef stringRef = mlirOpaqueAttrGetData(self);
return py::str(stringRef.data, stringRef.length);
return py::bytes(stringRef.data, stringRef.length);
},
"Returns the data for the Opaqued attributes as a string");
"Returns the data for the Opaqued attributes as `bytes`");
}
};
@ -528,6 +528,13 @@ public:
return py::str(stringRef.data, stringRef.length);
},
"Returns the value of the string attribute");
c.def_property_readonly(
"value_bytes",
[](PyStringAttribute &self) {
MlirStringRef stringRef = mlirStringAttrGetValue(self);
return py::bytes(stringRef.data, stringRef.length);
},
"Returns the value of the string attribute as `bytes`");
}
};

View File

@ -248,7 +248,7 @@ def testOpaqueAttr():
oattr = OpaqueAttr(Attribute.parse("#pytest_dummy.dummyattr<>"))
# CHECK: oattr value: pytest_dummy
print("oattr value:", oattr.dialect_namespace)
# CHECK: oattr value: dummyattr<>
# CHECK: oattr value: b'dummyattr<>'
print("oattr value:", oattr.data)
# Test factory methods.
@ -265,6 +265,8 @@ def testStringAttr():
sattr = StringAttr(Attribute.parse('"stringattr"'))
# CHECK: sattr value: stringattr
print("sattr value:", sattr.value)
# CHECK: sattr value: b'stringattr'
print("sattr value:", sattr.value_bytes)
# Test factory methods.
# CHECK: default_get: "foobar"

View File

@ -516,6 +516,8 @@ def testOperationAttributes():
print(f"Attribute type {fattr.type}, value {fattr.value}")
# CHECK: Attribute value text
print(f"Attribute value {sattr.value}")
# CHECK: Attribute value b'text'
print(f"Attribute value {sattr.value_bytes}")
# We don't know in which order the attributes are stored.
# CHECK-DAG: NamedAttribute(dependent="text")