Merge pull request #1435 from HyeockJinKim/issue1431

Add __repr__ of slice
This commit is contained in:
Jeong YunWon
2019-09-29 17:38:02 +09:00
committed by GitHub
2 changed files with 33 additions and 0 deletions

15
tests/snippets/slice.py Normal file
View File

@@ -0,0 +1,15 @@
a = slice(10)
assert a.start == None
assert a.stop == 10
assert a.step == None
a = slice(0, 10, 1)
assert a.start == 0
assert a.stop == 10
assert a.step == 1
assert slice(10).__repr__() == 'slice(None, 10, None)'
assert slice(None).__repr__() == 'slice(None, None, None)'
assert slice(0, 10, 13).__repr__() == 'slice(0, 10, 13)'
assert slice('0', 1.1, 2+3j).__repr__() == "slice('0', 1.1, (2+3j))"

View File

@@ -49,6 +49,24 @@ impl PySlice {
get_property_value(vm, &self.step)
}
#[pymethod(name = "__repr__")]
fn repr(&self, _vm: &VirtualMachine) -> PyResult<String> {
let start = self.start(_vm);
let stop = self.stop(_vm);
let step = self.step(_vm);
let start_repr = _vm.to_repr(&start)?;
let stop_repr = _vm.to_repr(&stop)?;
let step_repr = _vm.to_repr(&step)?;
Ok(format!(
"slice({}, {}, {})",
start_repr.as_str(),
stop_repr.as_str(),
step_repr.as_str()
))
}
pub fn start_index(&self, vm: &VirtualMachine) -> PyResult<Option<BigInt>> {
if let Some(obj) = &self.start {
to_index_value(vm, obj)