diff options
author | Philip Herron <philip.herron@embecosm.com> | 2021-07-05 16:36:08 +0100 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2021-07-10 21:25:38 +0100 |
commit | c5ce98cbb8db8d33774c50e229daedf99a71bb5a (patch) | |
tree | c0da5d775494cc63b6bdfd8f26ff8fb300896a60 | |
parent | 30ca36242090e5b1dcb8094a7a11574949f36d1a (diff) | |
download | gcc-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.h | 32 |
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 (); |