From a46f52954633f6832c34c0cf4de775beba214de2 Mon Sep 17 00:00:00 2001 From: Robert Bradshaw Date: Fri, 19 Feb 2010 12:01:20 -0800 Subject: [PATCH] Function overloading fixes. --- Cython/Compiler/ExprNodes.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py index 8da22cd9..20cc4ca5 100755 --- a/Cython/Compiler/ExprNodes.py +++ b/Cython/Compiler/ExprNodes.py @@ -2580,23 +2580,26 @@ class SimpleCallNode(CallNode): def analyse_c_function_call(self, env): if self.function.type is error_type: - self.type = self.function.type + self.type = error_type return if self.function.type.is_cpp_class: - function = self.function.type.scope.lookup("operator()") - if function is None: + overloaded_entry = self.function.type.scope.lookup("operator()") + if overloaded_entry is None: self.type = PyrexTypes.error_type self.result_code = "" return + elif hasattr(self.function, 'entry'): + overloaded_entry = self.function.entry else: - function = self.function.entry - entry = PyrexTypes.best_match(self.args, function.all_alternatives(), self.pos) - if not entry: - self.type = PyrexTypes.error_type - self.result_code = "" - return - self.function.entry = entry - self.function.type = entry.type + overloaded_entry = None + if overloaded_entry: + entry = PyrexTypes.best_match(self.args, overloaded_entry.all_alternatives(), self.pos) + if not entry: + self.type = PyrexTypes.error_type + self.result_code = "" + return + self.function.entry = entry + self.function.type = entry.type func_type = self.function_type() # Check no. of args max_nargs = len(func_type.args) -- 2.26.2