]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/optimize.cpp
Assign a result type to all expressions
[libs/gl.git] / source / glsl / optimize.cpp
index 88a323992636b0642d05d4134ee81d68bdebce9c..1aad8d1b311adcecf27904b8e29efb49892d98a6 100644 (file)
@@ -629,6 +629,29 @@ bool UnusedTypeRemover::apply(Stage &stage)
        return !unused_nodes.empty();
 }
 
+void UnusedTypeRemover::visit(Literal &literal)
+{
+       unused_nodes.erase(literal.type);
+}
+
+void UnusedTypeRemover::visit(UnaryExpression &unary)
+{
+       unused_nodes.erase(unary.type);
+       TraversingVisitor::visit(unary);
+}
+
+void UnusedTypeRemover::visit(BinaryExpression &binary)
+{
+       unused_nodes.erase(binary.type);
+       TraversingVisitor::visit(binary);
+}
+
+void UnusedTypeRemover::visit(FunctionCall &call)
+{
+       unused_nodes.erase(call.type);
+       TraversingVisitor::visit(call);
+}
+
 void UnusedTypeRemover::visit(BasicTypeDeclaration &type)
 {
        if(type.base_type)
@@ -646,6 +669,7 @@ void UnusedTypeRemover::visit(ImageTypeDeclaration &type)
 void UnusedTypeRemover::visit(StructDeclaration &strct)
 {
        unused_nodes.insert(&strct);
+       TraversingVisitor::visit(strct);
 }
 
 void UnusedTypeRemover::visit(VariableDeclaration &var)
@@ -653,6 +677,12 @@ void UnusedTypeRemover::visit(VariableDeclaration &var)
        unused_nodes.erase(var.type_declaration);
 }
 
+void UnusedTypeRemover::visit(FunctionDeclaration &func)
+{
+       unused_nodes.erase(func.return_type_declaration);
+       TraversingVisitor::visit(func);
+}
+
 
 UnusedVariableRemover::UnusedVariableRemover():
        aggregate(0),