api = False,
directive_locals = getattr(cfunc, 'directive_locals', {}))
+ def is_cdef_func_compatible(self):
+ """Determines if the function's signature is compatible with a
+ cdef function. This can be used before calling
+ .as_cfunction() to see if that will be successful.
+ """
+ if self.needs_closure:
+ return False
+ if self.star_arg or self.starstar_arg:
+ return False
+ return True
+
def analyse_declarations(self, env):
self.is_classmethod = self.is_staticmethod = False
if self.decorators:
error(pxd_def.pos, "previous declaration here")
return None
node = node.as_cfunction(pxd_def)
- elif (self.scope.is_module_scope
- and not node.needs_closure
- and self.directives['auto_cpdef']):
+ elif (self.scope.is_module_scope and self.directives['auto_cpdef']
+ and node.is_cdef_func_compatible()):
node = node.as_cfunction(scope=self.scope)
# Enable this when nested cdef functions are allowed.
# self.visitchildren(node)
STR
"""
return str(arg)
+
+
+def stararg_func(*args):
+ """
+ >>> stararg_func(1, 2)
+ (1, 2)
+ """
+ return args
+
+def starstararg_func(**kwargs):
+ """
+ >>> starstararg_func(a=1)
+ 1
+ """
+ return kwargs['a']