+/** Reorders a set of nodes so they appear before another node. Only nodes
+on the same hierarchly level as the target node are reordered. */
+class NodeReorderer: private TraversingVisitor
+{
+private:
+ Node *reorder_before;
+ const std::set<Node *> *to_reorder;
+
+public:
+ NodeReorderer();
+
+ void apply(Stage &, Node &, const std::set<Node *> &);
+
+private:
+ virtual void visit(Block &);
+};
+