diff options
author | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-12-04 15:14:45 +0100 |
---|---|---|
committer | CohenArthur <arthur.cohen@embecosm.com> | 2024-12-09 14:46:13 +0000 |
commit | d812c793ef14bcfbb5ab7aa6e8c3837f8e817beb (patch) | |
tree | 93b9ad5978376102ef76f3a81573bab7b21a7fdf /gcc/rust/resolve/rust-ast-resolve-item.cc | |
parent | 3d2f58db04023adb74e5334cef31b67383def449 (diff) | |
download | gcc-d812c793ef14bcfbb5ab7aa6e8c3837f8e817beb.zip gcc-d812c793ef14bcfbb5ab7aa6e8c3837f8e817beb.tar.gz gcc-d812c793ef14bcfbb5ab7aa6e8c3837f8e817beb.tar.bz2 |
nr1.0: Resolve lang item paths properly.
gcc/rust/ChangeLog:
* resolve/rust-ast-resolve-item.cc (ResolveItem::visit): Adapt resolver
to lang item paths.
* resolve/rust-ast-resolve-type.h: Likewise.
Diffstat (limited to 'gcc/rust/resolve/rust-ast-resolve-item.cc')
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve-item.cc | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve-item.cc b/gcc/rust/resolve/rust-ast-resolve-item.cc index 49c0e6f..619efb0 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.cc +++ b/gcc/rust/resolve/rust-ast-resolve-item.cc @@ -678,16 +678,32 @@ ResolveItem::visit (AST::TraitImpl &impl_block) return; } + bool ok = true; + // setup paths CanonicalPath canonical_trait_type = CanonicalPath::create_empty (); - bool ok = ResolveTypeToCanonicalPath::go (impl_block.get_trait_path_type (), - canonical_trait_type); - if (!ok) + if (impl_block.get_trait_path ().get_path_kind () + == AST::Path::Kind::LangItem) { - resolver->get_name_scope ().pop (); - resolver->get_type_scope ().pop (); - resolver->get_label_scope ().pop (); - return; + auto &lang_item + = static_cast<AST::LangItemPath &> (impl_block.get_trait_path ()); + + canonical_trait_type + = CanonicalPath::new_seg (lang_item.get_node_id (), + LangItem::ToString ( + lang_item.get_lang_item_kind ())); + } + else + { + ok = ResolveTypeToCanonicalPath::go (impl_block.get_trait_path_type (), + canonical_trait_type); + if (!ok) + { + resolver->get_name_scope ().pop (); + resolver->get_type_scope ().pop (); + resolver->get_label_scope ().pop (); + return; + } } rust_debug ("AST::TraitImpl resolve trait type: {%s}", |