]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/validate.cpp
Rename InterfaceBlock::name to block_name for clarity
[libs/gl.git] / source / glsl / validate.cpp
index 4b38c5b755e935f0e3f477c0ecd092202e411c7f..99e2dfe86c954d31a5a8e734a78b92a9ea3bc283 100644 (file)
@@ -145,20 +145,20 @@ void DeclarationValidator::visit(VariableDeclaration &var)
 
 void DeclarationValidator::visit(InterfaceBlock &iface)
 {
-       string key = iface.interface+iface.name;
+       string key = iface.interface+iface.block_name;
        map<string, InterfaceBlock *>::const_iterator i = interface_blocks.find(key);
        if(i!=interface_blocks.end())
-               multiple_definition(format("interface block '%s %s'", iface.interface, iface.name), iface, *i->second);
+               multiple_definition(format("interface block '%s %s'", iface.interface, iface.block_name), iface, *i->second);
        else
                interface_blocks.insert(make_pair(key, &iface));
 
-       if(Statement *previous = find_definition(iface.name))
+       if(Statement *previous = find_definition(iface.block_name))
        {
                if(!dynamic_cast<InterfaceBlock *>(previous))
-                       multiple_definition(format("'%s'", iface.name), iface, *previous);
+                       multiple_definition(format("'%s'", iface.block_name), iface, *previous);
        }
        else
-               record_definition(iface.name, iface);
+               record_definition(iface.block_name, iface);
 
        if(!iface.instance_name.empty())
                check_definition(iface.instance_name, iface);
@@ -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));
@@ -273,7 +279,7 @@ void ReferenceValidator::visit(VariableDeclaration &var)
 void ReferenceValidator::visit(InterfaceBlock &iface)
 {
        if(!iface.struct_declaration)
-               error(iface, format("Interface block '%s %s' lacks a struct declaration", iface.interface, iface.name));
+               error(iface, format("Interface block '%s %s' lacks a struct declaration", iface.interface, iface.block_name));
        TraversingVisitor::visit(iface);
 }