]> git.tdb.fi Git - libs/gl.git/commitdiff
Remove the NodeGatherer visitor
authorMikko Rasa <tdb@tdb.fi>
Mon, 8 Mar 2021 11:49:03 +0000 (13:49 +0200)
committerMikko Rasa <tdb@tdb.fi>
Mon, 8 Mar 2021 13:28:54 +0000 (15:28 +0200)
It was somewhat poorly thought out since it's unable to gather nodes of
a base class type.

source/glsl/compiler.cpp
source/glsl/visitor.h

index 7dbb501c777bd177b53e9ba37229913e5f07fd92..ac014a00147bda31eef70d842c644cab3d27929d 100644 (file)
@@ -174,7 +174,10 @@ void Compiler::append_module(Module &mod, DataFile::Collection *res)
 {
        module->source_map.merge_from(mod.source_map);
 
-       vector<Import *> imports = NodeGatherer<Import>().apply(mod.shared);
+       vector<Import *> imports;
+       for(NodeList<Statement>::const_iterator i=mod.shared.content.body.begin(); i!=mod.shared.content.body.end(); ++i)
+               if(Import *imp = dynamic_cast<Import *>(i->get()))
+                       imports.push_back(imp);
        for(vector<Import *>::iterator i=imports.begin(); i!=imports.end(); ++i)
                import(res, (*i)->module);
        NodeRemover().apply(mod.shared, set<Node *>(imports.begin(), imports.end()));
index 6fe1868ca8221a4619fc30cb889524b68f7b9f9e..30b9b484aa9a86948a9a0ae9604ace91c7ea5d1b 100644 (file)
@@ -74,20 +74,6 @@ public:
        virtual void visit(Return &);
 };
 
-/** Gathers nodes of a particular type from the syntax tree. */
-template<typename T>
-class NodeGatherer: private TraversingVisitor
-{
-private:
-       std::vector<T *> nodes;
-
-public:
-       const std::vector<T *> &apply(Stage &s) { s.content.visit(*this); return nodes; }
-
-private:
-       virtual void visit(T &n) { nodes.push_back(&n); }
-};
-
 /** Removes a set of nodes from the syntax tree. */
 class NodeRemover: private TraversingVisitor
 {