@@ -4,7 +4,7 @@ use super::super::pyobject::{
44use super :: super :: vm:: VirtualMachine ;
55use super :: objbool;
66use super :: objiter;
7- use super :: objsequence:: { seq_equal, PySliceableSequence } ;
7+ use super :: objsequence:: { get_item , seq_equal, PySliceableSequence } ;
88use super :: objstr;
99use super :: objtype;
1010
@@ -132,7 +132,7 @@ pub fn list_append(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
132132 }
133133}
134134
135- fn clear ( vm : & mut VirtualMachine , args : PyFuncArgs ) -> PyResult {
135+ fn list_clear ( vm : & mut VirtualMachine , args : PyFuncArgs ) -> PyResult {
136136 trace ! ( "list.clear called with: {:?}" , args) ;
137137 arg_check ! ( vm, args, required = [ ( list, Some ( vm. ctx. list_type( ) ) ) ] ) ;
138138 let mut list_obj = list. borrow_mut ( ) ;
@@ -184,15 +184,26 @@ fn list_contains(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
184184 Ok ( vm. new_bool ( false ) )
185185}
186186
187+ fn list_getitem ( vm : & mut VirtualMachine , args : PyFuncArgs ) -> PyResult {
188+ trace ! ( "list.getitem called with: {:?}" , args) ;
189+ arg_check ! (
190+ vm,
191+ args,
192+ required = [ ( list, Some ( vm. ctx. list_type( ) ) ) , ( needle, None ) ]
193+ ) ;
194+ get_item ( vm, list, & get_elements ( list) , needle. clone ( ) )
195+ }
196+
187197pub fn init ( context : & PyContext ) {
188198 let ref list_type = context. list_type ;
189199 list_type. set_attr ( "__add__" , context. new_rustfunc ( list_add) ) ;
190200 list_type. set_attr ( "__contains__" , context. new_rustfunc ( list_contains) ) ;
191201 list_type. set_attr ( "__eq__" , context. new_rustfunc ( list_eq) ) ;
202+ list_type. set_attr ( "__getitem__" , context. new_rustfunc ( list_getitem) ) ;
192203 list_type. set_attr ( "__len__" , context. new_rustfunc ( list_len) ) ;
193204 list_type. set_attr ( "__new__" , context. new_rustfunc ( list_new) ) ;
194205 list_type. set_attr ( "__repr__" , context. new_rustfunc ( list_repr) ) ;
195206 list_type. set_attr ( "append" , context. new_rustfunc ( list_append) ) ;
196- list_type. set_attr ( "clear" , context. new_rustfunc ( clear ) ) ;
207+ list_type. set_attr ( "clear" , context. new_rustfunc ( list_clear ) ) ;
197208 list_type. set_attr ( "reverse" , context. new_rustfunc ( list_reverse) ) ;
198209}
0 commit comments