Commit 5fad0ae6 authored by Stefan Behnel's avatar Stefan Behnel

Revert "Make cpdef methods overridable in Python classes with slots (which do not have a dict)."

This reverts commit eb0e4666.
parent c31c7e90
......@@ -10,9 +10,6 @@ Bugs fixed
* Set iteration was broken in non-CPython since 0.28.
* Overriding cpdef methods did not work in Python subclasses with slots.
(Github issue #1771)
* ``UnicodeEncodeError`` in Py2 when ``%s`` formatting is optimised for
unicode strings. (Github issue #2276)
......
......@@ -4337,9 +4337,7 @@ class OverrideCheckNode(StatNode):
if self.py_func.is_module_scope:
code.putln("else {")
else:
code.putln("else if (unlikely((Py_TYPE(%s)->tp_dictoffset != 0)"
" || (Py_TYPE(%s)->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {" % (
self_arg, self_arg))
code.putln("else if (unlikely(Py_TYPE(%s)->tp_dictoffset != 0)) {" % self_arg)
func_node_temp = code.funcstate.allocate_temp(py_object_type, manage_ref=True)
self.func_node.set_cname(func_node_temp)
# need to get attribute manually--scope would return cdef method
......
# mode: run
# tag: cpdef
# ticket: gh-1771
cdef class BaseType:
"""
>>> BaseType().callmeth()
BaseType.meth
"""
def callmeth(self):
return self.meth()
cpdef meth(self):
print("BaseType.meth")
class PyClass(BaseType):
"""
>>> PyClass().callmeth()
PyClass.meth
"""
def meth(self):
print("PyClass.meth")
class PySlotsClass(BaseType):
"""
>>> PySlotsClass().callmeth()
PySlotsClass.meth
"""
__slots__ = []
def meth(self):
print("PySlotsClass.meth")
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment