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 \
#define RUST_COMPILE_BLOCK
#include "rust-compile-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Compile {
#define RUST_COMPILE_EXPR
#include "rust-compile-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Compile {
#define RUST_COMPILE_FNPARAM
#include "rust-compile-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Compile {
#define RUST_COMPILE_ITEM
#include "rust-compile-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Compile {
// <http://www.gnu.org/licenses/>.
#include "rust-compile-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Compile {
#define RUST_COMPILE_RESOLVE_PATH
#include "rust-compile-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Compile {
#define RUST_COMPILE_STMT
#include "rust-compile-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Compile {
#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 {
#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 {
#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 {
#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 {
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;
}
#define RUST_HIR_TRAIT_RESOLVE_H
#include "rust-hir-type-check-type.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Resolver {
#define RUST_HIR_TYPE_CHECK_EXPR
#include "rust-hir-type-check-base.h"
+#include "rust-hir-visitor.h"
#include "rust-tyty.h"
namespace Rust {
#define RUST_HIR_TYPE_CHECK_IMPLITEM_H
#include "rust-hir-type-check-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Resolver {
#define RUST_HIR_TYPE_CHECK_ITEM
#include "rust-hir-type-check-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Resolver {
#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 {
#define RUST_HIR_TYPE_CHECK_PATTERN
#include "rust-hir-type-check-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Resolver {
#define RUST_HIR_TYPE_CHECK_STMT
#include "rust-hir-type-check-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Resolver {
#define RUST_HIR_TYPE_CHECK_TYPE
#include "rust-hir-type-check-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Resolver {
+++ /dev/null
-// Copyright (C) 2021-2024 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
+++ /dev/null
-// Copyright (C) 2021-2024 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