summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Behnel <stefan_ml@behnel.de>2020-04-06 21:50:05 +0200
committerStefan Behnel <stefan_ml@behnel.de>2020-04-06 21:50:05 +0200
commit1a2f4251e3d33a5758acf2868beec405b04dc514 (patch)
tree1fc9e8582e98cc7fdb6b486ea0059ae63270966d
parent50d46e750241fa717458fa43f5c010033d9a831d (diff)
downloadcython-gh3481_defaults_warning.tar.gz
Avoid creating "__defaults__" getter functions for fused dispatch function.gh3481_defaults_warning
Closes GH-3481.
-rw-r--r--Cython/Compiler/ExprNodes.py6
-rw-r--r--Cython/Compiler/Nodes.py2
2 files changed, 4 insertions, 4 deletions
diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py
index 212dca068..9e94d0bd8 100644
--- a/Cython/Compiler/ExprNodes.py
+++ b/Cython/Compiler/ExprNodes.py
@@ -9279,7 +9279,8 @@ class PyCFunctionNode(ExprNode, ModuleNameMixin):
value=arg.default)
for arg in default_kwargs])
self.defaults_kwdict = defaults_kwdict.analyse_types(env)
- else:
+ elif not self.specialized_cpdefs:
+ # Fused dispatch functions do not support (dynamic) default arguments, only the specialisations do.
if default_args:
defaults_tuple = DefaultsTupleNode(
self.pos, default_args, self.defaults_struct)
@@ -9440,8 +9441,7 @@ class PyCFunctionNode(ExprNode, ModuleNameMixin):
if self.defaults_kwdict:
code.putln('__Pyx_CyFunction_SetDefaultsKwDict(%s, %s);' % (
self.result(), self.defaults_kwdict.py_result()))
- if def_node.defaults_getter and not self.specialized_cpdefs:
- # Fused functions do not support dynamic defaults, only their specialisations can have them for now.
+ if def_node.defaults_getter:
code.putln('__Pyx_CyFunction_SetDefaultsGetter(%s, %s);' % (
self.result(), def_node.defaults_getter.entry.pyfunc_cname))
if self.annotations_dict:
diff --git a/Cython/Compiler/Nodes.py b/Cython/Compiler/Nodes.py
index 8fae04f07..2597f73c8 100644
--- a/Cython/Compiler/Nodes.py
+++ b/Cython/Compiler/Nodes.py
@@ -3190,7 +3190,7 @@ class DefNode(FuncDefNode):
return self.entry.signature.exception_check
def generate_function_definitions(self, env, code):
- if self.defaults_getter and not self.specialized_cpdefs:
+ if self.defaults_getter:
# defaults getter must never live in class scopes, it's always a module function
self.defaults_getter.generate_function_definitions(env.global_scope(), code)