public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
From: Thomas Schwinge <tschwinge@gcc.gnu.org>
To: gcc-cvs@gcc.gnu.org
Subject: [gcc/devel/rust/master] Cleanup canonical path usage on impl blocks
Date: Mon, 29 Aug 2022 15:31:22 +0000 (GMT)	[thread overview]
Message-ID: <20220829153122.AE7AB3858025@sourceware.org> (raw)

https://gcc.gnu.org/g:6dea70e1dafa603b2327bfb936d26fac95f46069

commit 6dea70e1dafa603b2327bfb936d26fac95f46069
Author: Philip Herron <philip.herron@embecosm.com>
Date:   Mon Aug 22 12:22:54 2022 +0100

    Cleanup canonical path usage on impl blocks

Diff:
---
 gcc/rust/resolve/rust-ast-resolve-item.cc | 40 ++++++++++++++-----------------
 1 file changed, 18 insertions(+), 22 deletions(-)

diff --git a/gcc/rust/resolve/rust-ast-resolve-item.cc b/gcc/rust/resolve/rust-ast-resolve-item.cc
index 75bd2e10b1c..0c38f28d530 100644
--- a/gcc/rust/resolve/rust-ast-resolve-item.cc
+++ b/gcc/rust/resolve/rust-ast-resolve-item.cc
@@ -534,25 +534,17 @@ ResolveItem::visit (AST::InherentImpl &impl_block)
 
   // FIXME this needs to be protected behind nominal type-checks see:
   // rustc --explain E0118
-
-  NodeId resolved_node = ResolveType::go (impl_block.get_type ().get ());
-  if (resolved_node == UNKNOWN_NODEID)
-    {
-      resolver->get_type_scope ().pop ();
-      resolver->get_name_scope ().pop ();
-      return;
-    }
+  ResolveType::go (impl_block.get_type ().get ());
 
   // Setup paths
   CanonicalPath self_cpath = CanonicalPath::create_empty ();
   bool ok = ResolveTypeToCanonicalPath::go (impl_block.get_type ().get (),
 					    self_cpath);
   rust_assert (ok);
+  rust_debug ("AST::InherentImpl resolve Self: {%s}",
+	      self_cpath.get ().c_str ());
 
-  std::string raw_impl_type_path = impl_block.get_type ()->as_string ();
-  CanonicalPath impl_type
-    = CanonicalPath::new_seg (impl_block.get_type ()->get_node_id (),
-			      raw_impl_type_path);
+  CanonicalPath impl_type = self_cpath;
   CanonicalPath impl_prefix = prefix.append (impl_type);
 
   // see https://godbolt.org/z/a3vMbsT6W
@@ -580,6 +572,9 @@ ResolveItem::visit (AST::InherentImpl &impl_block)
 
   for (auto &impl_item : impl_block.get_impl_items ())
     {
+      rust_debug (
+	"AST::InherentImpl resolve_impl_item: impl_prefix={%s} cpath={%s}",
+	impl_prefix.get ().c_str (), cpath.get ().c_str ());
       resolve_impl_item (impl_item.get (), impl_prefix, cpath);
     }
 
@@ -703,22 +698,20 @@ ResolveItem::visit (AST::TraitImpl &impl_block)
 				       canonical_trait_type);
   rust_assert (ok);
 
+  rust_debug ("AST::TraitImpl resolve trait type: {%s}",
+	      canonical_trait_type.get ().c_str ());
+
   CanonicalPath canonical_impl_type = CanonicalPath::create_empty ();
   ok = ResolveTypeToCanonicalPath::go (impl_block.get_type ().get (),
 				       canonical_impl_type);
   rust_assert (ok);
 
-  // raw paths
-  std::string raw_impl_type_path = impl_block.get_type ()->as_string ();
-  CanonicalPath impl_type_seg
-    = CanonicalPath::new_seg (impl_block.get_type ()->get_node_id (),
-			      raw_impl_type_path);
-
-  std::string raw_trait_type_path = impl_block.get_trait_path ().as_string ();
-  CanonicalPath trait_type_seg
-    = CanonicalPath::new_seg (impl_block.get_trait_path ().get_node_id (),
-			      raw_trait_type_path);
+  rust_debug ("AST::TraitImpl resolve self: {%s}",
+	      canonical_impl_type.get ().c_str ());
 
+  // raw paths
+  CanonicalPath impl_type_seg = canonical_impl_type;
+  CanonicalPath trait_type_seg = canonical_trait_type;
   CanonicalPath projection
     = CanonicalPath::trait_impl_projection_seg (impl_block.get_node_id (),
 						trait_type_seg, impl_type_seg);
@@ -756,6 +749,9 @@ ResolveItem::visit (AST::TraitImpl &impl_block)
 
   for (auto &impl_item : impl_block.get_impl_items ())
     {
+      rust_debug (
+	"AST::TraitImpl resolve_impl_item: impl_prefix={%s} cpath={%s}",
+	impl_prefix.get ().c_str (), cpath.get ().c_str ());
       resolve_impl_item (impl_item.get (), impl_prefix, cpath);
     }

                 reply	other threads:[~2022-08-29 15:31 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220829153122.AE7AB3858025@sourceware.org \
    --to=tschwinge@gcc.gnu.org \
    --cc=gcc-cvs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).