Skip to content

Commit 16af73a

Browse files
committed
remove into_gil_ref calls from return_enums
1 parent 2e99ed9 commit 16af73a

File tree

7 files changed

+117
-121
lines changed

7 files changed

+117
-121
lines changed

src/input/input_python.rs

Lines changed: 47 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,15 @@ macro_rules! extract_dict_keys {
3737
($py:expr, $obj:expr) => {
3838
$obj.downcast::<PyDictKeys>()
3939
.ok()
40-
.map(|v| PyIterator::from_object(v).unwrap())
40+
.map(|v| PyIterator::from_object2(v).unwrap())
4141
};
4242
}
4343

4444
#[cfg(PyPy)]
4545
macro_rules! extract_dict_keys {
4646
($py:expr, $obj:expr) => {
4747
if is_dict_keys_type($obj) {
48-
Some(PyIterator::from_object($obj).unwrap())
48+
Some(PyIterator::from_object2($obj).unwrap())
4949
} else {
5050
None
5151
}
@@ -57,15 +57,15 @@ macro_rules! extract_dict_values {
5757
($py:expr, $obj:expr) => {
5858
$obj.downcast::<PyDictValues>()
5959
.ok()
60-
.map(|v| PyIterator::from_object(v).unwrap())
60+
.map(|v| PyIterator::from_object2(v).unwrap())
6161
};
6262
}
6363

6464
#[cfg(PyPy)]
6565
macro_rules! extract_dict_values {
6666
($py:expr, $obj:expr) => {
6767
if is_dict_values_type($obj) {
68-
Some(PyIterator::from_object($obj).unwrap())
68+
Some(PyIterator::from_object2($obj).unwrap())
6969
} else {
7070
None
7171
}
@@ -77,15 +77,15 @@ macro_rules! extract_dict_items {
7777
($py:expr, $obj:expr) => {
7878
$obj.downcast::<PyDictItems>()
7979
.ok()
80-
.map(|v| PyIterator::from_object(v).unwrap())
80+
.map(|v| PyIterator::from_object2(v).unwrap())
8181
};
8282
}
8383

8484
#[cfg(PyPy)]
8585
macro_rules! extract_dict_items {
8686
($py:expr, $obj:expr) => {
8787
if is_dict_items_type($obj) {
88-
Some(PyIterator::from_object($obj).unwrap())
88+
Some(PyIterator::from_object2($obj).unwrap())
8989
} else {
9090
None
9191
}
@@ -246,7 +246,7 @@ impl<'a> Input<'a> for PyAny {
246246

247247
fn exact_str(&'a self) -> ValResult<EitherString<'a>> {
248248
if let Ok(py_str) = <PyString as PyTryFrom>::try_from_exact(self) {
249-
Ok(EitherString::Py(py_str))
249+
Ok(EitherString::Py(Py2::borrowed_from_gil_ref(&py_str).clone()))
250250
} else {
251251
Err(ValError::new(ErrorTypeDefaults::IntType, self))
252252
}
@@ -550,31 +550,35 @@ impl<'a> Input<'a> for PyAny {
550550
if let Ok(iterable) = self.downcast::<PyList>() {
551551
Ok(GenericIterable::List(Py2::borrowed_from_gil_ref(&iterable).clone()))
552552
} else if let Ok(iterable) = self.downcast::<PyTuple>() {
553-
Ok(GenericIterable::Tuple(iterable))
553+
Ok(GenericIterable::Tuple(Py2::borrowed_from_gil_ref(&iterable).clone()))
554554
} else if let Ok(iterable) = self.downcast::<PySet>() {
555-
Ok(GenericIterable::Set(iterable))
555+
Ok(GenericIterable::Set(Py2::borrowed_from_gil_ref(&iterable).clone()))
556556
} else if let Ok(iterable) = self.downcast::<PyFrozenSet>() {
557-
Ok(GenericIterable::FrozenSet(iterable))
557+
Ok(GenericIterable::FrozenSet(
558+
Py2::borrowed_from_gil_ref(&iterable).clone(),
559+
))
558560
} else if let Ok(iterable) = self.downcast::<PyDict>() {
559-
Ok(GenericIterable::Dict(iterable))
560-
} else if let Some(iterable) = extract_dict_keys!(self.py(), self) {
561+
Ok(GenericIterable::Dict(Py2::borrowed_from_gil_ref(&iterable).clone()))
562+
} else if let Some(iterable) = extract_dict_keys!(self.py(), Py2::borrowed_from_gil_ref(&self)) {
561563
Ok(GenericIterable::DictKeys(iterable))
562-
} else if let Some(iterable) = extract_dict_values!(self.py(), self) {
564+
} else if let Some(iterable) = extract_dict_values!(self.py(), Py2::borrowed_from_gil_ref(&self)) {
563565
Ok(GenericIterable::DictValues(iterable))
564-
} else if let Some(iterable) = extract_dict_items!(self.py(), self) {
566+
} else if let Some(iterable) = extract_dict_items!(self.py(), Py2::borrowed_from_gil_ref(&self)) {
565567
Ok(GenericIterable::DictItems(iterable))
566568
} else if let Ok(iterable) = self.downcast::<PyMapping>() {
567-
Ok(GenericIterable::Mapping(iterable))
569+
Ok(GenericIterable::Mapping(Py2::borrowed_from_gil_ref(&iterable).clone()))
568570
} else if let Ok(iterable) = self.downcast::<PyString>() {
569-
Ok(GenericIterable::PyString(iterable))
571+
Ok(GenericIterable::PyString(Py2::borrowed_from_gil_ref(&iterable).clone()))
570572
} else if let Ok(iterable) = self.downcast::<PyBytes>() {
571-
Ok(GenericIterable::Bytes(iterable))
573+
Ok(GenericIterable::Bytes(Py2::borrowed_from_gil_ref(&iterable).clone()))
572574
} else if let Ok(iterable) = self.downcast::<PyByteArray>() {
573-
Ok(GenericIterable::PyByteArray(iterable))
575+
Ok(GenericIterable::PyByteArray(
576+
Py2::borrowed_from_gil_ref(&iterable).clone(),
577+
))
574578
} else if let Ok(iterable) = self.downcast::<PySequence>() {
575-
Ok(GenericIterable::Sequence(iterable))
579+
Ok(GenericIterable::Sequence(Py2::borrowed_from_gil_ref(&iterable).clone()))
576580
} else if let Ok(iterable) = self.iter() {
577-
Ok(GenericIterable::Iterator(iterable))
581+
Ok(GenericIterable::Iterator(Py2::borrowed_from_gil_ref(&iterable).clone()))
578582
} else {
579583
Err(ValError::new(ErrorTypeDefaults::IterableType, self))
580584
}
@@ -864,7 +868,7 @@ impl<'a> Input<'a> for Py2<'a, PyAny> {
864868

865869
fn exact_str(&'a self) -> ValResult<EitherString<'a>> {
866870
if let Ok(py_str) = self.downcast_exact::<PyString>() {
867-
Ok(EitherString::Py(py_str.as_gil_ref()))
871+
Ok(EitherString::Py(py_str.clone()))
868872
} else {
869873
Err(ValError::new(ErrorTypeDefaults::IntType, self))
870874
}
@@ -1168,30 +1172,30 @@ impl<'a> Input<'a> for Py2<'a, PyAny> {
11681172
if let Ok(iterable) = self.downcast::<PyList>() {
11691173
Ok(GenericIterable::List(iterable.clone()))
11701174
} else if let Ok(iterable) = self.downcast::<PyTuple>() {
1171-
Ok(GenericIterable::Tuple(iterable.as_gil_ref()))
1175+
Ok(GenericIterable::Tuple(iterable.clone()))
11721176
} else if let Ok(iterable) = self.downcast::<PySet>() {
1173-
Ok(GenericIterable::Set(iterable.as_gil_ref()))
1177+
Ok(GenericIterable::Set(iterable.clone()))
11741178
} else if let Ok(iterable) = self.downcast::<PyFrozenSet>() {
1175-
Ok(GenericIterable::FrozenSet(iterable.as_gil_ref()))
1179+
Ok(GenericIterable::FrozenSet(iterable.clone()))
11761180
} else if let Ok(iterable) = self.downcast::<PyDict>() {
1177-
Ok(GenericIterable::Dict(iterable.as_gil_ref()))
1178-
} else if let Some(iterable) = extract_dict_keys!(self.py(), self.as_gil_ref()) {
1181+
Ok(GenericIterable::Dict(iterable.clone()))
1182+
} else if let Some(iterable) = extract_dict_keys!(self.py(), self) {
11791183
Ok(GenericIterable::DictKeys(iterable))
1180-
} else if let Some(iterable) = extract_dict_values!(self.py(), self.as_gil_ref()) {
1184+
} else if let Some(iterable) = extract_dict_values!(self.py(), self) {
11811185
Ok(GenericIterable::DictValues(iterable))
1182-
} else if let Some(iterable) = extract_dict_items!(self.py(), self.as_gil_ref()) {
1186+
} else if let Some(iterable) = extract_dict_items!(self.py(), self) {
11831187
Ok(GenericIterable::DictItems(iterable))
1184-
} else if let Ok(iterable) = self.as_gil_ref().downcast::<PyMapping>() {
1185-
Ok(GenericIterable::Mapping(iterable))
1188+
} else if let Ok(iterable) = self.downcast::<PyMapping>() {
1189+
Ok(GenericIterable::Mapping(iterable.clone()))
11861190
} else if let Ok(iterable) = self.downcast::<PyString>() {
1187-
Ok(GenericIterable::PyString(iterable.as_gil_ref()))
1191+
Ok(GenericIterable::PyString(iterable.clone()))
11881192
} else if let Ok(iterable) = self.downcast::<PyBytes>() {
1189-
Ok(GenericIterable::Bytes(iterable.as_gil_ref()))
1193+
Ok(GenericIterable::Bytes(iterable.clone()))
11901194
} else if let Ok(iterable) = self.downcast::<PyByteArray>() {
1191-
Ok(GenericIterable::PyByteArray(iterable.as_gil_ref()))
1192-
} else if let Ok(iterable) = self.as_gil_ref().downcast::<PySequence>() {
1193-
Ok(GenericIterable::Sequence(iterable))
1194-
} else if let Ok(iterable) = self.as_gil_ref().iter() {
1195+
Ok(GenericIterable::PyByteArray(iterable.clone()))
1196+
} else if let Ok(iterable) = self.downcast::<PySequence>() {
1197+
Ok(GenericIterable::Sequence(iterable.clone()))
1198+
} else if let Ok(iterable) = self.iter() {
11951199
Ok(GenericIterable::Iterator(iterable))
11961200
} else {
11971201
Err(ValError::new(ErrorTypeDefaults::IterableType, self))
@@ -1352,6 +1356,13 @@ impl BorrowInput for Py2<'_, PyAny> {
13521356
}
13531357
}
13541358

1359+
impl BorrowInput for Py2Borrowed<'_, '_, PyAny> {
1360+
type Input<'a> = Py2<'a, PyAny> where Self: 'a;
1361+
fn borrow_input(&self) -> &Self::Input<'_> {
1362+
self
1363+
}
1364+
}
1365+
13551366
/// Best effort check of whether it's likely to make sense to inspect obj for attributes and iterate over it
13561367
/// with `obj.dir()`
13571368
fn from_attributes_applicable(obj: &PyAny) -> bool {

0 commit comments

Comments
 (0)