aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/parse
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2021-08-27 18:17:30 +0100
committerPhilip Herron <philip.herron@embecosm.com>2021-08-27 18:17:30 +0100
commit46e8bf357ccd9bb0cf45b1f2f104fb1b72798a1a (patch)
tree322b247f975308a44e01c688c6b075b1fdb8f2cb /gcc/rust/parse
parent6b42381685595c34f21d5ce9ef1c31ceac76720d (diff)
downloadgcc-46e8bf357ccd9bb0cf45b1f2f104fb1b72798a1a.zip
gcc-46e8bf357ccd9bb0cf45b1f2f104fb1b72798a1a.tar.gz
gcc-46e8bf357ccd9bb0cf45b1f2f104fb1b72798a1a.tar.bz2
Qualified paths have a mandatory initial segment
Qualified path in type's initial segment is mandatory (+) any other segments are optional after the fact. see https://doc.rust-lang.org/reference/paths.html#qualified-paths This change makes the AST have a mandatory field for the initial segment the segment list now only contains the optional remaining segments.
Diffstat (limited to 'gcc/rust/parse')
-rw-r--r--gcc/rust/parse/rust-parse-impl.h7
1 files changed, 2 insertions, 5 deletions
diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h
index 8ee9e42..1c0644d 100644
--- a/gcc/rust/parse/rust-parse-impl.h
+++ b/gcc/rust/parse/rust-parse-impl.h
@@ -6742,10 +6742,6 @@ Parser<ManagedTokenSource>::parse_qualified_path_in_type ()
return AST::QualifiedPathInType::create_error ();
}
- // parse path segments
- std::vector<std::unique_ptr<AST::TypePathSegment>> segments;
- segments.reserve (1);
-
// parse initial required segment
if (!expect_token (SCOPE_RESOLUTION))
{
@@ -6765,9 +6761,9 @@ Parser<ManagedTokenSource>::parse_qualified_path_in_type ()
return AST::QualifiedPathInType::create_error ();
}
- segments.push_back (std::move (initial_segment));
// parse optional segments (as long as scope resolution operator exists)
+ std::vector<std::unique_ptr<AST::TypePathSegment>> segments;
const_TokenPtr t = lexer.peek_token ();
while (t->get_id () == SCOPE_RESOLUTION)
{
@@ -6796,6 +6792,7 @@ Parser<ManagedTokenSource>::parse_qualified_path_in_type ()
segments.shrink_to_fit ();
return AST::QualifiedPathInType (std::move (qual_path_type),
+ std::move (initial_segment),
std::move (segments), locus);
}