if (suffix != _NOP) {
ADD_OP(suffix, 2, 0);
}
- PyType_Watch(TYPE_WATCHER_ID, (PyObject *)type);
- _Py_BloomFilter_Add(dependencies, type);
+ if ((type->tp_flags & Py_TPFLAGS_IMMUTABLETYPE) == 0) {
+ PyType_Watch(TYPE_WATCHER_ID, (PyObject *)type);
+ _Py_BloomFilter_Add(dependencies, type);
+ }
return sym_new_const(ctx, lookup);
}
}
if (suffix != _NOP) {
ADD_OP(suffix, 2, 0);
}
- PyType_Watch(TYPE_WATCHER_ID, (PyObject *)su_type);
- _Py_BloomFilter_Add(dependencies, su_type);
- PyType_Watch(TYPE_WATCHER_ID, (PyObject *)obj_type);
- _Py_BloomFilter_Add(dependencies, obj_type);
+ // if obj_type is immutable, then all its superclasses are immutable
+ if ((obj_type->tp_flags & Py_TPFLAGS_IMMUTABLETYPE) == 0) {
+ PyType_Watch(TYPE_WATCHER_ID, (PyObject *)su_type);
+ _Py_BloomFilter_Add(dependencies, su_type);
+ PyType_Watch(TYPE_WATCHER_ID, (PyObject *)obj_type);
+ _Py_BloomFilter_Add(dependencies, obj_type);
+ }
return sym_new_const_steal(ctx, lookup);
}
PyTypeObject *probable_type = sym_get_probable_type(owner);
if (probable_type->tp_version_tag == type_version && sym_set_type_version(owner, type_version)) {
// Promote the probable type version to a known one.
- PyType_Watch(TYPE_WATCHER_ID, (PyObject *)probable_type);
- _Py_BloomFilter_Add(dependencies, probable_type);
+ if ((probable_type->tp_flags & Py_TPFLAGS_IMMUTABLETYPE) == 0) {
+ PyType_Watch(TYPE_WATCHER_ID, (PyObject *)probable_type);
+ _Py_BloomFilter_Add(dependencies, probable_type);
+ }
}
}
}
} else {
PyTypeObject *probable_type = sym_get_probable_type(owner);
if (probable_type->tp_version_tag == type_version && sym_set_type_version(owner, type_version)) {
- PyType_Watch(TYPE_WATCHER_ID, (PyObject *)probable_type);
- _Py_BloomFilter_Add(dependencies, probable_type);
+ if ((probable_type->tp_flags & Py_TPFLAGS_IMMUTABLETYPE) == 0) {
+ PyType_Watch(TYPE_WATCHER_ID, (PyObject *)probable_type);
+ _Py_BloomFilter_Add(dependencies, probable_type);
+ }
}
}
break;