@@ -668,45 +668,45 @@ impl ExecutingFrame<'_> {
668668 } => self . execute_build_map ( vm, * size, * unpack, * for_call) ,
669669 bytecode:: Instruction :: BuildSlice { step } => self . execute_build_slice ( vm, * step) ,
670670 bytecode:: Instruction :: ListAppend { i } => {
671+ let item = self . pop_value ( ) ;
671672 let obj = self . nth_value ( * i) ;
672673 let list: PyListRef = unsafe {
673674 // SAFETY: trust compiler
674675 obj. downcast_unchecked ( )
675676 } ;
676- let item = self . pop_value ( ) ;
677677 list. append ( item) ;
678678 Ok ( None )
679679 }
680680 bytecode:: Instruction :: SetAdd { i } => {
681+ let item = self . pop_value ( ) ;
681682 let obj = self . nth_value ( * i) ;
682683 let set: PyRef < PySet > = unsafe {
683684 // SAFETY: trust compiler
684685 obj. downcast_unchecked ( )
685686 } ;
686- let item = self . pop_value ( ) ;
687687 set. add ( item, vm) ?;
688688 Ok ( None )
689689 }
690690 bytecode:: Instruction :: MapAdd { i } => {
691- let obj = self . nth_value ( * i + 1 ) ;
691+ let key = self . pop_value ( ) ;
692+ let value = self . pop_value ( ) ;
693+ let obj = self . nth_value ( * i) ;
692694 let dict: PyDictRef = unsafe {
693695 // SAFETY: trust compiler
694696 obj. downcast_unchecked ( )
695697 } ;
696- let key = self . pop_value ( ) ;
697- let value = self . pop_value ( ) ;
698698 dict. set_item ( & * key, value, vm) ?;
699699 Ok ( None )
700700 }
701701 bytecode:: Instruction :: MapAddRev { i } => {
702702 // change order of evalutio of key and value to support Py3.8 Named expressions in dict comprehension
703- let obj = self . nth_value ( * i + 1 ) ;
703+ let value = self . pop_value ( ) ;
704+ let key = self . pop_value ( ) ;
705+ let obj = self . nth_value ( * i) ;
704706 let dict: PyDictRef = unsafe {
705707 // SAFETY: trust compiler
706708 obj. downcast_unchecked ( )
707709 } ;
708- let value = self . pop_value ( ) ;
709- let key = self . pop_value ( ) ;
710710 dict. set_item ( & * key, value, vm) ?;
711711 Ok ( None )
712712 }
0 commit comments