Lines Matching full:subclass
511 subclass: object
518 _abc__abc_register_impl(PyObject *module, PyObject *self, PyObject *subclass) in _abc__abc_register_impl() argument
521 if (!PyType_Check(subclass)) { in _abc__abc_register_impl()
525 int result = PyObject_IsSubclass(subclass, self); in _abc__abc_register_impl()
527 Py_INCREF(subclass); in _abc__abc_register_impl()
528 return subclass; /* Already a subclass. */ in _abc__abc_register_impl()
533 /* Subtle: test for cycles *after* testing for "already a subclass"; in _abc__abc_register_impl()
535 result = PyObject_IsSubclass(self, subclass); in _abc__abc_register_impl()
548 if (_add_to_weak_set(&impl->_abc_registry, subclass) < 0) { in _abc__abc_register_impl()
561 set_collection_flag_recursive((PyTypeObject *)subclass, collection_flag); in _abc__abc_register_impl()
564 Py_INCREF(subclass); in _abc__abc_register_impl()
565 return subclass; in _abc__abc_register_impl()
584 PyObject *subtype, *result = NULL, *subclass = NULL; in _abc__abc_instancecheck_impl() local
590 subclass = PyObject_GetAttr(instance, &_Py_ID(__class__)); in _abc__abc_instancecheck_impl()
591 if (subclass == NULL) { in _abc__abc_instancecheck_impl()
596 int incache = _in_weak_set(impl->_abc_cache, subclass); in _abc__abc_instancecheck_impl()
606 if (subtype == subclass) { in _abc__abc_instancecheck_impl()
608 incache = _in_weak_set(impl->_abc_negative_cache, subclass); in _abc__abc_instancecheck_impl()
618 /* Fall back to the subclass check. */ in _abc__abc_instancecheck_impl()
620 subclass); in _abc__abc_instancecheck_impl()
624 subclass); in _abc__abc_instancecheck_impl()
647 Py_XDECREF(subclass); in _abc__abc_instancecheck_impl()
655 static int subclasscheck_check_registry(_abc_data *impl, PyObject *subclass,
662 subclass: object
670 PyObject *subclass) in _abc__abc_subclasscheck_impl() argument
673 if (!PyType_Check(subclass)) { in _abc__abc_subclasscheck_impl()
688 incache = _in_weak_set(impl->_abc_cache, subclass); in _abc__abc_subclasscheck_impl()
709 incache = _in_weak_set(impl->_abc_negative_cache, subclass); in _abc__abc_subclasscheck_impl()
719 /* 3. Check the subclass hook. */ in _abc__abc_subclasscheck_impl()
721 (PyObject *)self, &_Py_ID(__subclasshook__), subclass); in _abc__abc_subclasscheck_impl()
727 if (_add_to_weak_set(&impl->_abc_cache, subclass) < 0) { in _abc__abc_subclasscheck_impl()
735 if (_add_to_weak_set(&impl->_abc_negative_cache, subclass) < 0) { in _abc__abc_subclasscheck_impl()
749 /* 4. Check if it's a direct subclass. */ in _abc__abc_subclasscheck_impl()
750 PyObject *mro = ((PyTypeObject *)subclass)->tp_mro; in _abc__abc_subclasscheck_impl()
756 if (_add_to_weak_set(&impl->_abc_cache, subclass) < 0) { in _abc__abc_subclasscheck_impl()
764 /* 5. Check if it's a subclass of a registered class (recursive). */ in _abc__abc_subclasscheck_impl()
765 if (subclasscheck_check_registry(impl, subclass, &result)) { in _abc__abc_subclasscheck_impl()
770 /* 6. Check if it's a subclass of a subclass (recursive). */ in _abc__abc_subclasscheck_impl()
782 int r = PyObject_IsSubclass(subclass, scls); in _abc__abc_subclasscheck_impl()
785 if (_add_to_weak_set(&impl->_abc_cache, subclass) < 0) { in _abc__abc_subclasscheck_impl()
797 if (_add_to_weak_set(&impl->_abc_negative_cache, subclass) < 0) { in _abc__abc_subclasscheck_impl()
811 subclasscheck_check_registry(_abc_data *impl, PyObject *subclass, in subclasscheck_check_registry() argument
814 // Fast path: check subclass is in weakref directly. in subclasscheck_check_registry()
815 int ret = _in_weak_set(impl->_abc_registry, subclass); in subclasscheck_check_registry()
861 int r = PyObject_IsSubclass(subclass, rkey); in subclasscheck_check_registry()
868 if (_add_to_weak_set(&impl->_abc_cache, subclass) < 0) { in subclasscheck_check_registry()