@@ -21,7 +21,7 @@ use crate::obj::objstr;
2121use crate :: obj:: objtype;
2222use crate :: pyobject:: {
2323 DictProtocol , IdProtocol , PyFuncArgs , PyObject , PyObjectPayload , PyObjectRef , PyResult ,
24- TypeProtocol ,
24+ TryFromObject , TypeProtocol ,
2525} ;
2626use crate :: vm:: VirtualMachine ;
2727
@@ -138,14 +138,7 @@ impl Frame {
138138 vm. ctx. new_int( lineno. get_row( ) ) ,
139139 vm. ctx. new_str( run_obj_name. clone( ) ) ,
140140 ] ) ;
141- objlist:: list_append (
142- vm,
143- PyFuncArgs {
144- args : vec ! [ traceback, pos] ,
145- kwargs : vec ! [ ] ,
146- } ,
147- )
148- . unwrap ( ) ;
141+ objlist:: PyListRef :: try_from_object ( vm, traceback) ?. append ( pos, vm) ;
149142 // exception.__trace
150143 match self . unwind_exception ( vm, exception) {
151144 None => { }
@@ -312,13 +305,7 @@ impl Frame {
312305 bytecode:: Instruction :: ListAppend { i } => {
313306 let list_obj = self . nth_value ( * i) ;
314307 let item = self . pop_value ( ) ;
315- objlist:: list_append (
316- vm,
317- PyFuncArgs {
318- args : vec ! [ list_obj. clone( ) , item] ,
319- kwargs : vec ! [ ] ,
320- } ,
321- ) ?;
308+ objlist:: PyListRef :: try_from_object ( vm, list_obj) ?. append ( item, vm) ;
322309 Ok ( None )
323310 }
324311 bytecode:: Instruction :: SetAdd { i } => {
@@ -453,7 +440,7 @@ impl Frame {
453440 let _qualified_name = self . pop_value ( ) ;
454441 let code_obj = self . pop_value ( ) ;
455442
456- let _annotations = if flags. contains ( bytecode:: FunctionOpArg :: HAS_ANNOTATIONS ) {
443+ let annotations = if flags. contains ( bytecode:: FunctionOpArg :: HAS_ANNOTATIONS ) {
457444 self . pop_value ( )
458445 } else {
459446 vm. new_dict ( )
@@ -470,13 +457,8 @@ impl Frame {
470457 let scope = self . scope . clone ( ) ;
471458 let obj = vm. ctx . new_function ( code_obj, scope, defaults) ;
472459
473- let annotation_repr = vm. to_pystr ( & _annotations ) ? ;
460+ vm. ctx . set_attr ( & obj , "__annotations__" , annotations ) ;
474461
475- warn ! (
476- "Type annotation must be stored in attribute! {:?}" ,
477- annotation_repr
478- ) ;
479- // TODO: use annotations with set_attr here!
480462 self . push_value ( obj) ;
481463 Ok ( None )
482464 }
0 commit comments