+/** Removes types which are not used anywhere. */
+class UnusedTypeRemover: private TraversingVisitor
+{
+private:
+ std::set<Node *> unused_nodes;
+
+public:
+ bool apply(Stage &);
+
+private:
+ virtual void visit(Literal &);
+ virtual void visit(UnaryExpression &);
+ virtual void visit(BinaryExpression &);
+ virtual void visit(TernaryExpression &);
+ virtual void visit(FunctionCall &);
+ virtual void visit(BasicTypeDeclaration &);
+ virtual void visit(ImageTypeDeclaration &);
+ virtual void visit(StructDeclaration &);
+ virtual void visit(VariableDeclaration &);
+ virtual void visit(InterfaceBlock &);
+ virtual void visit(FunctionDeclaration &);
+};
+