@@ -125,6 +125,23 @@ fn list_clear(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
125
125
Ok ( vm. get_none ( ) )
126
126
}
127
127
128
+ fn list_count ( vm : & mut VirtualMachine , args : PyFuncArgs ) -> PyResult {
129
+ arg_check ! (
130
+ vm,
131
+ args,
132
+ required = [ ( zelf, Some ( vm. ctx. list_type( ) ) ) , ( value, None ) ]
133
+ ) ;
134
+ let elements = get_elements ( zelf) ;
135
+ let mut count: usize = 0 ;
136
+ for element in elements. iter ( ) {
137
+ let is_eq = vm. _eq ( element, value. clone ( ) ) ?;
138
+ if objbool:: boolval ( vm, is_eq) ? {
139
+ count = count + 1 ;
140
+ }
141
+ }
142
+ Ok ( vm. context ( ) . new_int ( count. to_bigint ( ) . unwrap ( ) ) )
143
+ }
144
+
128
145
pub fn list_extend ( vm : & mut VirtualMachine , args : PyFuncArgs ) -> PyResult {
129
146
arg_check ! (
130
147
vm,
@@ -152,6 +169,14 @@ fn list_reverse(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
152
169
Ok ( vm. get_none ( ) )
153
170
}
154
171
172
+ fn list_sort ( vm : & mut VirtualMachine , args : PyFuncArgs ) -> PyResult {
173
+ arg_check ! ( vm, args, required = [ ( list, Some ( vm. ctx. list_type( ) ) ) ] ) ;
174
+ let mut _elements = get_mut_elements ( list) ;
175
+ unimplemented ! ( "TODO: figure out how to invoke `sort_by` on a Vec" ) ;
176
+ // elements.sort_by();
177
+ // Ok(vm.get_none())
178
+ }
179
+
155
180
fn list_contains ( vm : & mut VirtualMachine , args : PyFuncArgs ) -> PyResult {
156
181
trace ! ( "list.contains called with: {:?}" , args) ;
157
182
arg_check ! (
@@ -221,6 +246,8 @@ pub fn init(context: &PyContext) {
221
246
list_type. set_attr ( "__repr__" , context. new_rustfunc ( list_repr) ) ;
222
247
list_type. set_attr ( "append" , context. new_rustfunc ( list_append) ) ;
223
248
list_type. set_attr ( "clear" , context. new_rustfunc ( list_clear) ) ;
249
+ list_type. set_attr ( "count" , context. new_rustfunc ( list_count) ) ;
224
250
list_type. set_attr ( "extend" , context. new_rustfunc ( list_extend) ) ;
225
251
list_type. set_attr ( "reverse" , context. new_rustfunc ( list_reverse) ) ;
252
+ list_type. set_attr ( "sort" , context. new_rustfunc ( list_sort) ) ;
226
253
}
0 commit comments