@@ -859,41 +859,31 @@ dummy_func(
859
859
}
860
860
}
861
861
862
- // stack effect: (__0 -- __array[oparg])
863
- inst (UNPACK_SEQUENCE ) {
862
+ inst (UNPACK_SEQUENCE , (unused /1 , seq -- unused [oparg ])) {
864
863
#if ENABLE_SPECIALIZATION
865
864
_PyUnpackSequenceCache * cache = (_PyUnpackSequenceCache * )next_instr ;
866
865
if (ADAPTIVE_COUNTER_IS_ZERO (cache -> counter )) {
867
866
assert (cframe .use_tracing == 0 );
868
- PyObject * seq = TOP ();
869
867
next_instr -- ;
870
868
_Py_Specialize_UnpackSequence (seq , next_instr , oparg );
871
869
DISPATCH_SAME_OPARG ();
872
870
}
873
871
STAT_INC (UNPACK_SEQUENCE , deferred );
874
872
DECREMENT_ADAPTIVE_COUNTER (cache -> counter );
875
873
#endif /* ENABLE_SPECIALIZATION */
876
- PyObject * seq = POP ();
877
- PyObject * * top = stack_pointer + oparg ;
878
- if (!unpack_iterable (tstate , seq , oparg , -1 , top )) {
879
- Py_DECREF (seq );
880
- goto error ;
881
- }
882
- STACK_GROW (oparg );
874
+ PyObject * * top = stack_pointer + oparg - 1 ;
875
+ int res = unpack_iterable (tstate , seq , oparg , -1 , top );
883
876
Py_DECREF (seq );
884
- JUMPBY ( INLINE_CACHE_ENTRIES_UNPACK_SEQUENCE );
877
+ ERROR_IF ( res == 0 , error );
885
878
}
886
879
887
- // stack effect: (__0 -- __array[oparg])
888
- inst (UNPACK_SEQUENCE_TWO_TUPLE ) {
889
- PyObject * seq = TOP ();
880
+ inst (UNPACK_SEQUENCE_TWO_TUPLE , (unused /1 , seq -- v1 , v0 )) {
890
881
DEOPT_IF (!PyTuple_CheckExact (seq ), UNPACK_SEQUENCE );
891
882
DEOPT_IF (PyTuple_GET_SIZE (seq ) != 2 , UNPACK_SEQUENCE );
892
883
STAT_INC (UNPACK_SEQUENCE , hit );
893
- SET_TOP ( Py_NewRef (PyTuple_GET_ITEM (seq , 1 ) ));
894
- PUSH ( Py_NewRef (PyTuple_GET_ITEM (seq , 0 ) ));
884
+ v1 = Py_NewRef (PyTuple_GET_ITEM (seq , 1 ));
885
+ v0 = Py_NewRef (PyTuple_GET_ITEM (seq , 0 ));
895
886
Py_DECREF (seq );
896
- JUMPBY (INLINE_CACHE_ENTRIES_UNPACK_SEQUENCE );
897
887
}
898
888
899
889
// stack effect: (__0 -- __array[oparg])
@@ -926,17 +916,12 @@ dummy_func(
926
916
JUMPBY (INLINE_CACHE_ENTRIES_UNPACK_SEQUENCE );
927
917
}
928
918
929
- // error: UNPACK_EX has irregular stack effect
930
- inst (UNPACK_EX ) {
919
+ inst (UNPACK_EX , (seq -- unused [oparg & 0xFF ], unused , unused [oparg >> 8 ])) {
931
920
int totalargs = 1 + (oparg & 0xFF ) + (oparg >> 8 );
932
- PyObject * seq = POP ();
933
- PyObject * * top = stack_pointer + totalargs ;
934
- if (!unpack_iterable (tstate , seq , oparg & 0xFF , oparg >> 8 , top )) {
935
- Py_DECREF (seq );
936
- goto error ;
937
- }
938
- STACK_GROW (totalargs );
921
+ PyObject * * top = stack_pointer + totalargs - 1 ;
922
+ int res = unpack_iterable (tstate , seq , oparg & 0xFF , oparg >> 8 , top );
939
923
Py_DECREF (seq );
924
+ ERROR_IF (res == 0 , error );
940
925
}
941
926
942
927
family (store_attr , INLINE_CACHE_ENTRIES_STORE_ATTR ) = {
0 commit comments