forked from Rust-related/RustPython
Merge pull request #1435 from HyeockJinKim/issue1431
Add __repr__ of slice
This commit is contained in:
15
tests/snippets/slice.py
Normal file
15
tests/snippets/slice.py
Normal 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))"
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user