Commit a46f5295 authored by Robert Bradshaw's avatar Robert Bradshaw

Function overloading fixes.

parent b3ebcbb8
...@@ -2580,23 +2580,26 @@ class SimpleCallNode(CallNode): ...@@ -2580,23 +2580,26 @@ class SimpleCallNode(CallNode):
def analyse_c_function_call(self, env): def analyse_c_function_call(self, env):
if self.function.type is error_type: if self.function.type is error_type:
self.type = self.function.type self.type = error_type
return return
if self.function.type.is_cpp_class: if self.function.type.is_cpp_class:
function = self.function.type.scope.lookup("operator()") overloaded_entry = self.function.type.scope.lookup("operator()")
if function is None: if overloaded_entry is None:
self.type = PyrexTypes.error_type self.type = PyrexTypes.error_type
self.result_code = "<error>" self.result_code = "<error>"
return return
elif hasattr(self.function, 'entry'):
overloaded_entry = self.function.entry
else: else:
function = self.function.entry overloaded_entry = None
entry = PyrexTypes.best_match(self.args, function.all_alternatives(), self.pos) if overloaded_entry:
if not entry: entry = PyrexTypes.best_match(self.args, overloaded_entry.all_alternatives(), self.pos)
self.type = PyrexTypes.error_type if not entry:
self.result_code = "<error>" self.type = PyrexTypes.error_type
return self.result_code = "<error>"
self.function.entry = entry return
self.function.type = entry.type self.function.entry = entry
self.function.type = entry.type
func_type = self.function_type() func_type = self.function_type()
# Check no. of args # Check no. of args
max_nargs = len(func_type.args) max_nargs = len(func_type.args)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment