gccrs: parser: Allow parsing multiple reference types
authorArthur Cohen <arthur.cohen@embecosm.com>
Wed, 1 Feb 2023 10:40:13 +0000 (11:40 +0100)
committerArthur Cohen <arthur.cohen@embecosm.com>
Thu, 6 Apr 2023 08:47:18 +0000 (10:47 +0200)
commit9cbd270632bd0cb6b4fc04fdbc93b170669fa159
treeddd03d90a202bb328fac8c6b445dd54c2b5ae694
parentad9d75f50804a983a06e2fdf69772188432359ae
gccrs: parser: Allow parsing multiple reference types

The parser now recursively tries to parse a reference type after seeing
a `&` or `&&` token.

gcc/rust/ChangeLog:

* parse/rust-parse-impl.h (Parser::parse_type): Handle double ampersan
properly
(Parser::parse_reference_type): Call into `parse_reference_type_inner`
and wrap double reference types in another `AST::ReferenceType` node
(Parser::parse_reference_type_inner): Add parsing implementation
which does not care about the leading token (& or  &&)
(Parser::parse_type_no_bounds): Handle double ampersand properly
* parse/rust-parse.h: Declare `parse_reference_type_inner`

gcc/testsuite/ChangeLog:

* rust/compile/multi_reference_type.rs: New test.
gcc/rust/parse/rust-parse-impl.h
gcc/rust/parse/rust-parse.h
gcc/testsuite/rust/compile/multi_reference_type.rs [new file with mode: 0644]