Skip to content

Commit 91b5a18

Browse files
authored
Merge pull request RustPython#3659 from youknowone/pytuple-as-slice
PyTuple deref to [PyObjectRef]
2 parents 666db0f + a713502 commit 91b5a18

40 files changed

+164
-148
lines changed

derive/src/pyclass.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,7 @@ impl GetSetNursery {
694694

695695
fn validate(&mut self) -> Result<()> {
696696
let mut errors = Vec::new();
697-
for ((name, _cfgs), (getter, setter, deleter)) in self.map.iter() {
697+
for ((name, _cfgs), (getter, setter, deleter)) in &self.map {
698698
if getter.is_none() {
699699
errors.push(syn::Error::new_spanned(
700700
setter.as_ref().or(deleter.as_ref()).unwrap(),

stdlib/src/binascii.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ mod decl {
3838
fn hexlify(data: ArgBytesLike) -> Vec<u8> {
3939
data.with_ref(|bytes| {
4040
let mut hex = Vec::<u8>::with_capacity(bytes.len() * 2);
41-
for b in bytes.iter() {
41+
for b in bytes {
4242
hex.push(hex_nibble(b >> 4));
4343
hex.push(hex_nibble(b & 0xf));
4444
}

stdlib/src/math.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,7 @@ mod math {
516516
}
517517

518518
let mut res = argvec[0].as_bigint().clone();
519-
for num in argvec[1..].iter() {
519+
for num in &argvec[1..] {
520520
res = op(&res, num)
521521
}
522522
res

stdlib/src/posixsubprocess.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ mod _posixsubprocess {
3333
.chain(std::iter::once(std::ptr::null()))
3434
.collect::<Vec<_>>()
3535
};
36-
let argv = cstrs_to_ptrs(args.args.as_slice());
36+
let argv = cstrs_to_ptrs(&args.args);
3737
let argv = &argv;
38-
let envp = args.env_list.as_ref().map(|s| cstrs_to_ptrs(s.as_slice()));
38+
let envp = args.env_list.as_ref().map(|s| cstrs_to_ptrs(s));
3939
let envp = envp.as_deref();
4040
match unsafe { nix::unistd::fork() }.map_err(|err| err.to_pyexception(vm))? {
4141
nix::unistd::ForkResult::Child => exec(&args, ProcArgs { argv, envp }),
@@ -149,7 +149,7 @@ fn exec_inner(args: &ForkExecArgs, procargs: ProcArgs) -> nix::Result<Never> {
149149

150150
if args.close_fds {
151151
#[cfg(not(target_os = "redox"))]
152-
close_fds(3, args.fds_to_keep.as_slice())?;
152+
close_fds(3, &args.fds_to_keep)?;
153153
}
154154

155155
let mut first_err = None;

stdlib/src/random.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,9 @@ mod _random {
8888

8989
#[pymethod]
9090
fn seed(&self, n: OptionalOption<PyObjectRef>, vm: &VirtualMachine) -> PyResult<()> {
91-
let new_rng = match n.flatten() {
92-
None => PyRng::default(),
93-
Some(n) => {
91+
let new_rng = n
92+
.flatten()
93+
.map(|n| {
9494
// Fallback to using hash if object isn't Int-like.
9595
let (_, mut key) = match n.downcast::<PyInt>() {
9696
Ok(n) => n.as_bigint().abs(),
@@ -101,9 +101,12 @@ mod _random {
101101
key.reverse();
102102
}
103103
let key = if key.is_empty() { &[0] } else { key.as_slice() };
104-
PyRng::MT(Box::new(mt19937::MT19937::new_with_slice_seed(key)))
105-
}
106-
};
104+
Ok(PyRng::MT(Box::new(mt19937::MT19937::new_with_slice_seed(
105+
key,
106+
))))
107+
})
108+
.transpose()?
109+
.unwrap_or_default();
107110

108111
*self.rng.lock() = new_rng;
109112
Ok(())

stdlib/src/socket.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -450,13 +450,12 @@ mod _socket {
450450
obj.class().name()
451451
))
452452
})?;
453-
let tuple = tuple.as_slice();
454453
if tuple.len() != 2 {
455454
return Err(vm.new_type_error(
456455
"AF_INET address must be a pair (host, post)".to_owned(),
457456
));
458457
}
459-
let addr = Address::from_tuple(tuple, vm)?;
458+
let addr = Address::from_tuple(&tuple, vm)?;
460459
let mut addr4 = get_addr(vm, addr.host, c::AF_INET)?;
461460
match &mut addr4 {
462461
SocketAddr::V4(addr4) => {
@@ -474,15 +473,14 @@ mod _socket {
474473
obj.class().name()
475474
))
476475
})?;
477-
let tuple = tuple.as_slice();
478476
match tuple.len() {
479477
2 | 3 | 4 => {}
480478
_ => return Err(vm.new_type_error(
481479
"AF_INET6 address must be a tuple (host, port[, flowinfo[, scopeid]])"
482480
.to_owned(),
483481
)),
484482
}
485-
let (addr, flowinfo, scopeid) = Address::from_tuple_ipv6(tuple, vm)?;
483+
let (addr, flowinfo, scopeid) = Address::from_tuple_ipv6(&tuple, vm)?;
486484
let mut addr6 = get_addr(vm, addr.host, c::AF_INET6)?;
487485
match &mut addr6 {
488486
SocketAddr::V6(addr6) => {
@@ -1044,10 +1042,10 @@ mod _socket {
10441042
impl TryFromObject for Address {
10451043
fn try_from_object(vm: &VirtualMachine, obj: PyObjectRef) -> PyResult<Self> {
10461044
let tuple = PyTupleRef::try_from_object(vm, obj)?;
1047-
if tuple.as_slice().len() != 2 {
1045+
if tuple.len() != 2 {
10481046
Err(vm.new_type_error("Address tuple should have only 2 values".to_owned()))
10491047
} else {
1050-
Self::from_tuple(tuple.as_slice(), vm)
1048+
Self::from_tuple(&tuple, vm)
10511049
}
10521050
}
10531051
}
@@ -1481,12 +1479,11 @@ mod _socket {
14811479
flags: i32,
14821480
vm: &VirtualMachine,
14831481
) -> PyResult<(String, String)> {
1484-
let address = address.as_slice();
14851482
match address.len() {
14861483
2 | 3 | 4 => {}
14871484
_ => return Err(vm.new_type_error("illegal sockaddr argument".to_owned())),
14881485
}
1489-
let (addr, flowinfo, scopeid) = Address::from_tuple_ipv6(address, vm)?;
1486+
let (addr, flowinfo, scopeid) = Address::from_tuple_ipv6(&address, vm)?;
14901487
let hints = dns_lookup::AddrInfoHints {
14911488
address: c::AF_UNSPEC,
14921489
socktype: c::SOCK_DGRAM,

vm/src/buffer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ impl FormatSpec {
361361

362362
let mut args = args.into_iter();
363363
// Loop over all opcodes:
364-
for code in self.codes.iter() {
364+
for code in &self.codes {
365365
buffer = &mut buffer[code.pre_padding..];
366366
debug!("code: {:?}", code);
367367
match code.code {

vm/src/builtins/bytearray.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,10 +185,10 @@ impl PyByteArray {
185185
bytes_from_object(vm, &value)?
186186
};
187187
if let Some(mut w) = zelf.try_resizable_opt() {
188-
w.elements.set_item_by_slice(vm, slice, items.as_slice())
188+
w.elements.set_item_by_slice(vm, slice, &items)
189189
} else {
190190
zelf.borrow_buf_mut()
191-
.set_item_by_slice_no_resize(vm, slice, items.as_slice())
191+
.set_item_by_slice_no_resize(vm, slice, &items)
192192
}
193193
}
194194
}

vm/src/builtins/code.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ fn borrow_obj_constant(obj: &PyObject) -> BorrowedConstant<PyConstant> {
5252
}
5353
ref t @ super::tuple::PyTuple => {
5454
BorrowedConstant::Tuple {
55-
elements: Box::new(t.as_slice().iter().map(|o| borrow_obj_constant(o))),
55+
elements: Box::new(t.iter().map(|o| borrow_obj_constant(o))),
5656
}
5757
}
5858
super::singletons::PyNone => BorrowedConstant::None,

vm/src/builtins/function/jitfunc.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,6 @@ pub(crate) fn get_jit_args<'a>(
174174

175175
// fill in positional defaults
176176
if let Some(defaults) = defaults {
177-
let defaults = defaults.as_slice();
178177
for (i, default) in defaults.iter().enumerate() {
179178
let arg_idx = i + func.code.arg_count - defaults.len();
180179
if !jit_args.is_set(arg_idx) {

0 commit comments

Comments
 (0)