aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Herron <herron.philip@googlemail.com>2023-06-01 12:51:18 +0100
committerPhilip Herron <philip.herron@embecosm.com>2023-06-01 15:09:29 +0000
commit18c00a4c0c12e721755adf4a4869b6fa7ef1784d (patch)
tree8859a1511cc934c71419fe951510863cce260753
parent1eef15537f20e7077ace626f55170c70c60191b5 (diff)
downloadgcc-18c00a4c0c12e721755adf4a4869b6fa7ef1784d.zip
gcc-18c00a4c0c12e721755adf4a4869b6fa7ef1784d.tar.gz
gcc-18c00a4c0c12e721755adf4a4869b6fa7ef1784d.tar.bz2
gccrs: get rid of useless helper class and fix header usage
gcc/rust/ChangeLog: * Make-lang.in: remove files * backend/rust-compile-block.h: fix headers * backend/rust-compile-expr.h: likewise * backend/rust-compile-fnparam.h: likewise * backend/rust-compile-item.h: likewise * backend/rust-compile-pattern.h: likewise * backend/rust-compile-resolve-path.h: likewise * backend/rust-compile-stmt.h: likewise * typecheck/rust-autoderef.cc: likewise * typecheck/rust-hir-path-probe.cc: likewise * typecheck/rust-hir-path-probe.h: likewise * typecheck/rust-hir-trait-reference.h: likewise * typecheck/rust-hir-trait-resolve.cc: use a for loop instead * typecheck/rust-hir-trait-resolve.h: fix headers * typecheck/rust-hir-type-check-expr.h: likewise * typecheck/rust-hir-type-check-implitem.h: likewise * typecheck/rust-hir-type-check-item.h: likewise * typecheck/rust-hir-type-check-path.cc: likewise * typecheck/rust-hir-type-check-pattern.h: likewise * typecheck/rust-hir-type-check-stmt.h: likewise * typecheck/rust-hir-type-check-type.h: likewise * typecheck/rust-hir-type-check-util.cc: Removed. * typecheck/rust-hir-type-check-util.h: Removed. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
-rw-r--r--gcc/rust/Make-lang.in1
-rw-r--r--gcc/rust/backend/rust-compile-block.h1
-rw-r--r--gcc/rust/backend/rust-compile-expr.h1
-rw-r--r--gcc/rust/backend/rust-compile-fnparam.h1
-rw-r--r--gcc/rust/backend/rust-compile-item.h1
-rw-r--r--gcc/rust/backend/rust-compile-pattern.h1
-rw-r--r--gcc/rust/backend/rust-compile-resolve-path.h1
-rw-r--r--gcc/rust/backend/rust-compile-stmt.h1
-rw-r--r--gcc/rust/typecheck/rust-autoderef.cc1
-rw-r--r--gcc/rust/typecheck/rust-hir-path-probe.cc2
-rw-r--r--gcc/rust/typecheck/rust-hir-path-probe.h4
-rw-r--r--gcc/rust/typecheck/rust-hir-trait-reference.h1
-rw-r--r--gcc/rust/typecheck/rust-hir-trait-resolve.cc48
-rw-r--r--gcc/rust/typecheck/rust-hir-trait-resolve.h1
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-expr.h1
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-implitem.h1
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-item.h1
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-path.cc1
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-pattern.h1
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-stmt.h1
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-type.h1
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-util.cc41
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-util.h50
23 files changed, 47 insertions, 116 deletions
diff --git a/gcc/rust/Make-lang.in b/gcc/rust/Make-lang.in
index 209429c..0e8cd02 100644
--- a/gcc/rust/Make-lang.in
+++ b/gcc/rust/Make-lang.in
@@ -130,7 +130,6 @@ GRS_OBJS = \
rust/rust-tyty-subst.o \
rust/rust-typecheck-context.o \
rust/rust-tyty-bounds.o \
- rust/rust-hir-type-check-util.o \
rust/rust-hir-trait-resolve.o \
rust/rust-hir-trait-reference.o \
rust/rust-hir-type-check-item.o \
diff --git a/gcc/rust/backend/rust-compile-block.h b/gcc/rust/backend/rust-compile-block.h
index 4afa5dd..a58b0da 100644
--- a/gcc/rust/backend/rust-compile-block.h
+++ b/gcc/rust/backend/rust-compile-block.h
@@ -20,6 +20,7 @@
#define RUST_COMPILE_BLOCK
#include "rust-compile-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Compile {
diff --git a/gcc/rust/backend/rust-compile-expr.h b/gcc/rust/backend/rust-compile-expr.h
index 0962652..6505698 100644
--- a/gcc/rust/backend/rust-compile-expr.h
+++ b/gcc/rust/backend/rust-compile-expr.h
@@ -20,6 +20,7 @@
#define RUST_COMPILE_EXPR
#include "rust-compile-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Compile {
diff --git a/gcc/rust/backend/rust-compile-fnparam.h b/gcc/rust/backend/rust-compile-fnparam.h
index 8e35a462..9a3a58f 100644
--- a/gcc/rust/backend/rust-compile-fnparam.h
+++ b/gcc/rust/backend/rust-compile-fnparam.h
@@ -20,6 +20,7 @@
#define RUST_COMPILE_FNPARAM
#include "rust-compile-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Compile {
diff --git a/gcc/rust/backend/rust-compile-item.h b/gcc/rust/backend/rust-compile-item.h
index 70efc15..42ff875 100644
--- a/gcc/rust/backend/rust-compile-item.h
+++ b/gcc/rust/backend/rust-compile-item.h
@@ -20,6 +20,7 @@
#define RUST_COMPILE_ITEM
#include "rust-compile-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Compile {
diff --git a/gcc/rust/backend/rust-compile-pattern.h b/gcc/rust/backend/rust-compile-pattern.h
index 4fb3954..a0aab7b 100644
--- a/gcc/rust/backend/rust-compile-pattern.h
+++ b/gcc/rust/backend/rust-compile-pattern.h
@@ -17,6 +17,7 @@
// <http://www.gnu.org/licenses/>.
#include "rust-compile-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Compile {
diff --git a/gcc/rust/backend/rust-compile-resolve-path.h b/gcc/rust/backend/rust-compile-resolve-path.h
index ad7a67f..56dcfe5 100644
--- a/gcc/rust/backend/rust-compile-resolve-path.h
+++ b/gcc/rust/backend/rust-compile-resolve-path.h
@@ -20,6 +20,7 @@
#define RUST_COMPILE_RESOLVE_PATH
#include "rust-compile-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Compile {
diff --git a/gcc/rust/backend/rust-compile-stmt.h b/gcc/rust/backend/rust-compile-stmt.h
index 498211d..e33bad9 100644
--- a/gcc/rust/backend/rust-compile-stmt.h
+++ b/gcc/rust/backend/rust-compile-stmt.h
@@ -20,6 +20,7 @@
#define RUST_COMPILE_STMT
#include "rust-compile-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Compile {
diff --git a/gcc/rust/typecheck/rust-autoderef.cc b/gcc/rust/typecheck/rust-autoderef.cc
index 4ad0904..7d91156 100644
--- a/gcc/rust/typecheck/rust-autoderef.cc
+++ b/gcc/rust/typecheck/rust-autoderef.cc
@@ -21,6 +21,7 @@
#include "rust-hir-dot-operator.h"
#include "rust-hir-trait-resolve.h"
#include "rust-type-util.h"
+#include "rust-substitution-mapper.h"
namespace Rust {
namespace Resolver {
diff --git a/gcc/rust/typecheck/rust-hir-path-probe.cc b/gcc/rust/typecheck/rust-hir-path-probe.cc
index be3daa1..7140c65 100644
--- a/gcc/rust/typecheck/rust-hir-path-probe.cc
+++ b/gcc/rust/typecheck/rust-hir-path-probe.cc
@@ -19,6 +19,8 @@
#include "rust-hir-path-probe.h"
#include "rust-hir-trait-resolve.h"
#include "rust-type-util.h"
+#include "rust-hir-type-bounds.h"
+#include "rust-hir-full.h"
namespace Rust {
namespace Resolver {
diff --git a/gcc/rust/typecheck/rust-hir-path-probe.h b/gcc/rust/typecheck/rust-hir-path-probe.h
index dd511ac..a569fea 100644
--- a/gcc/rust/typecheck/rust-hir-path-probe.h
+++ b/gcc/rust/typecheck/rust-hir-path-probe.h
@@ -20,10 +20,8 @@
#define RUST_HIR_PATH_PROBE_H
#include "rust-hir-type-check-base.h"
-#include "rust-hir-full.h"
+#include "rust-hir-visitor.h"
#include "rust-tyty.h"
-#include "rust-substitution-mapper.h"
-#include "rust-hir-type-bounds.h"
namespace Rust {
namespace Resolver {
diff --git a/gcc/rust/typecheck/rust-hir-trait-reference.h b/gcc/rust/typecheck/rust-hir-trait-reference.h
index 2179d09..8062406 100644
--- a/gcc/rust/typecheck/rust-hir-trait-reference.h
+++ b/gcc/rust/typecheck/rust-hir-trait-reference.h
@@ -20,7 +20,6 @@
#define RUST_HIR_TRAIT_REF_H
#include "rust-hir-full.h"
-#include "rust-hir-type-check-util.h"
#include "rust-tyty-visitor.h"
namespace Rust {
diff --git a/gcc/rust/typecheck/rust-hir-trait-resolve.cc b/gcc/rust/typecheck/rust-hir-trait-resolve.cc
index 58b791b..a2c6a97 100644
--- a/gcc/rust/typecheck/rust-hir-trait-resolve.cc
+++ b/gcc/rust/typecheck/rust-hir-trait-resolve.cc
@@ -567,26 +567,34 @@ AssociatedImplTrait::setup_associated_types (
TyTy::SubstitutionArgumentMappings associated_type_args (
std::move (associated_arguments), {}, locus);
- ImplTypeIterator iter (*impl, [&] (HIR::TypeAlias &type) {
- TraitItemReference *resolved_trait_item = nullptr;
- bool ok = trait->lookup_trait_item (type.get_new_type_name (),
- &resolved_trait_item);
- if (!ok)
- return;
- if (resolved_trait_item->get_trait_item_type ()
- != TraitItemReference::TraitItemType::TYPE)
- return;
-
- TyTy::BaseType *lookup;
- if (!context->lookup_type (type.get_mappings ().get_hirid (), &lookup))
- return;
-
- // this might be generic
- TyTy::BaseType *substituted
- = SubstMapperInternal::Resolve (lookup, associated_type_args);
- resolved_trait_item->associated_type_set (substituted);
- });
- iter.go ();
+ auto &impl_items = impl->get_impl_items ();
+ for (auto &impl_item : impl_items)
+ {
+ bool is_type_alias = impl_item->get_impl_item_type ()
+ == HIR::ImplItem::ImplItemType::TYPE_ALIAS;
+ if (!is_type_alias)
+ continue;
+
+ HIR::TypeAlias &type = *static_cast<HIR::TypeAlias *> (impl_item.get ());
+
+ TraitItemReference *resolved_trait_item = nullptr;
+ bool ok = trait->lookup_trait_item (type.get_new_type_name (),
+ &resolved_trait_item);
+ if (!ok)
+ continue;
+ if (resolved_trait_item->get_trait_item_type ()
+ != TraitItemReference::TraitItemType::TYPE)
+ continue;
+
+ TyTy::BaseType *lookup;
+ if (!context->lookup_type (type.get_mappings ().get_hirid (), &lookup))
+ continue;
+
+ // this might be generic
+ TyTy::BaseType *substituted
+ = SubstMapperInternal::Resolve (lookup, associated_type_args);
+ resolved_trait_item->associated_type_set (substituted);
+ }
return self_result;
}
diff --git a/gcc/rust/typecheck/rust-hir-trait-resolve.h b/gcc/rust/typecheck/rust-hir-trait-resolve.h
index da8e2c0..92cb62c 100644
--- a/gcc/rust/typecheck/rust-hir-trait-resolve.h
+++ b/gcc/rust/typecheck/rust-hir-trait-resolve.h
@@ -20,6 +20,7 @@
#define RUST_HIR_TRAIT_RESOLVE_H
#include "rust-hir-type-check-type.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Resolver {
diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.h b/gcc/rust/typecheck/rust-hir-type-check-expr.h
index 1a9591f1..8b2db54 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-expr.h
+++ b/gcc/rust/typecheck/rust-hir-type-check-expr.h
@@ -20,6 +20,7 @@
#define RUST_HIR_TYPE_CHECK_EXPR
#include "rust-hir-type-check-base.h"
+#include "rust-hir-visitor.h"
#include "rust-tyty.h"
namespace Rust {
diff --git a/gcc/rust/typecheck/rust-hir-type-check-implitem.h b/gcc/rust/typecheck/rust-hir-type-check-implitem.h
index 0e5f16d..031fdc2 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-implitem.h
+++ b/gcc/rust/typecheck/rust-hir-type-check-implitem.h
@@ -20,6 +20,7 @@
#define RUST_HIR_TYPE_CHECK_IMPLITEM_H
#include "rust-hir-type-check-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Resolver {
diff --git a/gcc/rust/typecheck/rust-hir-type-check-item.h b/gcc/rust/typecheck/rust-hir-type-check-item.h
index 2268fdb..68eac7c 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-item.h
+++ b/gcc/rust/typecheck/rust-hir-type-check-item.h
@@ -20,6 +20,7 @@
#define RUST_HIR_TYPE_CHECK_ITEM
#include "rust-hir-type-check-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Resolver {
diff --git a/gcc/rust/typecheck/rust-hir-type-check-path.cc b/gcc/rust/typecheck/rust-hir-type-check-path.cc
index 68966e0..02821fc 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-path.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-path.cc
@@ -23,6 +23,7 @@
#include "rust-substitution-mapper.h"
#include "rust-hir-path-probe.h"
#include "rust-type-util.h"
+#include "rust-hir-type-bounds.h"
namespace Rust {
namespace Resolver {
diff --git a/gcc/rust/typecheck/rust-hir-type-check-pattern.h b/gcc/rust/typecheck/rust-hir-type-check-pattern.h
index 709e8be..9f1e5fe 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-pattern.h
+++ b/gcc/rust/typecheck/rust-hir-type-check-pattern.h
@@ -20,6 +20,7 @@
#define RUST_HIR_TYPE_CHECK_PATTERN
#include "rust-hir-type-check-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Resolver {
diff --git a/gcc/rust/typecheck/rust-hir-type-check-stmt.h b/gcc/rust/typecheck/rust-hir-type-check-stmt.h
index 9e4ca08..abc2140 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-stmt.h
+++ b/gcc/rust/typecheck/rust-hir-type-check-stmt.h
@@ -20,6 +20,7 @@
#define RUST_HIR_TYPE_CHECK_STMT
#include "rust-hir-type-check-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Resolver {
diff --git a/gcc/rust/typecheck/rust-hir-type-check-type.h b/gcc/rust/typecheck/rust-hir-type-check-type.h
index 571485d..64d0c26 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-type.h
+++ b/gcc/rust/typecheck/rust-hir-type-check-type.h
@@ -20,6 +20,7 @@
#define RUST_HIR_TYPE_CHECK_TYPE
#include "rust-hir-type-check-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Resolver {
diff --git a/gcc/rust/typecheck/rust-hir-type-check-util.cc b/gcc/rust/typecheck/rust-hir-type-check-util.cc
deleted file mode 100644
index a90a153..0000000
--- a/gcc/rust/typecheck/rust-hir-type-check-util.cc
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (C) 2021-2023 Free Software Foundation, Inc.
-
-// This file is part of GCC.
-
-// GCC is free software; you can redistribute it and/or modify it under
-// the terms of the GNU General Public License as published by the Free
-// Software Foundation; either version 3, or (at your option) any later
-// version.
-
-// GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-// WARRANTY; without even the implied warranty of MERCHANTABILITY or
-// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-// for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with GCC; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-#include "rust-hir-type-check-util.h"
-#include "rust-hir-full.h"
-
-namespace Rust {
-namespace Resolver {
-
-void
-ImplTypeIterator::go ()
-{
- for (auto &item : impl.get_impl_items ())
- {
- item->accept_vis (*this);
- }
-}
-
-void
-ImplTypeIterator::visit (HIR::TypeAlias &alias)
-{
- cb (alias);
-}
-
-} // namespace Resolver
-} // namespace Rust
diff --git a/gcc/rust/typecheck/rust-hir-type-check-util.h b/gcc/rust/typecheck/rust-hir-type-check-util.h
deleted file mode 100644
index 5758309..0000000
--- a/gcc/rust/typecheck/rust-hir-type-check-util.h
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (C) 2021-2023 Free Software Foundation, Inc.
-
-// This file is part of GCC.
-
-// GCC is free software; you can redistribute it and/or modify it under
-// the terms of the GNU General Public License as published by the Free
-// Software Foundation; either version 3, or (at your option) any later
-// version.
-
-// GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-// WARRANTY; without even the implied warranty of MERCHANTABILITY or
-// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-// for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with GCC; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-#ifndef RUST_HIR_TYPE_CHECK_UTIL_H
-#define RUST_HIR_TYPE_CHECK_UTIL_H
-
-#include "rust-system.h"
-#include "rust-hir-visitor.h"
-
-namespace Rust {
-namespace Resolver {
-
-class ImplTypeIterator : public HIR::HIRFullVisitorBase
-{
- using HIR::HIRFullVisitorBase::visit;
-
-public:
- ImplTypeIterator (HIR::ImplBlock &impl,
- std::function<void (HIR::TypeAlias &alias)> cb)
- : impl (impl), cb (cb)
- {}
-
- void go ();
-
- void visit (HIR::TypeAlias &alias) override;
-
-private:
- HIR::ImplBlock &impl;
- std::function<void (HIR::TypeAlias &alias)> cb;
-};
-
-} // namespace Resolver
-} // namespace Rust
-
-#endif // RUST_HIR_TYPE_CHECK_UTIL_H