Commit 0722bb26 authored by Stefan Behnel's avatar Stefan Behnel

allow decorators on classes in the parser, just disable them on cdef classes later on

parent 305e7ba8
......@@ -929,9 +929,8 @@ class DecoratorTransform(CythonTransform, SkipDeclarations):
return self._handle_decorators(
func_node, func_node.name)
def _visit_CClassDefNode(self, class_node):
# This doesn't currently work, so it's disabled (also in the
# parser).
def visit_CClassDefNode(self, class_node):
# This doesn't currently work, so it's disabled.
#
# Problem: assignments to cdef class names do not work. They
# would require an additional check anyway, as the extension
......@@ -941,8 +940,11 @@ class DecoratorTransform(CythonTransform, SkipDeclarations):
self.visitchildren(class_node)
if not class_node.decorators:
return class_node
return self._handle_decorators(
class_node, class_node.class_name)
error(class_node.pos,
"Decorators not allowed on cdef classes (used on type '%s')" % class_node.class_name)
return class_node
#return self._handle_decorators(
# class_node, class_node.class_name)
def visit_ClassDefNode(self, class_node):
self.visitchildren(class_node)
......
......@@ -1681,8 +1681,8 @@ def p_statement(s, ctx, first_statement = 0):
s.level = ctx.level
node = p_cdef_statement(s, ctx(overridable = overridable))
if decorators is not None:
if not isinstance(node, (Nodes.CFuncDefNode, Nodes.CVarDefNode)):
s.error("Decorators can only be followed by functions or Python classes")
if not isinstance(node, (Nodes.CFuncDefNode, Nodes.CVarDefNode, Nodes.CClassDefNode)):
s.error("Decorators can only be followed by functions or classes")
node.decorators = decorators
return node
else:
......
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