// Copyright (C) 2025 Free Software Foundation, Inc.
// This file is part of GCC.
// GCC is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 3, or (at your option) any later
// version.
// GCC is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
// You should have received a copy of the GNU General Public License
// along with GCC; see the file COPYING3. If not see
// .
#include "rust-token-tree-desugar.h"
#include "rust-ast.h"
#include "rust-token.h"
namespace Rust {
namespace AST {
DelimTokenTree
TokenTreeDesugar::go (DelimTokenTree &tts)
{
tts.accept_vis (*this);
return DelimTokenTree (tts.get_delim_type (), std::move (desugared),
tts.get_locus ());
}
void
TokenTreeDesugar::append (TokenPtr &&new_token)
{
desugared.emplace_back (std::make_unique (std::move (new_token)));
}
void
TokenTreeDesugar::append (std::unique_ptr &&new_token)
{
desugared.emplace_back (std::move (new_token));
}
void
TokenTreeDesugar::visit (Token &tts)
{
if (tts.get_id () == TokenId::OUTER_DOC_COMMENT
|| tts.get_id () == TokenId::INNER_DOC_COMMENT)
{
append (Rust::Token::make (TokenId::HASH, tts.get_locus ()));
if (tts.get_id () == TokenId::INNER_DOC_COMMENT)
append (Rust::Token::make (EXCLAM, tts.get_locus ()));
append (Rust::Token::make (TokenId::LEFT_SQUARE, tts.get_locus ()));
append (Rust::Token::make_identifier (tts.get_locus (), "doc"));
append (Rust::Token::make (TokenId::EQUAL, tts.get_locus ()));
append (Rust::Token::make_string (tts.get_locus (),
std::string (tts.get_str ())));
append (Rust::Token::make (TokenId::RIGHT_SQUARE, tts.get_locus ()));
}
else
{
append (tts.clone_token ());
}
}
}; // namespace AST
}; // namespace Rust