@@ -503,6 +503,10 @@ initial_counter_value(void) {
503503#define SPEC_FAIL_BUILTIN_CLASS_METHOD 17
504504#define SPEC_FAIL_CLASS_METHOD_OBJ 18
505505#define SPEC_FAIL_OBJECT_SLOT 19
506+ #define SPEC_FAIL_HAS_DICT 20
507+ #define SPEC_FAIL_HAS_MANAGED_DICT 21
508+ #define SPEC_FAIL_INSTANCE_ATTRIBUTE 22
509+ #define SPEC_FAIL_METACLASS_ATTRIBUTE 23
506510
507511/* Binary subscr */
508512
@@ -973,7 +977,7 @@ load_method_fail_kind(DescriptorClassification kind)
973977 case NON_DESCRIPTOR :
974978 return SPEC_FAIL_NOT_DESCRIPTOR ;
975979 case ABSENT :
976- return SPEC_FAIL_EXPECTED_ERROR ;
980+ return SPEC_FAIL_INSTANCE_ATTRIBUTE ;
977981 }
978982 Py_UNREACHABLE ();
979983}
@@ -994,6 +998,16 @@ specialize_class_load_method(PyObject *owner, _Py_CODEUNIT *instr, PyObject *nam
994998 cache2 -> obj = descr ;
995999 * instr = _Py_MAKECODEUNIT (LOAD_METHOD_CLASS , _Py_OPARG (* instr ));
9961000 return 0 ;
1001+ #ifdef Py_STATS
1002+ case ABSENT :
1003+ if (_PyType_Lookup (Py_TYPE (owner ), name ) != NULL ) {
1004+ SPECIALIZATION_FAIL (LOAD_METHOD , SPEC_FAIL_METACLASS_ATTRIBUTE );
1005+ }
1006+ else {
1007+ SPECIALIZATION_FAIL (LOAD_METHOD , SPEC_FAIL_EXPECTED_ERROR );
1008+ }
1009+ return -1 ;
1010+ #endif
9971011 default :
9981012 SPECIALIZATION_FAIL (LOAD_METHOD , load_method_fail_kind (kind ));
9991013 return -1 ;
@@ -1043,7 +1057,7 @@ _Py_Specialize_LoadMethod(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name,
10431057 if (owner_cls -> tp_flags & Py_TPFLAGS_MANAGED_DICT ) {
10441058 PyObject * * owner_dictptr = _PyObject_ManagedDictPointer (owner );
10451059 if (* owner_dictptr ) {
1046- SPECIALIZATION_FAIL (LOAD_METHOD , SPEC_FAIL_IS_ATTR );
1060+ SPECIALIZATION_FAIL (LOAD_METHOD , SPEC_FAIL_HAS_MANAGED_DICT );
10471061 goto fail ;
10481062 }
10491063 PyDictKeysObject * keys = ((PyHeapTypeObject * )owner_cls )-> ht_cached_keys ;
@@ -1065,7 +1079,7 @@ _Py_Specialize_LoadMethod(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name,
10651079 * instr = _Py_MAKECODEUNIT (LOAD_METHOD_NO_DICT , _Py_OPARG (* instr ));
10661080 }
10671081 else {
1068- SPECIALIZATION_FAIL (LOAD_METHOD , SPEC_FAIL_IS_ATTR );
1082+ SPECIALIZATION_FAIL (LOAD_METHOD , SPEC_FAIL_HAS_DICT );
10691083 goto fail ;
10701084 }
10711085 }
0 commit comments