From: Pierre-Emmanuel Patry Date: Wed, 3 May 2023 08:32:17 +0000 (+0200) Subject: gccrs: converter: Add group conversion implementation X-Git-Tag: basepoints/gcc-15~2559 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c3462989ec4755e1a1d9aaa6364667927112c413;p=thirdparty%2Fgcc.git gccrs: converter: Add group conversion implementation Add conversion of a given Group reference. gcc/rust/ChangeLog: * util/rust-token-converter.cc (from_punct): Add group conversion. (from_group): Likewise. Signed-off-by: Pierre-Emmanuel Patry --- diff --git a/gcc/rust/util/rust-token-converter.cc b/gcc/rust/util/rust-token-converter.cc index 25abf763e241..e40d2135fda2 100644 --- a/gcc/rust/util/rust-token-converter.cc +++ b/gcc/rust/util/rust-token-converter.cc @@ -312,9 +312,40 @@ static void from_punct (ProcMacro::Punct punct, std::vector &result) {} +/** + * Iterate over a Group and append all inner tokens to a vector enclosed by it's + * delimiters. + * + * @param g Reference to the Group to convert. + * @param result Reference to the vector tokens should be appended to. + */ static void -from_group (ProcMacro::Group g, std::vector &result) -{} +from_group (const ProcMacro::Group &g, std::vector &result) +{ + switch (g.delimiter) + { + case ProcMacro::PARENTHESIS: + result.push_back (Token::make (LEFT_PAREN, Location ())); + from_tokenstream (g.stream, result); + result.push_back (Token::make (RIGHT_PAREN, Location ())); + break; + case ProcMacro::BRACE: + result.push_back (Token::make (LEFT_CURLY, Location ())); + from_tokenstream (g.stream, result); + result.push_back (Token::make (RIGHT_CURLY, Location ())); + break; + case ProcMacro::BRACKET: + result.push_back (Token::make (LEFT_SQUARE, Location ())); + from_tokenstream (g.stream, result); + result.push_back (Token::make (RIGHT_SQUARE, Location ())); + break; + case ProcMacro::NONE: + from_tokenstream (g.stream, result); + break; + default: + gcc_unreachable (); + } +} static void from_tokenstream (ProcMacro::TokenStream ts, std::vector &result)