]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Fix BINARY_SUBSCR_GETITEM stats (GH-93903)
authorKen Jin <kenjin@python.org>
Thu, 16 Jun 2022 14:02:07 +0000 (22:02 +0800)
committerGitHub <noreply@github.com>
Thu, 16 Jun 2022 14:02:07 +0000 (15:02 +0100)
Python/ceval.c
Python/specialize.c

index f9ec640ef1722a09556f81981c22704c9e894c20..ca3797c216094549a170ebc92652e0db006069f0 100644 (file)
@@ -2240,16 +2240,15 @@ handle_eval_breaker:
             PyFunctionObject *getitem = (PyFunctionObject *)cached;
             DEOPT_IF(getitem->func_version != cache->func_version, BINARY_SUBSCR);
             PyCodeObject *code = (PyCodeObject *)getitem->func_code;
-            size_t size = code->co_nlocalsplus + code->co_stacksize + FRAME_SPECIALS_SIZE;
             assert(code->co_argcount == 2);
-            _PyInterpreterFrame *new_frame = _PyThreadState_BumpFramePointer(tstate, size);
+            STAT_INC(BINARY_SUBSCR, hit);
+
+            Py_INCREF(getitem);
+            _PyInterpreterFrame *new_frame = _PyFrame_Push(tstate, getitem);
             if (new_frame == NULL) {
                 goto error;
             }
-            CALL_STAT_INC(frames_pushed);
-            Py_INCREF(getitem);
-            _PyFrame_InitializeSpecials(new_frame, getitem,
-                                        NULL, code->co_nlocalsplus);
+            CALL_STAT_INC(inlined_py_calls);
             STACK_SHRINK(2);
             new_frame->localsplus[0] = container;
             new_frame->localsplus[1] = sub;
index a3be97d40dfb5b6712524069392988830e0c2cf5..24fbe2f426cbdf63dd07c2d08f96b1476b9c9cb5 100644 (file)
@@ -1212,7 +1212,8 @@ _Py_Specialize_BinarySubscr(
         write_u32(cache->type_version, cls->tp_version_tag);
         int version = _PyFunction_GetVersionForCurrentState(func);
         if (version == 0 || version != (uint16_t)version) {
-            SPECIALIZATION_FAIL(BINARY_SUBSCR, SPEC_FAIL_OUT_OF_VERSIONS);
+            SPECIALIZATION_FAIL(BINARY_SUBSCR, version == 0 ?
+                SPEC_FAIL_OUT_OF_VERSIONS : SPEC_FAIL_OUT_OF_RANGE);
             goto fail;
         }
         cache->func_version = version;