From: Robert Bradshaw Date: Thu, 19 Mar 2009 05:48:13 +0000 (-0700) Subject: Ticket #241, better error for keywords in cdef functions. X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=c28ca95079e156765f44b3483870a40e58c714c0;p=cython.git Ticket #241, better error for keywords in cdef functions. --- diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py index e6c3ed13..1fa22554 100644 --- a/Cython/Compiler/ExprNodes.py +++ b/Cython/Compiler/ExprNodes.py @@ -2527,7 +2527,11 @@ class GeneralCallNode(CallNode): self.keyword_args.analyse_types(env) if self.starstar_arg: self.starstar_arg.analyse_types(env) - self.function = self.function.coerce_to_pyobject(env) + if self.function.type is not py_object_type: + if hasattr(self.function, 'entry') and not self.function.entry.as_variable: + error(self.pos, "Keyword arguments not allowed in cdef functions.") + else: + self.function = self.function.coerce_to_pyobject(env) self.positional_args = \ self.positional_args.coerce_to_pyobject(env) if self.starstar_arg: diff --git a/tests/errors/e_cdef_keywords_T241.pyx b/tests/errors/e_cdef_keywords_T241.pyx new file mode 100644 index 00000000..8336b65a --- /dev/null +++ b/tests/errors/e_cdef_keywords_T241.pyx @@ -0,0 +1,19 @@ +cdef some_function(x, y): + pass + +cdef class A: + cdef some_method(self, x, y=1): + pass + +some_function(1, 2) +some_function(1, y=2) + +cdef A a = A() +a.some_method(1) +a.some_method(1, 2) +a.some_method(1, y=2) + +_ERRORS = u""" +:9:13: Keyword arguments not allowed in cdef functions. +:14:13: Keyword arguments not allowed in cdef functions. +"""