Skip to content

Commit

Permalink
Move templated functions to header file
Browse files Browse the repository at this point in the history
Templated functions shall remain in header files to stay in line with the
rest of the codebase.

gcc/rust/ChangeLog:

	* ast/rust-ast-collector.cc (TokenCollector::visit): Move to header
	file.
	(TokenCollector::visit_items_joined_by_separator): Likewise.
	(TokenCollector::visit_as_line): Likewise.
	(TokenCollector::visit_items_as_lines): Likewise.
	(TokenCollector::visit_items_as_block): Likewise.
	* ast/rust-ast-collector.h: Add implementation.

Signed-off-by: Pierre-Emmanuel Patry <[email protected]>
  • Loading branch information
P-E-P authored and CohenArthur committed Nov 15, 2023
1 parent 9a5e6fa commit 20262da
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 76 deletions.
70 changes: 0 additions & 70 deletions gcc/rust/ast/rust-ast-collector.cc
Original file line number Diff line number Diff line change
Expand Up @@ -54,76 +54,6 @@ TokenCollector::visit (AST::Item &item)
item.accept_vis (*this);
}

template <typename T>
void
TokenCollector::visit (T &node)
{
node.accept_vis (*this);
}

template <typename T>
void
TokenCollector::visit_items_joined_by_separator (T &collection,
TokenId separator,
size_t start_offset,
size_t end_offset)
{
if (collection.size () > start_offset)
{
visit (collection.at (start_offset));
auto size = collection.size () - end_offset;
for (size_t i = start_offset + 1; i < size; i++)
{
push (Rust::Token::make (separator, UNDEF_LOCATION));
visit (collection.at (i));
}
}
}

template <typename T>
void
TokenCollector::visit_as_line (T &item, std::vector<TokenPtr> trailing)
{
indentation ();
visit (item);
for (auto &token : trailing)
push (token);
newline ();
}

template <typename T>
void
TokenCollector::visit_items_as_lines (T &collection,
std::vector<TokenPtr> trailing)
{
for (auto &item : collection)
visit_as_line (item, trailing);
}

template <typename T>
void
TokenCollector::visit_items_as_block (T &collection,
std::vector<TokenPtr> trailing,
TokenId left_brace, TokenId right_brace)
{
push (Rust::Token::make (left_brace, UNDEF_LOCATION));
if (collection.empty ())
{
push (Rust::Token::make (right_brace, UNDEF_LOCATION));
newline ();
}
else
{
newline ();
increment_indentation ();
visit_items_as_lines (collection, trailing);
decrement_indentation ();
indentation ();
push (Rust::Token::make (right_brace, UNDEF_LOCATION));
newline ();
}
}

void
TokenCollector::trailing_comma ()
{
Expand Down
52 changes: 46 additions & 6 deletions gcc/rust/ast/rust-ast-collector.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,22 +97,44 @@ class TokenCollector : public ASTVisitor
void visit_items_joined_by_separator (T &collection,
TokenId separator = COMMA,
size_t start_offset = 0,
size_t end_offset = 0);
size_t end_offset = 0)
{
if (collection.size () > start_offset)
{
visit (collection.at (start_offset));
auto size = collection.size () - end_offset;
for (size_t i = start_offset + 1; i < size; i++)
{
push (Rust::Token::make (separator, UNDEF_LOCATION));
visit (collection.at (i));
}
}
}

/**
* Visit item placing end of line after.
*/
template <typename T>
void visit_as_line (T &item, std::vector<TokenPtr> trailing = {});
void visit_as_line (T &item, std::vector<TokenPtr> trailing = {})
{
indentation ();
visit (item);
for (auto &token : trailing)
push (token);
newline ();
}

/**
* Visit each item in @collection "as line".
*
* @see visit_as_line
*/
template <typename T>
void visit_items_as_lines (T &collection,
std::vector<TokenPtr> trailing = {});
void visit_items_as_lines (T &collection, std::vector<TokenPtr> trailing = {})
{
for (auto &item : collection)
visit_as_line (item, trailing);
}

/**
* Visit each item in @collection as lines inside a block delimited by braces
Expand All @@ -122,7 +144,25 @@ class TokenCollector : public ASTVisitor
template <typename T>
void visit_items_as_block (T &collection, std::vector<TokenPtr> trailing = {},
TokenId left_brace = LEFT_CURLY,
TokenId right_brace = RIGHT_CURLY);
TokenId right_brace = RIGHT_CURLY)
{
push (Rust::Token::make (left_brace, UNDEF_LOCATION));
if (collection.empty ())
{
push (Rust::Token::make (right_brace, UNDEF_LOCATION));
newline ();
}
else
{
newline ();
increment_indentation ();
visit_items_as_lines (collection, trailing);
decrement_indentation ();
indentation ();
push (Rust::Token::make (right_brace, UNDEF_LOCATION));
newline ();
}
}

void trailing_comma ();
void newline ();
Expand Down Expand Up @@ -155,7 +195,7 @@ class TokenCollector : public ASTVisitor
/**
* @see visit<std::unique_ptr<T>>
*/
template <typename T> void visit (T &node);
template <typename T> void visit (T &node) { node.accept_vis (*this); }

void visit (Visitable &v);
void visit (LoopLabel &label);
Expand Down

0 comments on commit 20262da

Please sign in to comment.