Skip to content

Commit c953a69

Browse files
fix test
1 parent 0dad4a0 commit c953a69

File tree

3 files changed

+41
-13
lines changed

3 files changed

+41
-13
lines changed

Lib/test/test_capi/test_opt.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2036,7 +2036,7 @@ def f(n):
20362036
self.assertEqual(uops.count("_BINARY_OP_SUBSCR_DICT_KNOWN_HASH"), 1)
20372037
self.assertEqual(uops.count("_STORE_SUBSCR_DICT_KNOWN_HASH"), 1)
20382038
self.assertEqual(uops.count("_GUARD_NOS_DICT_SUBSCRIPT"), 0)
2039-
self.assertEqual(uops.count("_GUARD_NOS_DICT_STORE_SUBSCRIPT"), 0)
2039+
self.assertEqual(uops.count("_GUARD_NOS_DICT_STORE_SUBSCRIPT"), 1)
20402040

20412041
def test_dict_subclass_subscr_with_override(self):
20422042
class MyDict(dict):

Python/optimizer_bytecodes.c

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1733,29 +1733,43 @@ dummy_func(void) {
17331733

17341734
op(_GUARD_NOS_DICT_SUBSCRIPT, (nos, unused -- nos, unused)) {
17351735
PyTypeObject *tp = sym_get_type(nos);
1736+
bool definite = true;
17361737
if (!tp) {
17371738
tp = sym_get_probable_type(nos);
1739+
definite = false;
17381740
}
17391741
if (tp && tp->tp_as_mapping &&
17401742
tp->tp_as_mapping->mp_subscript == _PyDict_Subscript)
17411743
{
1742-
PyType_Watch(TYPE_WATCHER_ID, (PyObject *)tp);
1743-
_Py_BloomFilter_Add(dependencies, tp);
1744-
ADD_OP(_NOP, 0, 0);
1744+
if (definite){
1745+
ADD_OP(_NOP, 0, 0);
1746+
}
1747+
else {
1748+
PyType_Watch(TYPE_WATCHER_ID, (PyObject *)tp);
1749+
_Py_BloomFilter_Add(dependencies, tp);
1750+
sym_set_type(nos, tp);
1751+
}
17451752
}
17461753
}
17471754

17481755
op(_GUARD_NOS_DICT_STORE_SUBSCRIPT, (unused, nos, unused -- unused, nos, unused)) {
17491756
PyTypeObject *tp = sym_get_type(nos);
1757+
bool definite = true;
17501758
if (!tp) {
17511759
tp = sym_get_probable_type(nos);
1760+
definite = false;
17521761
}
17531762
if (tp && tp->tp_as_mapping &&
17541763
tp->tp_as_mapping->mp_ass_subscript == _PyDict_StoreSubscript)
17551764
{
1756-
PyType_Watch(TYPE_WATCHER_ID, (PyObject *)tp);
1757-
_Py_BloomFilter_Add(dependencies, tp);
1758-
ADD_OP(_NOP, 0, 0);
1765+
if (definite){
1766+
ADD_OP(_NOP, 0, 0);
1767+
}
1768+
else {
1769+
PyType_Watch(TYPE_WATCHER_ID, (PyObject *)tp);
1770+
_Py_BloomFilter_Add(dependencies, tp);
1771+
sym_set_type(nos, tp);
1772+
}
17591773
}
17601774
}
17611775

Python/optimizer_cases.c.h

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

0 commit comments

Comments
 (0)