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