+void ExpressionResolver::visit(FunctionDeclaration &func)
+{
+ SetForScope<const FunctionDeclaration *> set_func(current_function, &func);
+ TraversingVisitor::visit(func);
+}
+
+void ExpressionResolver::visit(Return &ret)
+{
+ TraversingVisitor::visit(ret);
+ if(!current_function || !ret.expression)
+ return;
+
+ BasicTypeDeclaration *ret_basic = dynamic_cast<BasicTypeDeclaration *>(current_function->return_type_declaration);
+ BasicTypeDeclaration *expr_basic = dynamic_cast<BasicTypeDeclaration *>(ret.expression->type);
+ if(!ret_basic || !expr_basic)
+ return;
+
+ Compatibility compat = get_compatibility(*ret_basic, *expr_basic);
+ if(compat==RIGHT_CONVERTIBLE)
+ convert_to(ret.expression, *ret_basic);
+}
+