]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/validate.cpp
Resolve and validate the parameters of constructors in GLSL
[libs/gl.git] / source / glsl / validate.cpp
index 4b38c5b755e935f0e3f477c0ecd092202e411c7f..b8710509e8d32fe424062f6c6558976ceab6da35 100644 (file)
@@ -239,10 +239,16 @@ void ReferenceValidator::visit(InterfaceBlockReference &iface)
 
 void ReferenceValidator::visit(FunctionCall &call)
 {
-       if(!call.declaration && !call.constructor)
+       if((!call.constructor && !call.declaration) || (call.constructor && !call.type))
        {
-               map<string, FunctionDeclaration *>::iterator i = stage->functions.lower_bound(call.name);
-               if(i!=stage->functions.end() && i->second->name==call.name)
+               bool have_declaration = call.constructor;
+               if(!call.constructor)
+               {
+                       map<string, FunctionDeclaration *>::iterator i = stage->functions.lower_bound(call.name);
+                       have_declaration = (i!=stage->functions.end() && i->second->name==call.name);
+               }
+
+               if(have_declaration)
                {
                        bool valid_types = true;
                        string signature;
@@ -255,7 +261,7 @@ void ReferenceValidator::visit(FunctionCall &call)
                        }
 
                        if(valid_types)
-                               error(call, format("No matching overload found for call to '%s(%s)'", call.name, signature));
+                               error(call, format("No matching %s found for '%s(%s)'", (call.constructor ? "constructor" : "overload"), call.name, signature));
                }
                else
                        error(call, format("Call to undeclared function '%s'", call.name));