10000 Address code review · python/cpython@f9509d3 · GitHub
[go: up one dir, main page]

Skip to content

Commit f9509d3

Browse files
committed
Address code review
1 parent 7b72e7b commit f9509d3

File tree

7 files changed

+44
-44
lines changed

7 files changed

+44
-44
lines changed

Include/internal/pycore_opcode_metadata.h

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Include/internal/pycore_uop_metadata.h

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Lib/test/test_opcache.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1245,7 +1245,7 @@ def f(o, n):
12451245
f(test_obj, 1)
12461246
self.assertEqual(test_obj.b, 0)
12471247

1248-
# gh-115999: BINARY_SUBSCR_GETITEM will only cache __getitem__ methods that
1248+
# gh-127274: BINARY_SUBSCR_GETITEM will only cache __getitem__ methods that
12491249
# are deferred. We only defer functions defined at the top-level.
12501250
class CGetItem:
12511251
def __init__(self, val):

Python/bytecodes.c

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -864,27 +864,24 @@ dummy_func(
864864
res = PyStackRef_FromPyObjectSteal(res_o);
865865
}
866866

867-
op(_BINARY_SUBSCR_CHECK_FUNC, (container, unused -- container, unused)) {
867+
op(_BINARY_SUBSCR_CHECK_FUNC, (container, unused -- container, unused, getitem)) {
868868
PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(container));
869869
DEOPT_IF(!PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE));
870870
PyHeapTypeObject *ht = (PyHeapTypeObject *)tp;
871-
PyObject *getitem = FT_ATOMIC_LOAD_PTR_RELAXED(ht->_spec_cache.getitem);
872-
DEOPT_IF(getitem == NULL);
873-
assert(PyFunction_Check(getitem));
871+
PyObject *getitem_o = FT_ATOMIC_LOAD_PTR_ACQUIRE(ht->_spec_cache.getitem);
872+
DEOPT_IF(getitem_o == NULL);
873+
assert(PyFunction_Check(getitem_o));
874874
uint32_t cached_version = FT_ATOMIC_LOAD_UINT32_RELAXED(ht->_spec_cache.getitem_version);
875-
DEOPT_IF(((PyFunctionObject *)getitem)->func_version != cached_version);
876-
PyCodeObject *code = (PyCodeObject *)PyFunction_GET_CODE(getitem);
875+
DEOPT_IF(((PyFunctionObject *)getitem_o)->func_version != cached_version);
876+
PyCodeObject *code = (PyCodeObject *)PyFunction_GET_CODE(getitem_o);
877+
getitem = PyStackRef_FromPyObjectNew(getitem_o);
877878
assert(code->co_argcount == 2);
878879
DEOPT_IF(!_PyThreadState_HasStackSpace(tstate, code->co_framesize));
879880
STAT_INC(BINARY_SUBSCR, hit);
880881
}
881882

882-
op(_BINARY_SUBSCR_INIT_CALL, (container, sub -- new_frame: _PyInterpreterFrame* )) {
883-
PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(container));
884-
PyHeapTypeObject *ht = (PyHeapTypeObject *)tp;
885-
PyObject *getitem = FT_ATOMIC_LOAD_PTR_RELAXED(ht->_spec_cache.getitem);
886-
DEOPT_IF(getitem == NULL);
887-
new_frame = _PyFrame_PushUnchecked(tstate, PyStackRef_FromPyObjectNew(getitem), 2, frame);
883+
op(_BINARY_SUBSCR_INIT_CALL, (container, sub, getitem -- new_frame: _PyInterpreterFrame* )) {
884+
new_frame = _PyFrame_PushUnchecked(tstate, getitem, 2, frame);
888885
new_frame->localsplus[0] = container;
889886
new_frame->localsplus[1] = sub;
890887
INPUTS_DEAD();

Python/executor_cases.c.h

Lines changed: 17 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Python/generated_cases.c.h

Lines changed: 8 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Python/optimizer_cases.c.h

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
0