gccrs: collector: Make visitors public

Make all trivial visitor functions public so we could easily call the
collection of an ast's subtree from any node.

gcc/rust/ChangeLog:

	* ast/rust-ast-collector.h: Make trivial visitors public.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
This commit is contained in:
Pierre-Emmanuel Patry 2023-05-18 13:58:28 +02:00 committed by Arthur Cohen
parent f888077249
commit 5c20c980f7

View File

@ -41,22 +41,6 @@ public:
private:
std::vector<TokenPtr> &tokens;
/**
* Compatibility layer for using the visitor pattern on polymorphic classes
* with a unified overload syntax. This allows us to call `visit` both on
* types implementing `accept_vis` method and for classes for which the
* `visit` method is directly implemented.
*/
template <typename T> void visit (std::unique_ptr<T> &node)
{
node->accept_vis (*this);
}
/**
* @see visit<std::unique_ptr<T>>
*/
template <typename T> void visit (T &node);
/**
* Visit all items in given @collection, placing the separator in between but
* not at the end.
@ -106,6 +90,24 @@ private:
void visit_closure_common (ClosureExpr &expr);
void visit_loop_common (BaseLoopExpr &expr);
public:
/**
* Compatibility layer for using the visitor pattern on polymorphic classes
* with a unified overload syntax. This allows us to call `visit` both on
* types implementing `accept_vis` method and for classes for which the
* `visit` method is directly implemented.
*/
template <typename T> void visit (std::unique_ptr<T> &node)
{
node->accept_vis (*this);
}
/**
* @see visit<std::unique_ptr<T>>
*/
template <typename T> void visit (T &node);
void visit (LoopLabel &label);
void visit (Literal &lit, Location locus = {});