diff options
author | Stefan Behnel <stefan_ml@behnel.de> | 2020-04-06 21:50:05 +0200 |
---|---|---|
committer | Stefan Behnel <stefan_ml@behnel.de> | 2020-04-06 21:50:05 +0200 |
commit | 1a2f4251e3d33a5758acf2868beec405b04dc514 (patch) | |
tree | 1fc9e8582e98cc7fdb6b486ea0059ae63270966d | |
parent | 50d46e750241fa717458fa43f5c010033d9a831d (diff) | |
download | cython-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.py | 6 | ||||
-rw-r--r-- | Cython/Compiler/Nodes.py | 2 |
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) |