Skip to content

Commit 15ee555

Browse files
authored
Include length in stats for UNPACK_SEQUENCE. (GH-31254)
1 parent 1d6ce67 commit 15ee555

File tree

2 files changed

+30
-8
lines changed

2 files changed

+30
-8
lines changed

Python/ceval.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2740,10 +2740,10 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
27402740
PREDICTED(UNPACK_SEQUENCE);
27412741
PyObject *seq = POP(), *item, **items;
27422742
#ifdef Py_STATS
2743-
extern int _PySpecialization_ClassifySequence(PyObject *);
2743+
extern int _PySpecialization_ClassifySequence(PyObject *, int);
27442744
_py_stats.opcode_stats[UNPACK_SEQUENCE].specialization.failure++;
27452745
_py_stats.opcode_stats[UNPACK_SEQUENCE].specialization.
2746-
failure_kinds[_PySpecialization_ClassifySequence(seq)]++;
2746+
failure_kinds[_PySpecialization_ClassifySequence(seq, oparg)]++;
27472747
#endif
27482748
if (PyTuple_CheckExact(seq) &&
27492749
PyTuple_GET_SIZE(seq) == oparg) {

Python/specialize.c

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -602,8 +602,26 @@ initial_counter_value(void) {
602602
#define SPEC_FAIL_FOR_ITER_ENUMERATE 23
603603

604604
/* UNPACK_SEQUENCE */
605-
#define SPEC_FAIL_UNPACK_SEQUENCE_TUPLE 10
606-
#define SPEC_FAIL_UNPACK_SEQUENCE_LIST 11
605+
#define SPEC_FAIL_UNPACK_SEQUENCE_TUPLE_0 9
606+
#define SPEC_FAIL_UNPACK_SEQUENCE_TUPLE_1 10
607+
#define SPEC_FAIL_UNPACK_SEQUENCE_TUPLE_2 11
608+
#define SPEC_FAIL_UNPACK_SEQUENCE_TUPLE_3 12
609+
#define SPEC_FAIL_UNPACK_SEQUENCE_TUPLE_4 13
610+
#define SPEC_FAIL_UNPACK_SEQUENCE_TUPLE_N 14
611+
612+
#define SPEC_FAIL_UNPACK_SEQUENCE_LIST_0 15
613+
#define SPEC_FAIL_UNPACK_SEQUENCE_LIST_1 16
614+
#define SPEC_FAIL_UNPACK_SEQUENCE_LIST_2 17
615+
#define SPEC_FAIL_UNPACK_SEQUENCE_LIST_3 18
616+
#define SPEC_FAIL_UNPACK_SEQUENCE_LIST_4 19
617+
#define SPEC_FAIL_UNPACK_SEQUENCE_LIST_N 20
618+
619+
#define SPEC_FAIL_UNPACK_SEQUENCE_OTHER_0 21
620+
#define SPEC_FAIL_UNPACK_SEQUENCE_OTHER_1 22
621+
#define SPEC_FAIL_UNPACK_SEQUENCE_OTHER_2 23
622+
#define SPEC_FAIL_UNPACK_SEQUENCE_OTHER_3 24
623+
#define SPEC_FAIL_UNPACK_SEQUENCE_OTHER_4 25
624+
#define SPEC_FAIL_UNPACK_SEQUENCE_OTHER_N 26
607625

608626

609627
static int
@@ -1978,15 +1996,19 @@ int
19781996
}
19791997

19801998
int
1981-
_PySpecialization_ClassifySequence(PyObject *seq)
1999+
_PySpecialization_ClassifySequence(PyObject *seq, int n)
19822000
{
2001+
assert(n >= 0);
2002+
if (n > 4) {
2003+
n = 5;
2004+
}
19832005
if (PyTuple_CheckExact(seq)) {
1984-
return SPEC_FAIL_UNPACK_SEQUENCE_TUPLE;
2006+
return SPEC_FAIL_UNPACK_SEQUENCE_TUPLE_0 + n;
19852007
}
19862008
if (PyList_CheckExact(seq)) {
1987-
return SPEC_FAIL_UNPACK_SEQUENCE_LIST;
2009+
return SPEC_FAIL_UNPACK_SEQUENCE_LIST_0 + n;
19882010
}
1989-
return SPEC_FAIL_OTHER;
2011+
return SPEC_FAIL_UNPACK_SEQUENCE_OTHER_0 + n;
19902012
}
19912013

19922014
int

0 commit comments

Comments
 (0)