aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2021-06-16 13:23:31 +0100
committerPhilip Herron <philip.herron@embecosm.com>2021-06-16 13:23:31 +0100
commit730a2174b933162c42843af43d85851b85d64144 (patch)
tree25b6519e73c5523dbee8a7b1d894ce9c83434913 /gcc
parent44481c1c2bdf7d160928dde30f48fdc54e75bf38 (diff)
downloadgcc-730a2174b933162c42843af43d85851b85d64144.zip
gcc-730a2174b933162c42843af43d85851b85d64144.tar.gz
gcc-730a2174b933162c42843af43d85851b85d64144.tar.bz2
Refactor HIR::InherentImpl to become HIR::ImplBlock
This folds the abstract Impl class directly into HIR::ImplBlock since the TraitImplBlock is removed. It also refactors InherentImplItem to become simply ImplItem.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/backend/rust-compile-base.h2
-rw-r--r--gcc/rust/backend/rust-compile-implitem.h5
-rw-r--r--gcc/rust/backend/rust-compile-item.h2
-rw-r--r--gcc/rust/backend/rust-compile-resolve-path.cc5
-rw-r--r--gcc/rust/backend/rust-compile.cc5
-rw-r--r--gcc/rust/hir/rust-ast-lower-implitem.h11
-rw-r--r--gcc/rust/hir/rust-ast-lower-item.h50
-rw-r--r--gcc/rust/hir/tree/rust-hir-full-decls.h5
-rw-r--r--gcc/rust/hir/tree/rust-hir-full-test.cc11
-rw-r--r--gcc/rust/hir/tree/rust-hir-item.h164
-rw-r--r--gcc/rust/hir/tree/rust-hir-visitor.h2
-rw-r--r--gcc/rust/hir/tree/rust-hir.h10
-rw-r--r--gcc/rust/lint/rust-lint-marklive-base.h2
-rw-r--r--gcc/rust/lint/rust-lint-marklive.cc2
-rw-r--r--gcc/rust/lint/rust-lint-marklive.h7
-rw-r--r--gcc/rust/typecheck/rust-hir-const-fold-base.h2
-rw-r--r--gcc/rust/typecheck/rust-hir-inherent-impl-overlap.h44
-rw-r--r--gcc/rust/typecheck/rust-hir-path-probe.h9
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-base.h2
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-expr.h2
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-implitem.h4
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-item.h4
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-toplevel.h2
-rw-r--r--gcc/rust/typecheck/rust-tycheck-dump.h2
-rw-r--r--gcc/rust/util/rust-hir-map.cc11
-rw-r--r--gcc/rust/util/rust-hir-map.h18
26 files changed, 157 insertions, 226 deletions
diff --git a/gcc/rust/backend/rust-compile-base.h b/gcc/rust/backend/rust-compile-base.h
index 29e7562..232d5b9 100644
--- a/gcc/rust/backend/rust-compile-base.h
+++ b/gcc/rust/backend/rust-compile-base.h
@@ -147,7 +147,7 @@ public:
virtual void visit (HIR::TraitItemConst &item) {}
virtual void visit (HIR::TraitItemType &item) {}
virtual void visit (HIR::Trait &trait) {}
- virtual void visit (HIR::InherentImpl &impl) {}
+ virtual void visit (HIR::ImplBlock &impl) {}
virtual void visit (HIR::ExternalStaticItem &item) {}
virtual void visit (HIR::ExternalFunctionItem &item) {}
diff --git a/gcc/rust/backend/rust-compile-implitem.h b/gcc/rust/backend/rust-compile-implitem.h
index a5ca13b..d6698d1 100644
--- a/gcc/rust/backend/rust-compile-implitem.h
+++ b/gcc/rust/backend/rust-compile-implitem.h
@@ -34,9 +34,8 @@ class CompileInherentImplItem : public HIRCompileBase
using Rust::Compile::HIRCompileBase::visit;
public:
- static void Compile (TyTy::BaseType *self, HIR::InherentImplItem *item,
- Context *ctx, bool compile_fns,
- TyTy::BaseType *concrete = nullptr)
+ static void Compile (TyTy::BaseType *self, HIR::ImplItem *item, Context *ctx,
+ bool compile_fns, TyTy::BaseType *concrete = nullptr)
{
CompileInherentImplItem compiler (self, ctx, compile_fns, concrete);
item->accept_vis (compiler);
diff --git a/gcc/rust/backend/rust-compile-item.h b/gcc/rust/backend/rust-compile-item.h
index e3b6d0f..8a521e7 100644
--- a/gcc/rust/backend/rust-compile-item.h
+++ b/gcc/rust/backend/rust-compile-item.h
@@ -274,7 +274,7 @@ public:
ctx->push_function (fndecl);
}
- void visit (HIR::InherentImpl &impl_block) override
+ void visit (HIR::ImplBlock &impl_block) override
{
TyTy::BaseType *self_lookup = nullptr;
if (!ctx->get_tyctx ()->lookup_type (
diff --git a/gcc/rust/backend/rust-compile-resolve-path.cc b/gcc/rust/backend/rust-compile-resolve-path.cc
index 90c4eeb..cb1cfcf 100644
--- a/gcc/rust/backend/rust-compile-resolve-path.cc
+++ b/gcc/rust/backend/rust-compile-resolve-path.cc
@@ -91,7 +91,7 @@ ResolvePathRef::visit (HIR::PathInExpression &expr)
else
{
HirId parent_impl_id = UNKNOWN_HIRID;
- HIR::InherentImplItem *resolved_item
+ HIR::ImplItem *resolved_item
= ctx->get_mappings ()->lookup_hir_implitem (
expr.get_mappings ().get_crate_num (), ref, &parent_impl_id);
if (resolved_item != nullptr)
@@ -100,8 +100,7 @@ ResolvePathRef::visit (HIR::PathInExpression &expr)
HIR::Item *impl_ref = ctx->get_mappings ()->lookup_hir_item (
expr.get_mappings ().get_crate_num (), parent_impl_id);
rust_assert (impl_ref != nullptr);
- HIR::InherentImpl *impl
- = static_cast<HIR::InherentImpl *> (impl_ref);
+ HIR::ImplBlock *impl = static_cast<HIR::ImplBlock *> (impl_ref);
TyTy::BaseType *self = nullptr;
bool ok = ctx->get_tyctx ()->lookup_type (
diff --git a/gcc/rust/backend/rust-compile.cc b/gcc/rust/backend/rust-compile.cc
index ea21ad3..77036b2 100644
--- a/gcc/rust/backend/rust-compile.cc
+++ b/gcc/rust/backend/rust-compile.cc
@@ -137,9 +137,8 @@ CompileExpr::visit (HIR::MethodCallExpr &expr)
{
// this might fail because its a forward decl so we can attempt to
// resolve it now
- HIR::InherentImplItem *resolved_item
- = ctx->get_mappings ()->lookup_hir_implitem (
- expr.get_mappings ().get_crate_num (), ref, nullptr);
+ HIR::ImplItem *resolved_item = ctx->get_mappings ()->lookup_hir_implitem (
+ expr.get_mappings ().get_crate_num (), ref, nullptr);
if (resolved_item == nullptr)
{
rust_error_at (expr.get_locus (), "failed to lookup forward decl");
diff --git a/gcc/rust/hir/rust-ast-lower-implitem.h b/gcc/rust/hir/rust-ast-lower-implitem.h
index 31ebb83..4479d14 100644
--- a/gcc/rust/hir/rust-ast-lower-implitem.h
+++ b/gcc/rust/hir/rust-ast-lower-implitem.h
@@ -34,8 +34,8 @@ class ASTLowerImplItem : public ASTLoweringBase
using Rust::HIR::ASTLoweringBase::visit;
public:
- static HIR::InherentImplItem *translate (AST::InherentImplItem *item,
- HirId parent_impl_id)
+ static HIR::ImplItem *translate (AST::InherentImplItem *item,
+ HirId parent_impl_id)
{
ASTLowerImplItem resolver (parent_impl_id);
item->accept_vis (resolver);
@@ -43,8 +43,8 @@ public:
return resolver.translated;
}
- static HIR::InherentImplItem *translate (AST::TraitImplItem *item,
- HirId parent_impl_id)
+ static HIR::ImplItem *translate (AST::TraitImplItem *item,
+ HirId parent_impl_id)
{
ASTLowerImplItem resolver (parent_impl_id);
item->accept_vis (resolver);
@@ -254,8 +254,7 @@ private:
: translated (nullptr), parent_impl_id (parent_impl_id)
{}
- HIR::InherentImplItem *translated;
-
+ HIR::ImplItem *translated;
HirId parent_impl_id;
};
diff --git a/gcc/rust/hir/rust-ast-lower-item.h b/gcc/rust/hir/rust-ast-lower-item.h
index 74ec361..9c0caf2 100644
--- a/gcc/rust/hir/rust-ast-lower-item.h
+++ b/gcc/rust/hir/rust-ast-lower-item.h
@@ -373,24 +373,25 @@ public:
mappings->get_next_hir_id (crate_num),
mappings->get_next_localdef_id (crate_num));
- std::vector<std::unique_ptr<HIR::InherentImplItem> > impl_items;
+ std::vector<std::unique_ptr<HIR::ImplItem> > impl_items;
std::vector<HirId> impl_item_ids;
for (auto &impl_item : impl_block.get_impl_items ())
{
- HIR::InherentImplItem *lowered
+ HIR::ImplItem *lowered
= ASTLowerImplItem::translate (impl_item.get (),
mapping.get_hirid ());
- impl_items.push_back (std::unique_ptr<HIR::InherentImplItem> (lowered));
+ impl_items.push_back (std::unique_ptr<HIR::ImplItem> (lowered));
impl_item_ids.push_back (lowered->get_impl_mappings ().get_hirid ());
}
- translated
- = new HIR::InherentImpl (mapping, std::move (impl_items),
- std::move (generic_params),
- std::unique_ptr<HIR::Type> (impl_type),
- where_clause, vis, impl_block.get_inner_attrs (),
- impl_block.get_outer_attrs (),
- impl_block.get_locus ());
+ HIR::ImplBlock *hir_impl_block
+ = new HIR::ImplBlock (mapping, std::move (impl_items),
+ std::move (generic_params),
+ std::unique_ptr<HIR::Type> (impl_type),
+ where_clause, vis, impl_block.get_inner_attrs (),
+ impl_block.get_outer_attrs (),
+ impl_block.get_locus ());
+ translated = hir_impl_block;
mappings->insert_defid_mapping (mapping.get_defid (), translated);
mappings->insert_hir_item (mapping.get_crate_num (), mapping.get_hirid (),
@@ -400,9 +401,7 @@ public:
for (auto &impl_item_id : impl_item_ids)
{
- mappings->insert_impl_item_mapping (impl_item_id,
- static_cast<HIR::InherentImpl *> (
- translated));
+ mappings->insert_impl_item_mapping (impl_item_id, hir_impl_block);
}
}
@@ -514,24 +513,25 @@ public:
mappings->get_next_hir_id (crate_num),
mappings->get_next_localdef_id (crate_num));
- std::vector<std::unique_ptr<HIR::InherentImplItem> > impl_items;
+ std::vector<std::unique_ptr<HIR::ImplItem> > impl_items;
std::vector<HirId> impl_item_ids;
for (auto &impl_item : impl_block.get_impl_items ())
{
- HIR::InherentImplItem *lowered
+ HIR::ImplItem *lowered
= ASTLowerImplItem::translate (impl_item.get (),
mapping.get_hirid ());
- impl_items.push_back (std::unique_ptr<HIR::InherentImplItem> (lowered));
+ impl_items.push_back (std::unique_ptr<HIR::ImplItem> (lowered));
impl_item_ids.push_back (lowered->get_impl_mappings ().get_hirid ());
}
- translated
- = new HIR::InherentImpl (mapping, std::move (impl_items),
- std::move (generic_params),
- std::unique_ptr<HIR::Type> (impl_type),
- where_clause, vis, impl_block.get_inner_attrs (),
- impl_block.get_outer_attrs (),
- impl_block.get_locus ());
+ HIR::ImplBlock *hir_impl_block
+ = new HIR::ImplBlock (mapping, std::move (impl_items),
+ std::move (generic_params),
+ std::unique_ptr<HIR::Type> (impl_type),
+ where_clause, vis, impl_block.get_inner_attrs (),
+ impl_block.get_outer_attrs (),
+ impl_block.get_locus ());
+ translated = hir_impl_block;
mappings->insert_defid_mapping (mapping.get_defid (), translated);
mappings->insert_hir_item (mapping.get_crate_num (), mapping.get_hirid (),
@@ -541,9 +541,7 @@ public:
for (auto &impl_item_id : impl_item_ids)
{
- mappings->insert_impl_item_mapping (impl_item_id,
- static_cast<HIR::InherentImpl *> (
- translated));
+ mappings->insert_impl_item_mapping (impl_item_id, hir_impl_block);
}
}
diff --git a/gcc/rust/hir/tree/rust-hir-full-decls.h b/gcc/rust/hir/tree/rust-hir-full-decls.h
index 0920fe1..0fa845b 100644
--- a/gcc/rust/hir/tree/rust-hir-full-decls.h
+++ b/gcc/rust/hir/tree/rust-hir-full-decls.h
@@ -37,7 +37,7 @@ class GenericParam;
class LifetimeParam;
class TraitItem;
-class InherentImplItem;
+class ImplItem;
struct Crate;
class PathExpr;
@@ -193,8 +193,7 @@ class TraitItemMethod;
class TraitItemConst;
class TraitItemType;
class Trait;
-class Impl;
-class InherentImpl;
+class ImplBlock;
class ExternalItem;
class ExternalStaticItem;
struct NamedFunctionParam;
diff --git a/gcc/rust/hir/tree/rust-hir-full-test.cc b/gcc/rust/hir/tree/rust-hir-full-test.cc
index e465b2d..32acefc 100644
--- a/gcc/rust/hir/tree/rust-hir-full-test.cc
+++ b/gcc/rust/hir/tree/rust-hir-full-test.cc
@@ -377,7 +377,7 @@ ConstantItem::as_string () const
}
std::string
-InherentImpl::as_string () const
+ImplBlock::as_string () const
{
std::string str = VisItem::as_string ();
@@ -398,7 +398,7 @@ InherentImpl::as_string () const
{
rust_debug (
"something really terrible has gone wrong - null pointer "
- "generic param in inherent impl.");
+ "generic param in impl.");
return "nullptr_POINTER_MARK";
}
@@ -406,7 +406,7 @@ InherentImpl::as_string () const
}
}
- str += "\n Type: " + trait_type->as_string ();
+ str += "\n Type: " + impl_type->as_string ();
str += "\n Where clause: ";
if (has_where_clause ())
@@ -434,8 +434,7 @@ InherentImpl::as_string () const
}
}
- // inherent impl items
- str += "\n Inherent impl items: ";
+ str += "\n impl items: ";
if (!has_impl_items ())
{
str += "none";
@@ -4605,7 +4604,7 @@ Trait::accept_vis (HIRVisitor &vis)
}
void
-InherentImpl::accept_vis (HIRVisitor &vis)
+ImplBlock::accept_vis (HIRVisitor &vis)
{
vis.visit (*this);
}
diff --git a/gcc/rust/hir/tree/rust-hir-item.h b/gcc/rust/hir/tree/rust-hir-item.h
index abb82fd..3bfdf71 100644
--- a/gcc/rust/hir/tree/rust-hir-item.h
+++ b/gcc/rust/hir/tree/rust-hir-item.h
@@ -578,7 +578,7 @@ protected:
};
// A method (function belonging to a type)
-class Method : public InherentImplItem
+class Method : public ImplItem
{
Analysis::NodeMapping mappings;
@@ -1260,7 +1260,7 @@ protected:
class LetStmt;
// Rust function declaration HIR node
-class Function : public VisItem, public InherentImplItem
+class Function : public VisItem, public ImplItem
{
FunctionQualifiers qualifiers;
Identifier function_name;
@@ -1426,7 +1426,7 @@ protected:
};
// Rust type alias (i.e. typedef) HIR node
-class TypeAlias : public VisItem, public InherentImplItem
+class TypeAlias : public VisItem, public ImplItem
{
Identifier new_type_name;
@@ -2183,7 +2183,7 @@ protected:
Union *clone_item_impl () const override { return new Union (*this); }
};
-class ConstantItem : public VisItem, public InherentImplItem
+class ConstantItem : public VisItem, public ImplItem
{
Identifier identifier;
std::unique_ptr<Type> type;
@@ -2878,84 +2878,58 @@ protected:
/* Use covariance to implement clone function as returning this object
* rather than base */
Trait *clone_item_impl () const override { return new Trait (*this); }
-
- /* Use covariance to implement clone function as returning this object
- * rather than base */
- /*virtual Trait* clone_statement_impl() const override {
- return new Trait(*this);
- }*/
};
-// Implementation item declaration HIR node - abstract base class
-class Impl : public VisItem
+class ImplBlock : public VisItem
{
- // must be protected to allow subclasses to access them properly
-protected:
- // bool has_generics;
- // Generics generic_params;
- std::vector<std::unique_ptr<GenericParam> > generic_params; // inlined
-
- std::unique_ptr<Type> trait_type;
-
- // bool has_where_clause;
+ std::vector<std::unique_ptr<GenericParam> > generic_params;
+ std::unique_ptr<Type> impl_type;
WhereClause where_clause;
-
- // bool has_inner_attrs;
AST::AttrVec inner_attrs;
-
-private:
- // doesn't really need to be protected as write access probably not needed
Location locus;
+ std::vector<std::unique_ptr<ImplItem> > impl_items;
public:
- // Returns whether impl has generic parameters.
- bool has_generics () const { return !generic_params.empty (); }
-
- // Returns whether impl has where clause.
- bool has_where_clause () const { return !where_clause.is_empty (); }
-
- // Returns whether impl has inner attributes.
- bool has_inner_attrs () const { return !inner_attrs.empty (); }
-
- Location get_locus () const { return locus; }
-
- std::unique_ptr<Type> &get_type () { return trait_type; };
+ std::string as_string () const override;
- std::vector<std::unique_ptr<GenericParam> > &get_generic_params ()
- {
- return generic_params;
- }
+ // Returns whether inherent impl block has inherent impl items.
+ bool has_impl_items () const { return !impl_items.empty (); }
-protected:
// Mega-constructor
- Impl (Analysis::NodeMapping mappings,
- std::vector<std::unique_ptr<GenericParam> > generic_params,
- std::unique_ptr<Type> trait_type, WhereClause where_clause,
- Visibility vis, AST::AttrVec inner_attrs, AST::AttrVec outer_attrs,
- Location locus)
+ ImplBlock (Analysis::NodeMapping mappings,
+ std::vector<std::unique_ptr<ImplItem> > impl_items,
+ std::vector<std::unique_ptr<GenericParam> > generic_params,
+ std::unique_ptr<Type> impl_type, WhereClause where_clause,
+ Visibility vis, AST::AttrVec inner_attrs, AST::AttrVec outer_attrs,
+ Location locus)
: VisItem (std::move (mappings), std::move (vis), std::move (outer_attrs)),
generic_params (std::move (generic_params)),
- trait_type (std::move (trait_type)),
+ impl_type (std::move (impl_type)),
where_clause (std::move (where_clause)),
- inner_attrs (std::move (inner_attrs)), locus (locus)
+ inner_attrs (std::move (inner_attrs)), locus (locus),
+ impl_items (std::move (impl_items))
{}
- // Copy constructor
- Impl (Impl const &other)
- : VisItem (other), trait_type (other.trait_type->clone_type ()),
+ // Copy constructor with vector clone
+ ImplBlock (ImplBlock const &other)
+ : VisItem (other), impl_type (other.impl_type->clone_type ()),
where_clause (other.where_clause), inner_attrs (other.inner_attrs),
locus (other.locus)
{
generic_params.reserve (other.generic_params.size ());
for (const auto &e : other.generic_params)
generic_params.push_back (e->clone_generic_param ());
+
+ impl_items.reserve (other.impl_items.size ());
+ for (const auto &e : other.impl_items)
+ impl_items.push_back (e->clone_inherent_impl_item ());
}
- // Assignment operator overload with cloning
- Impl &operator= (Impl const &other)
+ // Overloaded assignment operator with vector clone
+ ImplBlock &operator= (ImplBlock const &other)
{
VisItem::operator= (other);
- trait_type = other.trait_type->clone_type ();
+ impl_type = other.impl_type->clone_type ();
where_clause = other.where_clause;
inner_attrs = other.inner_attrs;
locus = other.locus;
@@ -2964,52 +2938,6 @@ protected:
for (const auto &e : other.generic_params)
generic_params.push_back (e->clone_generic_param ());
- return *this;
- }
-
- // move constructors
- Impl (Impl &&other) = default;
- Impl &operator= (Impl &&other) = default;
-};
-
-// Regular "impl foo" impl block declaration HIR node
-class InherentImpl : public Impl
-{
- // bool has_impl_items;
- std::vector<std::unique_ptr<InherentImplItem> > impl_items;
-
-public:
- std::string as_string () const override;
-
- // Returns whether inherent impl block has inherent impl items.
- bool has_impl_items () const { return !impl_items.empty (); }
-
- // Mega-constructor
- InherentImpl (Analysis::NodeMapping mappings,
- std::vector<std::unique_ptr<InherentImplItem> > impl_items,
- std::vector<std::unique_ptr<GenericParam> > generic_params,
- std::unique_ptr<Type> trait_type, WhereClause where_clause,
- Visibility vis, AST::AttrVec inner_attrs,
- AST::AttrVec outer_attrs, Location locus)
- : Impl (std::move (mappings), std::move (generic_params),
- std::move (trait_type), std::move (where_clause), std::move (vis),
- std::move (inner_attrs), std::move (outer_attrs), locus),
- impl_items (std::move (impl_items))
- {}
-
- // Copy constructor with vector clone
- InherentImpl (InherentImpl const &other) : Impl (other)
- {
- impl_items.reserve (other.impl_items.size ());
- for (const auto &e : other.impl_items)
- impl_items.push_back (e->clone_inherent_impl_item ());
- }
-
- // Overloaded assignment operator with vector clone
- InherentImpl &operator= (InherentImpl const &other)
- {
- Impl::operator= (other);
-
impl_items.reserve (other.impl_items.size ());
for (const auto &e : other.impl_items)
impl_items.push_back (e->clone_inherent_impl_item ());
@@ -3017,29 +2945,41 @@ public:
return *this;
}
- // default move constructors
- InherentImpl (InherentImpl &&other) = default;
- InherentImpl &operator= (InherentImpl &&other) = default;
+ ImplBlock (ImplBlock &&other) = default;
+ ImplBlock &operator= (ImplBlock &&other) = default;
void accept_vis (HIRVisitor &vis) override;
- std::vector<std::unique_ptr<InherentImplItem> > &get_impl_items ()
+ std::vector<std::unique_ptr<ImplItem> > &get_impl_items ()
{
return impl_items;
};
- const std::vector<std::unique_ptr<InherentImplItem> > &get_impl_items () const
+ const std::vector<std::unique_ptr<ImplItem> > &get_impl_items () const
{
return impl_items;
};
-protected:
- /* Use covariance to implement clone function as returning this object
- * rather than base */
- InherentImpl *clone_item_impl () const override
+ // Returns whether impl has generic parameters.
+ bool has_generics () const { return !generic_params.empty (); }
+
+ // Returns whether impl has where clause.
+ bool has_where_clause () const { return !where_clause.is_empty (); }
+
+ // Returns whether impl has inner attributes.
+ bool has_inner_attrs () const { return !inner_attrs.empty (); }
+
+ Location get_locus () const { return locus; }
+
+ std::unique_ptr<Type> &get_type () { return impl_type; };
+
+ std::vector<std::unique_ptr<GenericParam> > &get_generic_params ()
{
- return new InherentImpl (*this);
+ return generic_params;
}
+
+protected:
+ ImplBlock *clone_item_impl () const override { return new ImplBlock (*this); }
};
// Abstract base class for an item used inside an extern block
diff --git a/gcc/rust/hir/tree/rust-hir-visitor.h b/gcc/rust/hir/tree/rust-hir-visitor.h
index 0be28f3..ad033b4 100644
--- a/gcc/rust/hir/tree/rust-hir-visitor.h
+++ b/gcc/rust/hir/tree/rust-hir-visitor.h
@@ -127,7 +127,7 @@ public:
virtual void visit (TraitItemConst &item) = 0;
virtual void visit (TraitItemType &item) = 0;
virtual void visit (Trait &trait) = 0;
- virtual void visit (InherentImpl &impl) = 0;
+ virtual void visit (ImplBlock &impl) = 0;
virtual void visit (ExternalStaticItem &item) = 0;
virtual void visit (ExternalFunctionItem &item) = 0;
virtual void visit (ExternBlock &block) = 0;
diff --git a/gcc/rust/hir/tree/rust-hir.h b/gcc/rust/hir/tree/rust-hir.h
index 693fdd0..8700be8 100644
--- a/gcc/rust/hir/tree/rust-hir.h
+++ b/gcc/rust/hir/tree/rust-hir.h
@@ -645,19 +645,19 @@ public:
const Analysis::NodeMapping &get_mappings () const { return mappings; }
};
-class InherentImplItem
+class ImplItem
{
protected:
// Clone function implementation as pure virtual method
- virtual InherentImplItem *clone_inherent_impl_item_impl () const = 0;
+ virtual ImplItem *clone_inherent_impl_item_impl () const = 0;
public:
- virtual ~InherentImplItem () {}
+ virtual ~ImplItem () {}
// Unique pointer custom clone function
- std::unique_ptr<InherentImplItem> clone_inherent_impl_item () const
+ std::unique_ptr<ImplItem> clone_inherent_impl_item () const
{
- return std::unique_ptr<InherentImplItem> (clone_inherent_impl_item_impl ());
+ return std::unique_ptr<ImplItem> (clone_inherent_impl_item_impl ());
}
virtual std::string as_string () const = 0;
diff --git a/gcc/rust/lint/rust-lint-marklive-base.h b/gcc/rust/lint/rust-lint-marklive-base.h
index 670554e..0452917 100644
--- a/gcc/rust/lint/rust-lint-marklive-base.h
+++ b/gcc/rust/lint/rust-lint-marklive-base.h
@@ -143,7 +143,7 @@ public:
virtual void visit (HIR::TraitItemConst &) override {}
virtual void visit (HIR::TraitItemType &) override {}
virtual void visit (HIR::Trait &) override {}
- virtual void visit (HIR::InherentImpl &) override {}
+ virtual void visit (HIR::ImplBlock &) override {}
virtual void visit (HIR::ExternalStaticItem &) override {}
virtual void visit (HIR::ExternalFunctionItem &) override {}
diff --git a/gcc/rust/lint/rust-lint-marklive.cc b/gcc/rust/lint/rust-lint-marklive.cc
index 56e3cc5..3bfc1c3 100644
--- a/gcc/rust/lint/rust-lint-marklive.cc
+++ b/gcc/rust/lint/rust-lint-marklive.cc
@@ -80,7 +80,7 @@ MarkLive::go (HIR::Crate &crate)
else
{ // the item maybe inside a trait impl
HirId parent_impl_id = UNKNOWN_HIRID;
- HIR::InherentImplItem *implItem
+ HIR::ImplItem *implItem
= mappings->lookup_hir_implitem (crateNum, hirId, &parent_impl_id);
if (implItem != nullptr)
implItem->accept_vis (*this);
diff --git a/gcc/rust/lint/rust-lint-marklive.h b/gcc/rust/lint/rust-lint-marklive.h
index cb22926..2ad0aae 100644
--- a/gcc/rust/lint/rust-lint-marklive.h
+++ b/gcc/rust/lint/rust-lint-marklive.h
@@ -80,24 +80,29 @@ public:
expr.get_lhs ()->accept_vis (*this);
expr.get_rhs ()->accept_vis (*this);
}
+
void visit (HIR::AssignmentExpr &expr) override
{
expr.visit_lhs (*this);
expr.visit_rhs (*this);
}
+
void visit (HIR::Method &method) override
{
method.get_definition ().get ()->accept_vis (*this);
}
+
void visit (HIR::TraitItemFunc &item) override
{
item.get_block_expr ()->accept_vis (*this);
}
+
void visit (HIR::TraitItemMethod &item) override
{
item.get_block_expr ()->accept_vis (*this);
}
- void visit (HIR::InherentImpl &impl) override
+
+ void visit (HIR::ImplBlock &impl) override
{
for (auto &&item : impl.get_impl_items ())
{
diff --git a/gcc/rust/typecheck/rust-hir-const-fold-base.h b/gcc/rust/typecheck/rust-hir-const-fold-base.h
index e16273e..d27d9ce 100644
--- a/gcc/rust/typecheck/rust-hir-const-fold-base.h
+++ b/gcc/rust/typecheck/rust-hir-const-fold-base.h
@@ -146,7 +146,7 @@ public:
virtual void visit (HIR::TraitItemConst &) override {}
virtual void visit (HIR::TraitItemType &) override {}
virtual void visit (HIR::Trait &) override {}
- virtual void visit (HIR::InherentImpl &) override {}
+ virtual void visit (HIR::ImplBlock &) override {}
virtual void visit (HIR::ExternalStaticItem &) override {}
virtual void visit (HIR::ExternalFunctionItem &) override {}
diff --git a/gcc/rust/typecheck/rust-hir-inherent-impl-overlap.h b/gcc/rust/typecheck/rust-hir-inherent-impl-overlap.h
index 6309594..e93e12a 100644
--- a/gcc/rust/typecheck/rust-hir-inherent-impl-overlap.h
+++ b/gcc/rust/typecheck/rust-hir-inherent-impl-overlap.h
@@ -25,14 +25,14 @@
namespace Rust {
namespace Resolver {
-class InherentImplItemToName : public TypeCheckBase
+class ImplItemToName : public TypeCheckBase
{
using Rust::Resolver::TypeCheckBase::visit;
public:
- static bool resolve (HIR::InherentImplItem *item, std::string &name_result)
+ static bool resolve (HIR::ImplItem *item, std::string &name_result)
{
- InherentImplItemToName resolver (name_result);
+ ImplItemToName resolver (name_result);
item->accept_vis (resolver);
return resolver.ok;
}
@@ -56,7 +56,7 @@ public:
}
private:
- InherentImplItemToName (std::string &result)
+ ImplItemToName (std::string &result)
: TypeCheckBase (), ok (false), result (result)
{}
@@ -69,7 +69,7 @@ class GetLocusFromImplItem : public TypeCheckBase
using Rust::Resolver::TypeCheckBase::visit;
public:
- static bool Resolve (HIR::InherentImplItem *query, Location &locus)
+ static bool Resolve (HIR::ImplItem *query, Location &locus)
{
GetLocusFromImplItem resolver (locus);
query->accept_vis (resolver);
@@ -113,18 +113,17 @@ public:
OverlappingImplItemPass pass;
// generate mappings
- pass.mappings->iterate_impl_items ([&] (HirId id,
- HIR::InherentImplItem *impl_item,
- HIR::InherentImpl *impl) -> bool {
- pass.process_impl_item (id, impl_item, impl);
- return true;
- });
+ pass.mappings->iterate_impl_items (
+ [&] (HirId id, HIR::ImplItem *impl_item, HIR::ImplBlock *impl) -> bool {
+ pass.process_impl_item (id, impl_item, impl);
+ return true;
+ });
pass.scan ();
}
- void process_impl_item (HirId id, HIR::InherentImplItem *impl_item,
- HIR::InherentImpl *impl)
+ void process_impl_item (HirId id, HIR::ImplItem *impl_item,
+ HIR::ImplBlock *impl)
{
// lets make a mapping of impl-item Self type to (impl-item,name):
// {
@@ -137,11 +136,10 @@ public:
rust_assert (ok);
std::string impl_item_name;
- ok = InherentImplItemToName::resolve (impl_item, impl_item_name);
+ ok = ImplItemToName::resolve (impl_item, impl_item_name);
rust_assert (ok);
- std::pair<HIR::InherentImplItem *, std::string> elem (impl_item,
- impl_item_name);
+ std::pair<HIR::ImplItem *, std::string> elem (impl_item, impl_item_name);
impl_mappings[impl_type].insert (std::move (elem));
}
@@ -166,17 +164,17 @@ public:
}
void possible_collision (
- std::set<std::pair<HIR::InherentImplItem *, std::string> > query,
- std::set<std::pair<HIR::InherentImplItem *, std::string> > candidate)
+ std::set<std::pair<HIR::ImplItem *, std::string> > query,
+ std::set<std::pair<HIR::ImplItem *, std::string> > candidate)
{
for (auto &q : query)
{
- HIR::InherentImplItem *query_impl_item = q.first;
+ HIR::ImplItem *query_impl_item = q.first;
std::string query_impl_item_name = q.second;
for (auto &c : candidate)
{
- HIR::InherentImplItem *candidate_impl_item = c.first;
+ HIR::ImplItem *candidate_impl_item = c.first;
std::string candidate_impl_item_name = c.second;
if (query_impl_item_name.compare (candidate_impl_item_name) == 0)
@@ -186,8 +184,8 @@ public:
}
}
- void collision_detected (HIR::InherentImplItem *query,
- HIR::InherentImplItem *dup, const std::string &name)
+ void collision_detected (HIR::ImplItem *query, HIR::ImplItem *dup,
+ const std::string &name)
{
Location qlocus; // query
bool ok = GetLocusFromImplItem::Resolve (query, qlocus);
@@ -206,7 +204,7 @@ private:
OverlappingImplItemPass () : TypeCheckBase () {}
std::map<TyTy::BaseType *,
- std::set<std::pair<HIR::InherentImplItem *, std::string> > >
+ std::set<std::pair<HIR::ImplItem *, std::string> > >
impl_mappings;
};
diff --git a/gcc/rust/typecheck/rust-hir-path-probe.h b/gcc/rust/typecheck/rust-hir-path-probe.h
index 5dda90a..06e8906 100644
--- a/gcc/rust/typecheck/rust-hir-path-probe.h
+++ b/gcc/rust/typecheck/rust-hir-path-probe.h
@@ -29,7 +29,7 @@ namespace Resolver {
struct PathProbeCandidate
{
- HIR::InherentImplItem *impl_item;
+ HIR::ImplItem *impl_item;
TyTy::BaseType *ty;
};
@@ -43,16 +43,15 @@ public:
{
PathProbeType probe (receiver, segment_name);
probe.mappings->iterate_impl_items (
- [&] (HirId id, HIR::InherentImplItem *item,
- HIR::InherentImpl *impl) mutable -> bool {
+ [&] (HirId id, HIR::ImplItem *item,
+ HIR::ImplBlock *impl) mutable -> bool {
probe.process_candidate (id, item, impl);
return true;
});
return probe.candidates;
}
- void process_candidate (HirId id, HIR::InherentImplItem *item,
- HIR::InherentImpl *impl)
+ void process_candidate (HirId id, HIR::ImplItem *item, HIR::ImplBlock *impl)
{
HirId impl_ty_id = impl->get_type ()->get_mappings ().get_hirid ();
TyTy::BaseType *impl_block_ty = nullptr;
diff --git a/gcc/rust/typecheck/rust-hir-type-check-base.h b/gcc/rust/typecheck/rust-hir-type-check-base.h
index eaa484e..011ed66 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-base.h
+++ b/gcc/rust/typecheck/rust-hir-type-check-base.h
@@ -145,7 +145,7 @@ public:
virtual void visit (HIR::TraitItemConst &) override {}
virtual void visit (HIR::TraitItemType &) override {}
virtual void visit (HIR::Trait &) override {}
- virtual void visit (HIR::InherentImpl &) override {}
+ virtual void visit (HIR::ImplBlock &) override {}
virtual void visit (HIR::ExternalStaticItem &) override {}
virtual void visit (HIR::ExternalFunctionItem &) override {}
diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.h b/gcc/rust/typecheck/rust-hir-type-check-expr.h
index 5787531..57a5ca1 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-expr.h
+++ b/gcc/rust/typecheck/rust-hir-type-check-expr.h
@@ -229,7 +229,7 @@ public:
}
auto resolved_candidate = candidates.at (0);
- HIR::InherentImplItem *resolved_method = resolved_candidate.impl_item;
+ HIR::ImplItem *resolved_method = resolved_candidate.impl_item;
TyTy::BaseType *lookup_tyty = resolved_candidate.ty;
if (lookup_tyty->get_kind () != TyTy::TypeKind::FNDEF)
diff --git a/gcc/rust/typecheck/rust-hir-type-check-implitem.h b/gcc/rust/typecheck/rust-hir-type-check-implitem.h
index 2f54d0c..1f66e69 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-implitem.h
+++ b/gcc/rust/typecheck/rust-hir-type-check-implitem.h
@@ -34,7 +34,7 @@ class TypeCheckTopLevelImplItem : public TypeCheckBase
public:
static void
- Resolve (HIR::InherentImplItem *item, TyTy::BaseType *self,
+ Resolve (HIR::ImplItem *item, TyTy::BaseType *self,
std::vector<TyTy::SubstitutionParamMapping> substitutions)
{
TypeCheckTopLevelImplItem resolver (self, substitutions);
@@ -213,7 +213,7 @@ class TypeCheckImplItem : public TypeCheckBase
using Rust::Resolver::TypeCheckBase::visit;
public:
- static void Resolve (HIR::InherentImplItem *item, TyTy::BaseType *self)
+ static void Resolve (HIR::ImplItem *item, TyTy::BaseType *self)
{
TypeCheckImplItem resolver (self);
item->accept_vis (resolver);
diff --git a/gcc/rust/typecheck/rust-hir-type-check-item.h b/gcc/rust/typecheck/rust-hir-type-check-item.h
index 1205dce..5220101 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-item.h
+++ b/gcc/rust/typecheck/rust-hir-type-check-item.h
@@ -40,14 +40,14 @@ public:
item->accept_vis (resolver);
}
- void visit (HIR::InherentImpl &impl_block) override
+ void visit (HIR::ImplBlock &impl_block) override
{
TyTy::BaseType *self = nullptr;
if (!context->lookup_type (
impl_block.get_type ()->get_mappings ().get_hirid (), &self))
{
rust_error_at (impl_block.get_locus (),
- "failed to resolve Self for InherentImpl");
+ "failed to resolve Self for ImplBlock");
return;
}
diff --git a/gcc/rust/typecheck/rust-hir-type-check-toplevel.h b/gcc/rust/typecheck/rust-hir-type-check-toplevel.h
index e01b46f..45bf6f3 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-toplevel.h
+++ b/gcc/rust/typecheck/rust-hir-type-check-toplevel.h
@@ -235,7 +235,7 @@ public:
context->insert_type (function.get_mappings (), fnType);
}
- void visit (HIR::InherentImpl &impl_block) override
+ void visit (HIR::ImplBlock &impl_block) override
{
std::vector<TyTy::SubstitutionParamMapping> substitutions;
if (impl_block.has_generics ())
diff --git a/gcc/rust/typecheck/rust-tycheck-dump.h b/gcc/rust/typecheck/rust-tycheck-dump.h
index 2ab8abb..11f0c3a 100644
--- a/gcc/rust/typecheck/rust-tycheck-dump.h
+++ b/gcc/rust/typecheck/rust-tycheck-dump.h
@@ -48,7 +48,7 @@ public:
+ "\n";
}
- void visit (HIR::InherentImpl &impl_block) override
+ void visit (HIR::ImplBlock &impl_block) override
{
dump += indent () + "impl "
+ type_string (impl_block.get_type ()->get_mappings ()) + " {\n";
diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc
index a669339..fb8070a 100644
--- a/gcc/rust/util/rust-hir-map.cc
+++ b/gcc/rust/util/rust-hir-map.cc
@@ -261,16 +261,15 @@ Mappings::lookup_hir_item (CrateNum crateNum, HirId id)
void
Mappings::insert_hir_implitem (CrateNum crateNum, HirId id,
- HirId parent_impl_id,
- HIR::InherentImplItem *item)
+ HirId parent_impl_id, HIR::ImplItem *item)
{
rust_assert (lookup_hir_implitem (crateNum, id, nullptr) == nullptr);
hirImplItemMappings[crateNum][id]
- = std::pair<HirId, HIR::InherentImplItem *> (parent_impl_id, item);
+ = std::pair<HirId, HIR::ImplItem *> (parent_impl_id, item);
nodeIdToHirMappings[crateNum][item->get_impl_mappings ().get_nodeid ()] = id;
}
-HIR::InherentImplItem *
+HIR::ImplItem *
Mappings::lookup_hir_implitem (CrateNum crateNum, HirId id,
HirId *parent_impl_id)
{
@@ -282,7 +281,7 @@ Mappings::lookup_hir_implitem (CrateNum crateNum, HirId id,
if (iy == it->second.end ())
return nullptr;
- std::pair<HirId, HIR::InherentImplItem *> &ref = iy->second;
+ std::pair<HirId, HIR::ImplItem *> &ref = iy->second;
if (parent_impl_id != nullptr)
*parent_impl_id = ref.first;
@@ -527,7 +526,7 @@ Mappings::resolve_nodeid_to_stmt (CrateNum crate, NodeId id, HIR::Stmt **stmt)
void
Mappings::iterate_impl_items (
- std::function<bool (HirId, HIR::InherentImplItem *, HIR::InherentImpl *)> cb)
+ std::function<bool (HirId, HIR::ImplItem *, HIR::ImplBlock *)> cb)
{
for (auto it = hirImplItemMappings.begin (); it != hirImplItemMappings.end ();
it++)
diff --git a/gcc/rust/util/rust-hir-map.h b/gcc/rust/util/rust-hir-map.h
index 9feff33..cb3f12b 100644
--- a/gcc/rust/util/rust-hir-map.h
+++ b/gcc/rust/util/rust-hir-map.h
@@ -129,9 +129,9 @@ public:
HIR::Item *lookup_hir_item (CrateNum crateNum, HirId id);
void insert_hir_implitem (CrateNum crateNum, HirId id, HirId parent_impl_id,
- HIR::InherentImplItem *item);
- HIR::InherentImplItem *lookup_hir_implitem (CrateNum crateNum, HirId id,
- HirId *parent_impl_id);
+ HIR::ImplItem *item);
+ HIR::ImplItem *lookup_hir_implitem (CrateNum crateNum, HirId id,
+ HirId *parent_impl_id);
void insert_hir_expr (CrateNum crateNum, HirId id, HIR::Expr *expr);
HIR::Expr *lookup_hir_expr (CrateNum crateNum, HirId id);
@@ -177,14 +177,14 @@ public:
return hirNodesWithinCrate[crate];
}
- void insert_impl_item_mapping (HirId impl_item_id, HIR::InherentImpl *impl)
+ void insert_impl_item_mapping (HirId impl_item_id, HIR::ImplBlock *impl)
{
rust_assert (hirImplItemsToImplMappings.find (impl_item_id)
== hirImplItemsToImplMappings.end ());
hirImplItemsToImplMappings[impl_item_id] = impl;
}
- HIR::InherentImpl *lookup_associated_impl (HirId impl_item_id)
+ HIR::ImplBlock *lookup_associated_impl (HirId impl_item_id)
{
auto lookup = hirImplItemsToImplMappings.find (impl_item_id);
rust_assert (lookup != hirImplItemsToImplMappings.end ());
@@ -192,8 +192,7 @@ public:
}
void iterate_impl_items (
- std::function<bool (HirId, HIR::InherentImplItem *, HIR::InherentImpl *)>
- cb);
+ std::function<bool (HirId, HIR::ImplItem *, HIR::ImplBlock *)> cb);
private:
Mappings ();
@@ -217,11 +216,10 @@ private:
std::map<CrateNum, std::map<HirId, HIR::FunctionParam *> > hirParamMappings;
std::map<CrateNum, std::map<HirId, HIR::StructExprField *> >
hirStructFieldMappings;
- std::map<CrateNum,
- std::map<HirId, std::pair<HirId, HIR::InherentImplItem *> > >
+ std::map<CrateNum, std::map<HirId, std::pair<HirId, HIR::ImplItem *> > >
hirImplItemMappings;
std::map<CrateNum, std::map<HirId, HIR::SelfParam *> > hirSelfParamMappings;
- std::map<HirId, HIR::InherentImpl *> hirImplItemsToImplMappings;
+ std::map<HirId, HIR::ImplBlock *> hirImplItemsToImplMappings;
// location info
std::map<CrateNum, std::map<NodeId, Location> > locations;