X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fresolve.cpp;fp=source%2Fglsl%2Fresolve.cpp;h=eb99bec2ab57d9c801724b8803a3397e270ae363;hb=f661973abaa7d189a61d76708d0c90cfcdb4b440;hp=b80ae2176f5c8fae81a3c36cdaaf22a383f59256;hpb=282a10854eda602d874e200c8301cf57d6501e81;p=libs%2Fgl.git diff --git a/source/glsl/resolve.cpp b/source/glsl/resolve.cpp index b80ae217..eb99bec2 100644 --- a/source/glsl/resolve.cpp +++ b/source/glsl/resolve.cpp @@ -1141,6 +1141,28 @@ void ExpressionResolver::visit(VariableDeclaration &var) convert_to(var.init_expression, *var_basic); } +void ExpressionResolver::visit(FunctionDeclaration &func) +{ + SetForScope 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(current_function->return_type_declaration); + BasicTypeDeclaration *expr_basic = dynamic_cast(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); +} + bool FunctionResolver::apply(Stage &s) {