aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2021-07-05 16:36:08 +0100
committerPhilip Herron <philip.herron@embecosm.com>2021-07-10 21:25:38 +0100
commitc5ce98cbb8db8d33774c50e229daedf99a71bb5a (patch)
treec0da5d775494cc63b6bdfd8f26ff8fb300896a60
parent30ca36242090e5b1dcb8094a7a11574949f36d1a (diff)
downloadgcc-c5ce98cbb8db8d33774c50e229daedf99a71bb5a.zip
gcc-c5ce98cbb8db8d33774c50e229daedf99a71bb5a.tar.gz
gcc-c5ce98cbb8db8d33774c50e229daedf99a71bb5a.tar.bz2
ImplBlocks can contain TypeAlias's
This lowers TypeAliases into ImplItem for HIR::ImplBlocks.
-rw-r--r--gcc/rust/hir/rust-ast-lower-implitem.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/gcc/rust/hir/rust-ast-lower-implitem.h b/gcc/rust/hir/rust-ast-lower-implitem.h
index 16c5aa0..b08a166 100644
--- a/gcc/rust/hir/rust-ast-lower-implitem.h
+++ b/gcc/rust/hir/rust-ast-lower-implitem.h
@@ -52,6 +52,38 @@ public:
return resolver.translated;
}
+ void visit (AST::TypeAlias &alias) override
+ {
+ std::vector<std::unique_ptr<HIR::WhereClauseItem> > where_clause_items;
+ HIR::WhereClause where_clause (std::move (where_clause_items));
+ HIR::Visibility vis = HIR::Visibility::create_public ();
+
+ std::vector<std::unique_ptr<HIR::GenericParam> > generic_params;
+ if (alias.has_generics ())
+ generic_params = lower_generic_params (alias.get_generic_params ());
+
+ HIR::Type *existing_type
+ = ASTLoweringType::translate (alias.get_type_aliased ().get ());
+
+ auto crate_num = mappings->get_current_crate ();
+ Analysis::NodeMapping mapping (crate_num, alias.get_node_id (),
+ mappings->get_next_hir_id (crate_num),
+ mappings->get_next_localdef_id (crate_num));
+
+ translated = new HIR::TypeAlias (mapping, alias.get_new_type_name (),
+ std::move (generic_params),
+ std::move (where_clause),
+ std::unique_ptr<HIR::Type> (existing_type),
+ std::move (vis), alias.get_outer_attrs (),
+ alias.get_locus ());
+
+ mappings->insert_hir_implitem (mapping.get_crate_num (),
+ mapping.get_hirid (), parent_impl_id,
+ translated);
+ mappings->insert_location (crate_num, mapping.get_hirid (),
+ alias.get_locus ());
+ }
+
void visit (AST::ConstantItem &constant) override
{
HIR::Visibility vis = HIR::Visibility::create_public ();