From: Robert Bradshaw Date: Fri, 19 Feb 2010 20:01:20 +0000 (-0800) Subject: Function overloading fixes. X-Git-Tag: 0.13.beta0~342 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=a46f52954633f6832c34c0cf4de775beba214de2;p=cython.git Function overloading fixes. --- 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)