Ticket #241, better error for keywords in cdef functions.
authorRobert Bradshaw <robertwb@math.washington.edu>
Thu, 19 Mar 2009 05:48:13 +0000 (22:48 -0700)
committerRobert Bradshaw <robertwb@math.washington.edu>
Thu, 19 Mar 2009 05:48:13 +0000 (22:48 -0700)
Cython/Compiler/ExprNodes.py
tests/errors/e_cdef_keywords_T241.pyx [new file with mode: 0644]

index e6c3ed139a652aee01a3aa8d12314fb452436b1c..1fa2255453d4d033ffb32d8614b282b249539cb4 100644 (file)
@@ -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 (file)
index 0000000..8336b65
--- /dev/null
@@ -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.
+"""