aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/resolve/rust-ast-resolve.cc
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2021-03-25 16:24:59 +0000
committerPhilip Herron <herron.philip@googlemail.com>2021-03-27 18:55:14 +0000
commit573120551a0bc6813f32ed371df65311724e96dd (patch)
treed4262132bacfd6a705078f4e64973a5b8cfbe1c4 /gcc/rust/resolve/rust-ast-resolve.cc
parente9bb91b4a7caaab185d029d9c093c520366462d8 (diff)
downloadgcc-573120551a0bc6813f32ed371df65311724e96dd.zip
gcc-573120551a0bc6813f32ed371df65311724e96dd.tar.gz
gcc-573120551a0bc6813f32ed371df65311724e96dd.tar.bz2
Add generics for impl blocks
Generics paramters to impl blocks allows each impl-item to inherit these and get handled in a similar way as to normal functions. Fixes #237
Diffstat (limited to 'gcc/rust/resolve/rust-ast-resolve.cc')
-rw-r--r--gcc/rust/resolve/rust-ast-resolve.cc29
1 files changed, 14 insertions, 15 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve.cc b/gcc/rust/resolve/rust-ast-resolve.cc
index b4ca34f..4cc1a93 100644
--- a/gcc/rust/resolve/rust-ast-resolve.cc
+++ b/gcc/rust/resolve/rust-ast-resolve.cc
@@ -375,11 +375,14 @@ ResolveStructExprField::visit (AST::StructExprFieldIdentifier &field)
// rust-ast-resolve-type.h
void
-ResolveTypePath::visit (AST::TypePathSegmentGeneric &seg)
+ResolveTypeToSimplePath::visit (AST::TypePathSegmentGeneric &seg)
{
- AST::GenericArgs &generics = seg.get_generic_args ();
- for (auto &gt : generics.get_type_args ())
- ResolveType::go (gt.get (), UNKNOWN_NODEID);
+ if (!path_only_flag)
+ {
+ AST::GenericArgs &generics = seg.get_generic_args ();
+ for (auto &gt : generics.get_type_args ())
+ ResolveType::go (gt.get (), UNKNOWN_NODEID);
+ }
if (seg.is_error ())
{
@@ -389,14 +392,12 @@ ResolveTypePath::visit (AST::TypePathSegmentGeneric &seg)
return;
}
- if (seg.get_separating_scope_resolution ())
- path_buffer += "::";
-
- path_buffer += seg.get_ident_segment ().as_string ();
+ segs.push_back (AST::SimplePathSegment (seg.get_ident_segment ().as_string (),
+ seg.get_locus ()));
}
void
-ResolveTypePath::visit (AST::TypePathSegment &seg)
+ResolveTypeToSimplePath::visit (AST::TypePathSegment &seg)
{
if (seg.is_error ())
{
@@ -406,10 +407,8 @@ ResolveTypePath::visit (AST::TypePathSegment &seg)
return;
}
- if (seg.get_separating_scope_resolution ())
- path_buffer += "::";
-
- path_buffer += seg.get_ident_segment ().as_string ();
+ segs.push_back (AST::SimplePathSegment (seg.get_ident_segment ().as_string (),
+ seg.get_locus ()));
}
// rust-ast-resolve-expr.h
@@ -465,8 +464,8 @@ ResolvePath::resolve_path (AST::PathInExpression *expr)
}
else
{
- rust_error_at (expr->get_locus (), "unknown path %s",
- expr->as_string ().c_str ());
+ rust_error_at (expr->get_locus (), "unknown path %s lookup %s",
+ expr->as_string ().c_str (), path_buf.c_str ());
}
}