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}",
#include "rust-ast-resolve-base.h"
#include "rust-ast-resolve-expr.h"
+#include "rust-diagnostics.h"
#include "rust-hir-map.h"
#include "rust-path.h"
+#include "util/rust-hir-map.h"
namespace Rust {
namespace Resolver {
{
auto &type = static_cast<AST::LangItemPath &> (type_path);
- Analysis::Mappings::get_lang_item (type);
+ rust_debug ("[ARTHUR]: lang item kind: %s",
+ LangItem::ToString (type.get_lang_item_kind ()).c_str ());
- type.get_node_id ();
+ auto lang_item = Analysis::Mappings::get ()
+ .lookup_lang_item_node (type.get_lang_item_kind ())
+ .value ();
+
+ return lang_item;
}
rust_assert (type_path.get_path_kind () == AST::Path::Kind::Type);