Skip to content

Commit 4660757

Browse files
committed
gh-148380: remove all uses of _PyType_LookupByVersion in optimizer_bytecodes.c
1 parent 9c9df8a commit 4660757

File tree

5 files changed

+23
-30
lines changed

5 files changed

+23
-30
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.

Python/bytecodes.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2906,6 +2906,7 @@ dummy_func(
29062906

29072907
macro(LOAD_ATTR_CLASS) =
29082908
unused/1 +
2909+
_RECORD_TOS +
29092910
_CHECK_ATTR_CLASS +
29102911
unused/2 +
29112912
_LOAD_ATTR_CLASS +

Python/optimizer_bytecodes.c

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,8 @@ dummy_func(void) {
217217
}
218218

219219
op(_CHECK_ATTR_CLASS, (type_version/2, owner -- owner)) {
220-
PyObject *type = (PyObject *)_PyType_LookupByVersion(type_version);
221-
if (type) {
220+
PyObject *type = sym_get_probable_value(owner);
221+
if (type != NULL && ((PyTypeObject *)type)->tp_version_tag == type_version) {
222222
if (type == sym_get_const(ctx, owner)) {
223223
ADD_OP(_NOP, 0, 0);
224224
}
@@ -234,19 +234,10 @@ dummy_func(void) {
234234
if (sym_matches_type_version(owner, type_version)) {
235235
ADD_OP(_NOP, 0, 0);
236236
} else {
237-
// add watcher so that whenever the type changes we invalidate this
238-
PyTypeObject *type = _PyType_LookupByVersion(type_version);
239-
// if the type is null, it was not found in the cache (there was a conflict)
240-
// with the key, in which case we can't trust the version
241-
if (type) {
242-
// if the type version was set properly, then add a watcher
243-
// if it wasn't this means that the type version was previously set to something else
244-
// and we set the owner to bottom, so we don't need to add a watcher because we must have
245-
// already added one earlier.
246-
if (sym_set_type_version(owner, type_version)) {
247-
PyType_Watch(TYPE_WATCHER_ID, (PyObject *)type);
248-
_Py_BloomFilter_Add(dependencies, type);
249-
}
237+
PyTypeObject *probable_type = sym_get_probable_type(owner);
238+
if (probable_type->tp_version_tag == type_version && sym_set_type_version(owner, type_version)) {
239+
PyType_Watch(TYPE_WATCHER_ID, (PyObject *)probable_type);
240+
_Py_BloomFilter_Add(dependencies, probable_type);
250241
}
251242
}
252243
}

Python/optimizer_cases.c.h

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

Python/record_functions.c.h

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

0 commit comments

Comments
 (0)