Added optimize_simple_methods to make it possible to accept keywords in 1-arg functions
authorRobert Bradshaw <robertwb@math.washington.edu>
Sat, 29 Mar 2008 22:09:01 +0000 (15:09 -0700)
committerRobert Bradshaw <robertwb@math.washington.edu>
Sat, 29 Mar 2008 22:09:01 +0000 (15:09 -0700)
Cython/Compiler/Nodes.py
Cython/Compiler/Options.py

index 58cda726fce24f7de9e99685a13084eb3af5555d..43a6d413450ac65b6f292129cd8bc4fbdda5d48d 100644 (file)
@@ -1252,7 +1252,7 @@ class DefNode(FuncDefNode):
         any_type_tests_needed = 0
         # Use the simpler calling signature for zero- and one-argument functions.
         if not self.entry.is_special and not self.star_arg and not self.starstar_arg:
-            if self.entry.signature is TypeSlots.pyfunction_signature:
+            if self.entry.signature is TypeSlots.pyfunction_signature and Options.optimize_simple_methods:
                 if len(self.args) == 0:
                     self.entry.signature = TypeSlots.pyfunction_noargs
                 elif len(self.args) == 1:
index 03852327bad231c2ab8930d32be8e05fffa97b14..0b029f90f85a0b1bbd00497acc95a9e8b624e3d2 100644 (file)
@@ -45,3 +45,8 @@ lookup_module_cpdef = 0
 # checking for NULL on every use, and can decref rather than xdecref at the end. 
 # WARNING: This is a work in progress, may currently segfault.
 init_local_none = 1
+
+# Optimize no argument and one argument methods by using the METH_O and METH_NOARGS
+# calling conventions. These are faster calling conventions, but disallow the use of 
+# keywords (which, admittedly, are of little use in these cases). 
+optimize_simple_methods = 1