]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/generate.cpp
Move function override processing to FunctionResolver
[libs/gl.git] / source / glsl / generate.cpp
index 2ac37a6ffae788a16c6cc367dbcf53b9fdb61dcb..13b62aa32296a3d6c93c851827387205c08bfed1 100644 (file)
@@ -24,20 +24,6 @@ void DeclarationCombiner::visit(Block &block)
        TraversingVisitor::visit(block);
 }
 
-void DeclarationCombiner::visit(FunctionDeclaration &func)
-{
-       vector<FunctionDeclaration *> &decls = functions[func.name];
-       if(func.definition)
-       {
-               for(vector<FunctionDeclaration *>::iterator i=decls.begin(); i!=decls.end(); ++i)
-               {
-                       (*i)->definition = func.definition;
-                       (*i)->body.body.clear();
-               }
-       }
-       decls.push_back(&func);
-}
-
 void DeclarationCombiner::visit(VariableDeclaration &var)
 {
        VariableDeclaration *&ptr = variables[var.name];
@@ -128,7 +114,7 @@ void ConstantSpecializer::visit(VariableDeclaration &var)
 }
 
 
-void BlockResolver::enter(Block &block)
+void BlockHierarchyResolver::enter(Block &block)
 {
        block.parent = current_block;
 }
@@ -335,17 +321,17 @@ void FunctionResolver::visit(FunctionCall &call)
 void FunctionResolver::visit(FunctionDeclaration &func)
 {
        vector<FunctionDeclaration *> &decls = functions[func.name];
-       if(func.definition)
+       if(func.definition==&func)
        {
                for(vector<FunctionDeclaration *>::iterator i=decls.begin(); i!=decls.end(); ++i)
+               {
                        (*i)->definition = func.definition;
-               decls.clear();
-               decls.push_back(&func);
+                       (*i)->body.body.clear();
+               }
        }
        else if(!decls.empty() && decls.back()->definition)
                func.definition = decls.back()->definition;
-       else
-               decls.push_back(&func);
+       decls.push_back(&func);
 
        TraversingVisitor::visit(func);
 }
@@ -416,9 +402,9 @@ bool InterfaceGenerator::generate_interface(VariableDeclaration &var, const stri
                iface_var->array = var.array;
        if(iface_var->array)
                iface_var->array_size = var.array_size;
-       iface_var->layout = var.layout;
        if(iface=="in")
        {
+               iface_var->layout = var.layout;
                iface_var->linked_declaration = &var;
                var.linked_declaration = iface_var;
        }