public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-8126] gccrs: Parse variadic functions
@ 2024-01-16 18:15 Arthur Cohen
0 siblings, 0 replies; only message in thread
From: Arthur Cohen @ 2024-01-16 18:15 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:6ac7d47338bb8c34f3751be77be05fa9ca456921
commit r14-8126-g6ac7d47338bb8c34f3751be77be05fa9ca456921
Author: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Date: Wed Oct 18 14:31:53 2023 +0200
gccrs: Parse variadic functions
Variadic functions were not parsed because it is an unstable feature.
While it is still unstable, it is required in order to parse libcore.
gcc/rust/ChangeLog:
* parse/rust-parse-impl.h (Parser::parse_function_param): Parse
variadic functions.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Diff:
---
gcc/rust/parse/rust-parse-impl.h | 30 +++++++++++++++++++++++-------
1 file changed, 23 insertions(+), 7 deletions(-)
diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h
index eb0310c888f..61c915db997 100644
--- a/gcc/rust/parse/rust-parse-impl.h
+++ b/gcc/rust/parse/rust-parse-impl.h
@@ -3584,6 +3584,13 @@ Parser<ManagedTokenSource>::parse_function_param ()
// TODO: should saved location be at start of outer attributes or pattern?
location_t locus = lexer.peek_token ()->get_locus ();
+
+ if (lexer.peek_token ()->get_id () == ELLIPSIS) // Unnamed variadic
+ {
+ lexer.skip_token (); // Skip ellipsis
+ return AST::FunctionParam (std::move (outer_attrs), locus);
+ }
+
std::unique_ptr<AST::Pattern> param_pattern = parse_pattern ();
// create error function param if it doesn't exist
@@ -3599,15 +3606,24 @@ Parser<ManagedTokenSource>::parse_function_param ()
return AST::FunctionParam::create_error ();
}
- std::unique_ptr<AST::Type> param_type = parse_type ();
- if (param_type == nullptr)
+ if (lexer.peek_token ()->get_id () == ELLIPSIS) // Named variadic
{
- // skip?
- return AST::FunctionParam::create_error ();
+ lexer.skip_token (); // Skip ellipsis
+ return AST::FunctionParam (std::move (param_pattern),
+ std::move (outer_attrs), locus);
+ }
+ else
+ {
+ std::unique_ptr<AST::Type> param_type = parse_type ();
+ if (param_type == nullptr)
+ {
+ // skip?
+ return AST::FunctionParam::create_error ();
+ }
+ return AST::FunctionParam (std::move (param_pattern),
+ std::move (param_type),
+ std::move (outer_attrs), locus);
}
-
- return AST::FunctionParam (std::move (param_pattern), std::move (param_type),
- std::move (outer_attrs), locus);
}
/* Parses a function or method return type syntactical construction. Also
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-01-16 18:15 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-16 18:15 [gcc r14-8126] gccrs: Parse variadic functions Arthur Cohen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).