ci: updates for rust 1.71
This commit is contained in:
parent
bb05896324
commit
b65cbb958b
|
@ -10,7 +10,7 @@ fn iter_dict(b: &mut Bencher<'_>) {
|
||||||
let dict = (0..LEN as u64).map(|i| (i, i * 2)).into_py_dict(py);
|
let dict = (0..LEN as u64).map(|i| (i, i * 2)).into_py_dict(py);
|
||||||
let mut sum = 0;
|
let mut sum = 0;
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
for (k, _v) in dict.iter() {
|
for (k, _v) in dict {
|
||||||
let i: u64 = k.extract().unwrap();
|
let i: u64 = k.extract().unwrap();
|
||||||
sum += i;
|
sum += i;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ fn iter_list(b: &mut Bencher<'_>) {
|
||||||
let list = PyList::new(py, 0..LEN);
|
let list = PyList::new(py, 0..LEN);
|
||||||
let mut sum = 0;
|
let mut sum = 0;
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
for x in list.iter() {
|
for x in list {
|
||||||
let i: u64 = x.extract().unwrap();
|
let i: u64 = x.extract().unwrap();
|
||||||
sum += i;
|
sum += i;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ fn iter_set(b: &mut Bencher<'_>) {
|
||||||
let set = PySet::new(py, &(0..LEN).collect::<Vec<_>>()).unwrap();
|
let set = PySet::new(py, &(0..LEN).collect::<Vec<_>>()).unwrap();
|
||||||
let mut sum = 0;
|
let mut sum = 0;
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
for x in set.iter() {
|
for x in set {
|
||||||
let i: u64 = x.extract().unwrap();
|
let i: u64 = x.extract().unwrap();
|
||||||
sum += i;
|
sum += i;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ fn iter_tuple(b: &mut Bencher<'_>) {
|
||||||
let tuple = PyTuple::new(py, 0..LEN);
|
let tuple = PyTuple::new(py, 0..LEN);
|
||||||
let mut sum = 0;
|
let mut sum = 0;
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
for x in tuple.iter() {
|
for x in tuple {
|
||||||
let i: u64 = x.extract().unwrap();
|
let i: u64 = x.extract().unwrap();
|
||||||
sum += i;
|
sum += i;
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,7 +97,7 @@ pub fn impl_methods(
|
||||||
|
|
||||||
let mut implemented_proto_fragments = HashSet::new();
|
let mut implemented_proto_fragments = HashSet::new();
|
||||||
|
|
||||||
for iimpl in impls.iter_mut() {
|
for iimpl in impls {
|
||||||
match iimpl {
|
match iimpl {
|
||||||
syn::ImplItem::Fn(meth) => {
|
syn::ImplItem::Fn(meth) => {
|
||||||
let mut fun_options = PyFunctionOptions::from_attrs(&mut meth.attrs)?;
|
let mut fun_options = PyFunctionOptions::from_attrs(&mut meth.attrs)?;
|
||||||
|
|
|
@ -79,7 +79,7 @@ pub fn get_doc(attrs: &[syn::Attribute], mut text_signature: Option<String>) ->
|
||||||
let mut first = true;
|
let mut first = true;
|
||||||
let mut current_part = text_signature.unwrap_or_default();
|
let mut current_part = text_signature.unwrap_or_default();
|
||||||
|
|
||||||
for attr in attrs.iter() {
|
for attr in attrs {
|
||||||
if attr.path().is_ident("doc") {
|
if attr.path().is_ident("doc") {
|
||||||
if let Ok(nv) = attr.meta.require_name_value() {
|
if let Ok(nv) = attr.meta.require_name_value() {
|
||||||
if !first {
|
if !first {
|
||||||
|
|
|
@ -22,7 +22,7 @@ impl DictSize {
|
||||||
|
|
||||||
fn iter_dict(&mut self, _py: Python<'_>, dict: &PyDict) -> PyResult<u32> {
|
fn iter_dict(&mut self, _py: Python<'_>, dict: &PyDict) -> PyResult<u32> {
|
||||||
let mut seen = 0u32;
|
let mut seen = 0u32;
|
||||||
for (sym, values) in dict.iter() {
|
for (sym, values) in dict {
|
||||||
seen += 1;
|
seen += 1;
|
||||||
println!(
|
println!(
|
||||||
"{:4}/{:4} iterations:{}=>{}",
|
"{:4}/{:4} iterations:{}=>{}",
|
||||||
|
|
|
@ -57,7 +57,7 @@ where
|
||||||
fn extract(ob: &'source PyAny) -> Result<Self, PyErr> {
|
fn extract(ob: &'source PyAny) -> Result<Self, PyErr> {
|
||||||
let dict: &PyDict = ob.downcast()?;
|
let dict: &PyDict = ob.downcast()?;
|
||||||
let mut ret = hashbrown::HashMap::with_capacity_and_hasher(dict.len(), S::default());
|
let mut ret = hashbrown::HashMap::with_capacity_and_hasher(dict.len(), S::default());
|
||||||
for (k, v) in dict.iter() {
|
for (k, v) in dict {
|
||||||
ret.insert(K::extract(k)?, V::extract(v)?);
|
ret.insert(K::extract(k)?, V::extract(v)?);
|
||||||
}
|
}
|
||||||
Ok(ret)
|
Ok(ret)
|
||||||
|
|
|
@ -125,7 +125,7 @@ where
|
||||||
fn extract(ob: &'source PyAny) -> Result<Self, PyErr> {
|
fn extract(ob: &'source PyAny) -> Result<Self, PyErr> {
|
||||||
let dict: &PyDict = ob.downcast()?;
|
let dict: &PyDict = ob.downcast()?;
|
||||||
let mut ret = indexmap::IndexMap::with_capacity_and_hasher(dict.len(), S::default());
|
let mut ret = indexmap::IndexMap::with_capacity_and_hasher(dict.len(), S::default());
|
||||||
for (k, v) in dict.iter() {
|
for (k, v) in dict {
|
||||||
ret.insert(K::extract(k)?, V::extract(v)?);
|
ret.insert(K::extract(k)?, V::extract(v)?);
|
||||||
}
|
}
|
||||||
Ok(ret)
|
Ok(ret)
|
||||||
|
|
|
@ -74,7 +74,7 @@ where
|
||||||
fn extract(ob: &'source PyAny) -> Result<Self, PyErr> {
|
fn extract(ob: &'source PyAny) -> Result<Self, PyErr> {
|
||||||
let dict: &PyDict = ob.downcast()?;
|
let dict: &PyDict = ob.downcast()?;
|
||||||
let mut ret = collections::HashMap::with_capacity_and_hasher(dict.len(), S::default());
|
let mut ret = collections::HashMap::with_capacity_and_hasher(dict.len(), S::default());
|
||||||
for (k, v) in dict.iter() {
|
for (k, v) in dict {
|
||||||
ret.insert(K::extract(k)?, V::extract(v)?);
|
ret.insert(K::extract(k)?, V::extract(v)?);
|
||||||
}
|
}
|
||||||
Ok(ret)
|
Ok(ret)
|
||||||
|
@ -94,7 +94,7 @@ where
|
||||||
fn extract(ob: &'source PyAny) -> Result<Self, PyErr> {
|
fn extract(ob: &'source PyAny) -> Result<Self, PyErr> {
|
||||||
let dict: &PyDict = ob.downcast()?;
|
let dict: &PyDict = ob.downcast()?;
|
||||||
let mut ret = collections::BTreeMap::new();
|
let mut ret = collections::BTreeMap::new();
|
||||||
for (k, v) in dict.iter() {
|
for (k, v) in dict {
|
||||||
ret.insert(K::extract(k)?, V::extract(v)?);
|
ret.insert(K::extract(k)?, V::extract(v)?);
|
||||||
}
|
}
|
||||||
Ok(ret)
|
Ok(ret)
|
||||||
|
|
|
@ -724,7 +724,7 @@ impl_native_exception!(
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
macro_rules! test_exception {
|
macro_rules! test_exception {
|
||||||
($exc_ty:ident $(, $constructor:expr)?) => {
|
($exc_ty:ident $(, |$py:tt| $constructor:expr )?) => {
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
#[test]
|
#[test]
|
||||||
fn $exc_ty () {
|
fn $exc_ty () {
|
||||||
|
@ -735,7 +735,7 @@ macro_rules! test_exception {
|
||||||
let err: $crate::PyErr = {
|
let err: $crate::PyErr = {
|
||||||
None
|
None
|
||||||
$(
|
$(
|
||||||
.or(Some($constructor(py)))
|
.or(Some({ let $py = py; $constructor }))
|
||||||
)?
|
)?
|
||||||
.unwrap_or($exc_ty::new_err("a test exception"))
|
.unwrap_or($exc_ty::new_err("a test exception"))
|
||||||
};
|
};
|
||||||
|
@ -770,12 +770,12 @@ pub mod asyncio {
|
||||||
test_exception!(CancelledError);
|
test_exception!(CancelledError);
|
||||||
test_exception!(InvalidStateError);
|
test_exception!(InvalidStateError);
|
||||||
test_exception!(TimeoutError);
|
test_exception!(TimeoutError);
|
||||||
test_exception!(IncompleteReadError, |_| {
|
test_exception!(IncompleteReadError, |_| IncompleteReadError::new_err((
|
||||||
IncompleteReadError::new_err(("partial", "expected"))
|
"partial", "expected"
|
||||||
});
|
)));
|
||||||
test_exception!(LimitOverrunError, |_| {
|
test_exception!(LimitOverrunError, |_| LimitOverrunError::new_err((
|
||||||
LimitOverrunError::new_err(("message", "consumed"))
|
"message", "consumed"
|
||||||
});
|
)));
|
||||||
test_exception!(QueueEmpty);
|
test_exception!(QueueEmpty);
|
||||||
test_exception!(QueueFull);
|
test_exception!(QueueFull);
|
||||||
}
|
}
|
||||||
|
@ -1033,9 +1033,10 @@ mod tests {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
#[cfg(Py_3_11)]
|
#[cfg(Py_3_11)]
|
||||||
test_exception!(PyBaseExceptionGroup, |_| {
|
test_exception!(PyBaseExceptionGroup, |_| PyBaseExceptionGroup::new_err((
|
||||||
PyBaseExceptionGroup::new_err(("msg", vec![PyValueError::new_err("err")]))
|
"msg",
|
||||||
});
|
vec![PyValueError::new_err("err")]
|
||||||
|
)));
|
||||||
test_exception!(PyBaseException);
|
test_exception!(PyBaseException);
|
||||||
test_exception!(PyException);
|
test_exception!(PyException);
|
||||||
test_exception!(PyStopAsyncIteration);
|
test_exception!(PyStopAsyncIteration);
|
||||||
|
@ -1072,10 +1073,9 @@ mod tests {
|
||||||
let err = std::str::from_utf8(invalid_utf8).expect_err("should be invalid utf8");
|
let err = std::str::from_utf8(invalid_utf8).expect_err("should be invalid utf8");
|
||||||
PyErr::from_value(PyUnicodeDecodeError::new_utf8(py, invalid_utf8, err).unwrap())
|
PyErr::from_value(PyUnicodeDecodeError::new_utf8(py, invalid_utf8, err).unwrap())
|
||||||
});
|
});
|
||||||
test_exception!(PyUnicodeEncodeError, |py: Python<'_>| {
|
test_exception!(PyUnicodeEncodeError, |py| py
|
||||||
py.eval("chr(40960).encode('ascii')", None, None)
|
.eval("chr(40960).encode('ascii')", None, None)
|
||||||
.unwrap_err()
|
.unwrap_err());
|
||||||
});
|
|
||||||
test_exception!(PyUnicodeTranslateError, |_| {
|
test_exception!(PyUnicodeTranslateError, |_| {
|
||||||
PyUnicodeTranslateError::new_err(("\u{3042}", 0, 1, "ouch"))
|
PyUnicodeTranslateError::new_err(("\u{3042}", 0, 1, "ouch"))
|
||||||
});
|
});
|
||||||
|
|
|
@ -654,7 +654,7 @@ mod tests {
|
||||||
// Can't just compare against a vector of tuples since we don't have a guaranteed ordering.
|
// Can't just compare against a vector of tuples since we don't have a guaranteed ordering.
|
||||||
let mut key_sum = 0;
|
let mut key_sum = 0;
|
||||||
let mut value_sum = 0;
|
let mut value_sum = 0;
|
||||||
for el in dict.items().iter() {
|
for el in dict.items() {
|
||||||
let tuple = el.downcast::<PyTuple>().unwrap();
|
let tuple = el.downcast::<PyTuple>().unwrap();
|
||||||
key_sum += tuple.get_item(0).unwrap().extract::<i32>().unwrap();
|
key_sum += tuple.get_item(0).unwrap().extract::<i32>().unwrap();
|
||||||
value_sum += tuple.get_item(1).unwrap().extract::<i32>().unwrap();
|
value_sum += tuple.get_item(1).unwrap().extract::<i32>().unwrap();
|
||||||
|
@ -675,7 +675,7 @@ mod tests {
|
||||||
let dict: &PyDict = ob.downcast(py).unwrap();
|
let dict: &PyDict = ob.downcast(py).unwrap();
|
||||||
// Can't just compare against a vector of tuples since we don't have a guaranteed ordering.
|
// Can't just compare against a vector of tuples since we don't have a guaranteed ordering.
|
||||||
let mut key_sum = 0;
|
let mut key_sum = 0;
|
||||||
for el in dict.keys().iter() {
|
for el in dict.keys() {
|
||||||
key_sum += el.extract::<i32>().unwrap();
|
key_sum += el.extract::<i32>().unwrap();
|
||||||
}
|
}
|
||||||
assert_eq!(7 + 8 + 9, key_sum);
|
assert_eq!(7 + 8 + 9, key_sum);
|
||||||
|
@ -693,7 +693,7 @@ mod tests {
|
||||||
let dict: &PyDict = ob.downcast(py).unwrap();
|
let dict: &PyDict = ob.downcast(py).unwrap();
|
||||||
// Can't just compare against a vector of tuples since we don't have a guaranteed ordering.
|
// Can't just compare against a vector of tuples since we don't have a guaranteed ordering.
|
||||||
let mut values_sum = 0;
|
let mut values_sum = 0;
|
||||||
for el in dict.values().iter() {
|
for el in dict.values() {
|
||||||
values_sum += el.extract::<i32>().unwrap();
|
values_sum += el.extract::<i32>().unwrap();
|
||||||
}
|
}
|
||||||
assert_eq!(32 + 42 + 123, values_sum);
|
assert_eq!(32 + 42 + 123, values_sum);
|
||||||
|
@ -711,7 +711,7 @@ mod tests {
|
||||||
let dict: &PyDict = ob.downcast(py).unwrap();
|
let dict: &PyDict = ob.downcast(py).unwrap();
|
||||||
let mut key_sum = 0;
|
let mut key_sum = 0;
|
||||||
let mut value_sum = 0;
|
let mut value_sum = 0;
|
||||||
for (key, value) in dict.iter() {
|
for (key, value) in dict {
|
||||||
key_sum += key.extract::<i32>().unwrap();
|
key_sum += key.extract::<i32>().unwrap();
|
||||||
value_sum += value.extract::<i32>().unwrap();
|
value_sum += value.extract::<i32>().unwrap();
|
||||||
}
|
}
|
||||||
|
@ -731,7 +731,7 @@ mod tests {
|
||||||
let ob = v.to_object(py);
|
let ob = v.to_object(py);
|
||||||
let dict: &PyDict = ob.downcast(py).unwrap();
|
let dict: &PyDict = ob.downcast(py).unwrap();
|
||||||
|
|
||||||
for (key, value) in dict.iter() {
|
for (key, value) in dict {
|
||||||
dict.set_item(key, value.extract::<i32>().unwrap() + 7)
|
dict.set_item(key, value.extract::<i32>().unwrap() + 7)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|
|
@ -260,7 +260,7 @@ mod tests {
|
||||||
let set = PyFrozenSet::new(py, &[1]).unwrap();
|
let set = PyFrozenSet::new(py, &[1]).unwrap();
|
||||||
|
|
||||||
// iter method
|
// iter method
|
||||||
for el in set.iter() {
|
for el in set {
|
||||||
assert_eq!(1i32, el.extract::<i32>().unwrap());
|
assert_eq!(1i32, el.extract::<i32>().unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -474,7 +474,7 @@ mod tests {
|
||||||
let v = vec![2, 3, 5, 7];
|
let v = vec![2, 3, 5, 7];
|
||||||
let list = PyList::new(py, &v);
|
let list = PyList::new(py, &v);
|
||||||
let mut idx = 0;
|
let mut idx = 0;
|
||||||
for el in list.iter() {
|
for el in list {
|
||||||
assert_eq!(v[idx], el.extract::<i32>().unwrap());
|
assert_eq!(v[idx], el.extract::<i32>().unwrap());
|
||||||
idx += 1;
|
idx += 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -773,7 +773,7 @@ mod tests {
|
||||||
let seq = ob.downcast::<PySequence>(py).unwrap();
|
let seq = ob.downcast::<PySequence>(py).unwrap();
|
||||||
let repeat_seq = seq.repeat(3).unwrap();
|
let repeat_seq = seq.repeat(3).unwrap();
|
||||||
assert_eq!(6, repeat_seq.len().unwrap());
|
assert_eq!(6, repeat_seq.len().unwrap());
|
||||||
let repeated = vec!["foo", "bar", "foo", "bar", "foo", "bar"];
|
let repeated = ["foo", "bar", "foo", "bar", "foo", "bar"];
|
||||||
for (el, rpt) in repeat_seq.iter().unwrap().zip(repeated.iter()) {
|
for (el, rpt) in repeat_seq.iter().unwrap().zip(repeated.iter()) {
|
||||||
assert_eq!(*rpt, el.unwrap().extract::<String>().unwrap());
|
assert_eq!(*rpt, el.unwrap().extract::<String>().unwrap());
|
||||||
}
|
}
|
||||||
|
|
|
@ -368,7 +368,7 @@ mod tests {
|
||||||
let set = PySet::new(py, &[1]).unwrap();
|
let set = PySet::new(py, &[1]).unwrap();
|
||||||
|
|
||||||
// iter method
|
// iter method
|
||||||
for el in set.iter() {
|
for el in set {
|
||||||
assert_eq!(1i32, el.extract::<'_, i32>().unwrap());
|
assert_eq!(1i32, el.extract::<'_, i32>().unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -296,7 +296,7 @@ mod tests {
|
||||||
#[test]
|
#[test]
|
||||||
fn test_to_str_surrogate() {
|
fn test_to_str_surrogate() {
|
||||||
Python::with_gil(|py| {
|
Python::with_gil(|py| {
|
||||||
let obj: PyObject = py.eval(r#"'\ud800'"#, None, None).unwrap().into();
|
let obj: PyObject = py.eval(r"'\ud800'", None, None).unwrap().into();
|
||||||
let py_string: &PyString = obj.downcast(py).unwrap();
|
let py_string: &PyString = obj.downcast(py).unwrap();
|
||||||
assert!(py_string.to_str().is_err());
|
assert!(py_string.to_str().is_err());
|
||||||
})
|
})
|
||||||
|
@ -316,7 +316,7 @@ mod tests {
|
||||||
fn test_to_string_lossy() {
|
fn test_to_string_lossy() {
|
||||||
Python::with_gil(|py| {
|
Python::with_gil(|py| {
|
||||||
let obj: PyObject = py
|
let obj: PyObject = py
|
||||||
.eval(r#"'🐈 Hello \ud800World'"#, None, None)
|
.eval(r"'🐈 Hello \ud800World'", None, None)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.into();
|
.into();
|
||||||
let py_string: &PyString = obj.downcast(py).unwrap();
|
let py_string: &PyString = obj.downcast(py).unwrap();
|
||||||
|
|
|
@ -8,7 +8,7 @@ fn iter_dict_nosegv() {
|
||||||
const LEN: usize = 10_000_000;
|
const LEN: usize = 10_000_000;
|
||||||
let dict = (0..LEN as u64).map(|i| (i, i * 2)).into_py_dict(py);
|
let dict = (0..LEN as u64).map(|i| (i, i * 2)).into_py_dict(py);
|
||||||
let mut sum = 0;
|
let mut sum = 0;
|
||||||
for (k, _v) in dict.iter() {
|
for (k, _v) in dict {
|
||||||
let i: u64 = k.extract().unwrap();
|
let i: u64 = k.extract().unwrap();
|
||||||
sum += i;
|
sum += i;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
error[E0597]: `local_data` does not live long enough
|
error[E0597]: `local_data` does not live long enough
|
||||||
--> tests/ui/invalid_closure.rs:7:27
|
--> tests/ui/invalid_closure.rs:7:27
|
||||||
|
|
|
|
||||||
|
6 | let local_data = vec![0, 1, 2, 3, 4];
|
||||||
|
| ---------- binding `local_data` declared here
|
||||||
7 | let ref_: &[u8] = &local_data;
|
7 | let ref_: &[u8] = &local_data;
|
||||||
| ^^^^^^^^^^^ borrowed value does not live long enough
|
| ^^^^^^^^^^^ borrowed value does not live long enough
|
||||||
...
|
...
|
||||||
|
|
|
@ -25,6 +25,9 @@ error[E0271]: type mismatch resolving `<Foo as PyClass>::Frozen == False`
|
||||||
note: required by a bound in `pyo3::PyCell::<T>::borrow_mut`
|
note: required by a bound in `pyo3::PyCell::<T>::borrow_mut`
|
||||||
--> src/pycell.rs
|
--> src/pycell.rs
|
||||||
|
|
|
|
||||||
|
| pub fn borrow_mut(&self) -> PyRefMut<'_, T>
|
||||||
|
| ---------- required by a bound in this associated function
|
||||||
|
| where
|
||||||
| T: PyClass<Frozen = False>,
|
| T: PyClass<Frozen = False>,
|
||||||
| ^^^^^^^^^^^^^^ required by this bound in `PyCell::<T>::borrow_mut`
|
| ^^^^^^^^^^^^^^ required by this bound in `PyCell::<T>::borrow_mut`
|
||||||
|
|
||||||
|
@ -37,6 +40,9 @@ error[E0271]: type mismatch resolving `<ImmutableChild as PyClass>::Frozen == Fa
|
||||||
note: required by a bound in `pyo3::PyCell::<T>::borrow_mut`
|
note: required by a bound in `pyo3::PyCell::<T>::borrow_mut`
|
||||||
--> src/pycell.rs
|
--> src/pycell.rs
|
||||||
|
|
|
|
||||||
|
| pub fn borrow_mut(&self) -> PyRefMut<'_, T>
|
||||||
|
| ---------- required by a bound in this associated function
|
||||||
|
| where
|
||||||
| T: PyClass<Frozen = False>,
|
| T: PyClass<Frozen = False>,
|
||||||
| ^^^^^^^^^^^^^^ required by this bound in `PyCell::<T>::borrow_mut`
|
| ^^^^^^^^^^^^^^ required by this bound in `PyCell::<T>::borrow_mut`
|
||||||
|
|
||||||
|
@ -49,6 +55,9 @@ error[E0271]: type mismatch resolving `<MutableBase as PyClass>::Frozen == True`
|
||||||
note: required by a bound in `pyo3::Py::<T>::get`
|
note: required by a bound in `pyo3::Py::<T>::get`
|
||||||
--> src/instance.rs
|
--> src/instance.rs
|
||||||
|
|
|
|
||||||
|
| pub fn get(&self) -> &T
|
||||||
|
| --- required by a bound in this associated function
|
||||||
|
| where
|
||||||
| T: PyClass<Frozen = True> + Sync,
|
| T: PyClass<Frozen = True> + Sync,
|
||||||
| ^^^^^^^^^^^^^ required by this bound in `Py::<T>::get`
|
| ^^^^^^^^^^^^^ required by this bound in `Py::<T>::get`
|
||||||
|
|
||||||
|
@ -61,5 +70,8 @@ error[E0271]: type mismatch resolving `<MutableBase as PyClass>::Frozen == True`
|
||||||
note: required by a bound in `pyo3::PyCell::<T>::get`
|
note: required by a bound in `pyo3::PyCell::<T>::get`
|
||||||
--> src/pycell.rs
|
--> src/pycell.rs
|
||||||
|
|
|
|
||||||
|
| pub fn get(&self) -> &T
|
||||||
|
| --- required by a bound in this associated function
|
||||||
|
| where
|
||||||
| T: PyClass<Frozen = True> + Sync,
|
| T: PyClass<Frozen = True> + Sync,
|
||||||
| ^^^^^^^^^^^^^ required by this bound in `PyCell::<T>::get`
|
| ^^^^^^^^^^^^^ required by this bound in `PyCell::<T>::get`
|
||||||
|
|
|
@ -7,11 +7,27 @@ error[E0277]: `*mut pyo3::Python<'static>` cannot be shared between threads safe
|
||||||
| required by a bound introduced by this call
|
| required by a bound introduced by this call
|
||||||
|
|
|
|
||||||
= help: within `pyo3::Python<'_>`, the trait `Sync` is not implemented for `*mut pyo3::Python<'static>`
|
= help: within `pyo3::Python<'_>`, the trait `Sync` is not implemented for `*mut pyo3::Python<'static>`
|
||||||
= note: required because it appears within the type `PhantomData<*mut Python<'static>>`
|
note: required because it appears within the type `PhantomData<*mut Python<'static>>`
|
||||||
= note: required because it appears within the type `NotSend`
|
--> $RUST/core/src/marker.rs
|
||||||
|
|
|
||||||
|
| pub struct PhantomData<T: ?Sized>;
|
||||||
|
| ^^^^^^^^^^^
|
||||||
|
note: required because it appears within the type `NotSend`
|
||||||
|
--> src/impl_/not_send.rs
|
||||||
|
|
|
||||||
|
| pub(crate) struct NotSend(PhantomData<*mut Python<'static>>);
|
||||||
|
| ^^^^^^^
|
||||||
= note: required because it appears within the type `(&GILGuard, NotSend)`
|
= note: required because it appears within the type `(&GILGuard, NotSend)`
|
||||||
= note: required because it appears within the type `PhantomData<(&GILGuard, NotSend)>`
|
note: required because it appears within the type `PhantomData<(&GILGuard, NotSend)>`
|
||||||
= note: required because it appears within the type `Python<'_>`
|
--> $RUST/core/src/marker.rs
|
||||||
|
|
|
||||||
|
| pub struct PhantomData<T: ?Sized>;
|
||||||
|
| ^^^^^^^^^^^
|
||||||
|
note: required because it appears within the type `Python<'_>`
|
||||||
|
--> src/marker.rs
|
||||||
|
|
|
||||||
|
| pub struct Python<'py>(PhantomData<(&'py GILGuard, NotSend)>);
|
||||||
|
| ^^^^^^
|
||||||
= note: required for `&pyo3::Python<'_>` to implement `Send`
|
= note: required for `&pyo3::Python<'_>` to implement `Send`
|
||||||
note: required because it's used within this closure
|
note: required because it's used within this closure
|
||||||
--> tests/ui/not_send.rs:4:22
|
--> tests/ui/not_send.rs:4:22
|
||||||
|
@ -22,5 +38,8 @@ note: required because it's used within this closure
|
||||||
note: required by a bound in `pyo3::Python::<'py>::allow_threads`
|
note: required by a bound in `pyo3::Python::<'py>::allow_threads`
|
||||||
--> src/marker.rs
|
--> src/marker.rs
|
||||||
|
|
|
|
||||||
|
| pub fn allow_threads<T, F>(self, f: F) -> T
|
||||||
|
| ------------- required by a bound in this associated function
|
||||||
|
| where
|
||||||
| F: Ungil + FnOnce() -> T,
|
| F: Ungil + FnOnce() -> T,
|
||||||
| ^^^^^ required by this bound in `Python::<'py>::allow_threads`
|
| ^^^^^ required by this bound in `Python::<'py>::allow_threads`
|
||||||
|
|
|
@ -10,8 +10,16 @@ error[E0277]: `UnsafeCell<PyObject>` cannot be shared between threads safely
|
||||||
| |_________^ `UnsafeCell<PyObject>` cannot be shared between threads safely
|
| |_________^ `UnsafeCell<PyObject>` cannot be shared between threads safely
|
||||||
|
|
|
|
||||||
= help: within `&PyString`, the trait `Sync` is not implemented for `UnsafeCell<PyObject>`
|
= help: within `&PyString`, the trait `Sync` is not implemented for `UnsafeCell<PyObject>`
|
||||||
= note: required because it appears within the type `PyAny`
|
note: required because it appears within the type `PyAny`
|
||||||
= note: required because it appears within the type `PyString`
|
--> src/types/any.rs
|
||||||
|
|
|
||||||
|
| pub struct PyAny(UnsafeCell<ffi::PyObject>);
|
||||||
|
| ^^^^^
|
||||||
|
note: required because it appears within the type `PyString`
|
||||||
|
--> src/types/string.rs
|
||||||
|
|
|
||||||
|
| pub struct PyString(PyAny);
|
||||||
|
| ^^^^^^^^
|
||||||
= note: required because it appears within the type `&PyString`
|
= note: required because it appears within the type `&PyString`
|
||||||
= note: required for `&&PyString` to implement `Send`
|
= note: required for `&&PyString` to implement `Send`
|
||||||
note: required because it's used within this closure
|
note: required because it's used within this closure
|
||||||
|
@ -23,5 +31,8 @@ note: required because it's used within this closure
|
||||||
note: required by a bound in `pyo3::Python::<'py>::allow_threads`
|
note: required by a bound in `pyo3::Python::<'py>::allow_threads`
|
||||||
--> src/marker.rs
|
--> src/marker.rs
|
||||||
|
|
|
|
||||||
|
| pub fn allow_threads<T, F>(self, f: F) -> T
|
||||||
|
| ------------- required by a bound in this associated function
|
||||||
|
| where
|
||||||
| F: Ungil + FnOnce() -> T,
|
| F: Ungil + FnOnce() -> T,
|
||||||
| ^^^^^ required by this bound in `Python::<'py>::allow_threads`
|
| ^^^^^ required by this bound in `Python::<'py>::allow_threads`
|
||||||
|
|
Loading…
Reference in a new issue