summaryrefslogtreecommitdiff
path: root/Cython/Compiler/ParseTreeTransforms.py
diff options
context:
space:
mode:
Diffstat (limited to 'Cython/Compiler/ParseTreeTransforms.py')
-rw-r--r--Cython/Compiler/ParseTreeTransforms.py7
1 files changed, 6 insertions, 1 deletions
diff --git a/Cython/Compiler/ParseTreeTransforms.py b/Cython/Compiler/ParseTreeTransforms.py
index 6c4275dbd..987142f37 100644
--- a/Cython/Compiler/ParseTreeTransforms.py
+++ b/Cython/Compiler/ParseTreeTransforms.py
@@ -1315,6 +1315,8 @@ class InterpretCompilerDirectives(CythonTransform):
directives = []
realdecs = []
both = []
+ current_opt_dict = dict(self.directives)
+ missing = object()
# Decorators coming first take precedence.
for dec in node.decorators[::-1]:
new_directives = self.try_to_parse_directives(dec.decorator)
@@ -1322,8 +1324,11 @@ class InterpretCompilerDirectives(CythonTransform):
for directive in new_directives:
if self.check_directive_scope(node.pos, directive[0], scope_name):
name, value = directive
- if self.directives.get(name, object()) != value:
+ if current_opt_dict.get(name, missing) != value:
+ if name == 'cfunc' and 'ufunc' in current_opt_dict:
+ error(dec.pos, "Cannot apply @cfunc to @ufunc, please reverse the decorators.")
directives.append(directive)
+ current_opt_dict[name] = value
if directive[0] == 'staticmethod':
both.append(dec)
# Adapt scope type based on decorators that change it.