Implement array __repr__

This commit is contained in:
Kangzhi Shi committed 2020-08-30 19:28:26 +02:00
1 parent 92d8e2c8da
commit 187afa4e4a
1 file changed
+19
+19
View File
@@ -236,6 +236,20 @@ macro_rules! def_array_enum {
}
}
fn repr(&self, _vm: &VirtualMachine) -> PyResult<String> {
// we don't need ReprGuard here
let s = match self {
$(ArrayContentType::$n(v) => {
if v.is_empty() {
format!("array('{}')", $c)
} else {
format!("array('{}', [{}])", $c, v.iter().map(|x| x.to_string()).join(", "))
}
})*
};
Ok(s)
}
fn iter<'a>(&'a self, vm: &'a VirtualMachine) -> impl Iterator<Item = PyObjectRef> + 'a {
let mut i = 0;
std::iter::from_fn(move || {
@@ -443,6 +457,11 @@ impl PyArray {
self.borrow_value_mut().setitem(needle, obj, vm)
}
#[pymethod(name = "__repr__")]
fn repr(zelf: PyRef<Self>, vm: &VirtualMachine) -> PyResult<String> {
zelf.borrow_value().repr(vm)
}
#[pymethod(name = "__eq__")]
fn eq(&self, other: PyObjectRef, vm: &VirtualMachine) -> PyResult<PyComparisonValue> {
let lhs = self.borrow_value();