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>
This commit is contained in:
parent
f1cca5671f
commit
6ac7d47338
1 changed files with 23 additions and 7 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue