1
1
use std:: cell:: Cell ;
2
2
use std:: fmt;
3
3
4
- use super :: objbool;
5
4
use super :: objiter;
6
5
use super :: objsequence:: {
7
6
get_elements_tuple, get_item, seq_equal, seq_ge, seq_gt, seq_le, seq_lt, seq_mul,
@@ -10,7 +9,7 @@ use super::objtype::{self, PyClassRef};
10
9
use crate :: function:: OptionalArg ;
11
10
use crate :: pyhash;
12
11
use crate :: pyobject:: {
13
- IdProtocol , IntoPyObject , PyClassImpl , PyContext , PyObjectRef , PyRef , PyResult , PyValue ,
12
+ IntoPyObject , PyClassImpl , PyContext , PyObjectRef , PyRef , PyResult , PyValue ,
14
13
} ;
15
14
use crate :: vm:: { ReprGuard , VirtualMachine } ;
16
15
@@ -142,13 +141,8 @@ impl PyTuple {
142
141
fn count ( & self , needle : PyObjectRef , vm : & VirtualMachine ) -> PyResult < usize > {
143
142
let mut count: usize = 0 ;
144
143
for element in self . elements . iter ( ) {
145
- if element . is ( & needle) {
144
+ if vm . identical_or_equal ( element , & needle) ? {
146
145
count += 1 ;
147
- } else {
148
- let is_eq = vm. _eq ( element. clone ( ) , needle. clone ( ) ) ?;
149
- if objbool:: boolval ( vm, is_eq) ? {
150
- count += 1 ;
151
- }
152
146
}
153
147
}
154
148
Ok ( count)
@@ -236,11 +230,7 @@ impl PyTuple {
236
230
#[ pymethod( name = "index" ) ]
237
231
fn index ( & self , needle : PyObjectRef , vm : & VirtualMachine ) -> PyResult < usize > {
238
232
for ( index, element) in self . elements . iter ( ) . enumerate ( ) {
239
- if element. is ( & needle) {
240
- return Ok ( index) ;
241
- }
242
- let is_eq = vm. _eq ( needle. clone ( ) , element. clone ( ) ) ?;
243
- if objbool:: boolval ( vm, is_eq) ? {
233
+ if vm. identical_or_equal ( element, & needle) ? {
244
234
return Ok ( index) ;
245
235
}
246
236
}
@@ -250,11 +240,7 @@ impl PyTuple {
250
240
#[ pymethod( name = "__contains__" ) ]
251
241
fn contains ( & self , needle : PyObjectRef , vm : & VirtualMachine ) -> PyResult < bool > {
252
242
for element in self . elements . iter ( ) {
253
- if element. is ( & needle) {
254
- return Ok ( true ) ;
255
- }
256
- let is_eq = vm. _eq ( needle. clone ( ) , element. clone ( ) ) ?;
257
- if objbool:: boolval ( vm, is_eq) ? {
243
+ if vm. identical_or_equal ( element, & needle) ? {
258
244
return Ok ( true ) ;
259
245
}
260
246
}
0 commit comments