diff options
author | Philip Herron <philip.herron@embecosm.com> | 2021-03-25 16:24:59 +0000 |
---|---|---|
committer | Philip Herron <herron.philip@googlemail.com> | 2021-03-27 18:55:14 +0000 |
commit | 573120551a0bc6813f32ed371df65311724e96dd (patch) | |
tree | d4262132bacfd6a705078f4e64973a5b8cfbe1c4 /gcc/rust/resolve/rust-ast-resolve.cc | |
parent | e9bb91b4a7caaab185d029d9c093c520366462d8 (diff) | |
download | gcc-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.cc | 29 |
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 > : generics.get_type_args ()) - ResolveType::go (gt.get (), UNKNOWN_NODEID); + if (!path_only_flag) + { + AST::GenericArgs &generics = seg.get_generic_args (); + for (auto > : 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 ()); } } |