Skip to content

Commit ce856b8

Browse files
colesburyreidenong
authored andcommitted
pythongh-142908: Don't use DK_IS_UNICODE in interpreter (pythongh-142909)
`DK_IS_UNICODE()` includes split keys and we don't want to specialize on those accesses..
1 parent d2aad48 commit ce856b8

4 files changed

Lines changed: 17 additions & 17 deletions

File tree

Python/bytecodes.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1841,7 +1841,7 @@ dummy_func(
18411841
DEOPT_IF(!PyDict_CheckExact(dict));
18421842
PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys);
18431843
DEOPT_IF(FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version);
1844-
assert(DK_IS_UNICODE(keys));
1844+
assert(keys->dk_kind == DICT_KEYS_UNICODE);
18451845
}
18461846

18471847
op(_LOAD_GLOBAL_MODULE, (version/1, unused/1, index/1 -- res))
@@ -1850,7 +1850,7 @@ dummy_func(
18501850
DEOPT_IF(!PyDict_CheckExact(dict));
18511851
PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys);
18521852
DEOPT_IF(FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version);
1853-
assert(DK_IS_UNICODE(keys));
1853+
assert(keys->dk_kind == DICT_KEYS_UNICODE);
18541854
PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys);
18551855
assert(index < DK_SIZE(keys));
18561856
PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value);
@@ -1870,7 +1870,7 @@ dummy_func(
18701870
DEOPT_IF(!PyDict_CheckExact(dict));
18711871
PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys);
18721872
DEOPT_IF(FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version);
1873-
assert(DK_IS_UNICODE(keys));
1873+
assert(keys->dk_kind == DICT_KEYS_UNICODE);
18741874
PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys);
18751875
PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value);
18761876
DEOPT_IF(res_o == NULL);
@@ -2665,7 +2665,7 @@ dummy_func(
26652665
assert(PyDict_CheckExact((PyObject *)dict));
26662666
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
26672667
if (hint >= (size_t)dict->ma_keys->dk_nentries ||
2668-
!DK_IS_UNICODE(dict->ma_keys)) {
2668+
dict->ma_keys->dk_kind != DICT_KEYS_UNICODE) {
26692669
UNLOCK_OBJECT(dict);
26702670
DEOPT_IF(true);
26712671
}

Python/executor_cases.c.h

Lines changed: 7 additions & 7 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: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Python/specialize.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1285,7 +1285,7 @@ specialize_load_global_lock_held(
12851285
goto fail;
12861286
}
12871287
PyDictKeysObject * globals_keys = ((PyDictObject *)globals)->ma_keys;
1288-
if (!DK_IS_UNICODE(globals_keys)) {
1288+
if (globals_keys->dk_kind != DICT_KEYS_UNICODE) {
12891289
SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_LOAD_GLOBAL_NON_STRING_OR_SPLIT);
12901290
goto fail;
12911291
}
@@ -1320,7 +1320,7 @@ specialize_load_global_lock_held(
13201320
goto fail;
13211321
}
13221322
PyDictKeysObject * builtin_keys = ((PyDictObject *)builtins)->ma_keys;
1323-
if (!DK_IS_UNICODE(builtin_keys)) {
1323+
if (builtin_keys->dk_kind != DICT_KEYS_UNICODE) {
13241324
SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_LOAD_GLOBAL_NON_STRING_OR_SPLIT);
13251325
goto fail;
13261326
}

0 commit comments

Comments
 (0)