X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fresolve.cpp;h=115624c496639e5413077779e28aabd9c2321ce6;hb=6cb04ca058e463b7d76eba684be89dfc9e77ab29;hp=3aeab30bd703711d28909cea07b15adc4fc1318d;hpb=03b2ea5c9c611cfa5f02afb49ed7e05743e691b4;p=libs%2Fgl.git diff --git a/source/glsl/resolve.cpp b/source/glsl/resolve.cpp index 3aeab30b..115624c4 100644 --- a/source/glsl/resolve.cpp +++ b/source/glsl/resolve.cpp @@ -179,7 +179,7 @@ void VariableResolver::visit(RefPtr &expr) r_replacement_expr = 0; } -void VariableResolver::check_assignment_target(Statement *declaration) +void VariableResolver::check_assignment_target(VariableDeclaration *declaration) { if(record_target) { @@ -1084,7 +1084,24 @@ void ExpressionResolver::visit(FunctionCall &call) TraversingVisitor::visit(call); if(call.declaration) + { + for(unsigned i=0; itype; + TypeDeclaration *param_type = call.declaration->parameters[i]->type_declaration; + BasicTypeDeclaration *arg_basic = dynamic_cast(arg_type); + BasicTypeDeclaration *param_basic = dynamic_cast(param_type); + if(arg_basic && param_basic) + { + Compatibility compat = get_compatibility(*param_basic, *arg_basic); + if(compat==RIGHT_CONVERTIBLE) + convert_to(call.arguments[i], *param_basic); + } + else if(!arg_type || !param_type || arg_type!=param_type) + return; + } resolve(call, call.declaration->return_type_declaration, false); + } else if(call.constructor) visit_constructor(call); }