virtual void visit(Return &);
};
-class StageVisitor: public TraversingVisitor
-{
-public:
- typedef void ResultType;
-
-protected:
- Stage *stage;
-
- StageVisitor();
-
-public:
- virtual void apply(Stage &);
- void get_result() const { }
-};
-
-class BlockModifier: public StageVisitor
+class BlockModifier: public TraversingVisitor
{
protected:
bool remove_node;
void apply_and_increment(Block &, NodeList<Statement>::iterator &);
public:
- using StageVisitor::visit;
+ using TraversingVisitor::visit;
virtual void visit(Block &);
};
template<typename T>
-class NodeGatherer: public StageVisitor
+class NodeGatherer: public TraversingVisitor
{
-public:
- typedef std::vector<T *> ResultType;
-
private:
std::vector<T *> nodes;
public:
- const ResultType &get_result() const { return nodes; }
- using StageVisitor::visit;
+ const std::vector<T *> &apply(Stage &s) { visit(s.content); return nodes; }
+
+ using TraversingVisitor::visit;
virtual void visit(T &n) { nodes.push_back(&n); }
};
-class NodeRemover: public StageVisitor
+class NodeRemover: public TraversingVisitor
{
private:
+ Stage *stage;
std::set<Node *> to_remove;
public:
- NodeRemover() { }
NodeRemover(const std::set<Node *> &);
- using StageVisitor::visit;
+ void apply(Stage &);
+
+ using TraversingVisitor::visit;
virtual void visit(Block &);
virtual void visit(VariableDeclaration &);
virtual void visit(Iteration &);