aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/resolve
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/rust/resolve')
-rw-r--r--gcc/rust/resolve/rust-ast-resolve-implitem.h12
-rw-r--r--gcc/rust/resolve/rust-ast-resolve-item.cc54
-rw-r--r--gcc/rust/resolve/rust-ast-resolve-stmt.h30
-rw-r--r--gcc/rust/resolve/rust-ast-resolve-toplevel.h93
-rw-r--r--gcc/rust/resolve/rust-ast-resolve-type.cc3
-rw-r--r--gcc/rust/resolve/rust-ast-resolve-type.h3
-rw-r--r--gcc/rust/resolve/rust-name-resolver.cc23
-rw-r--r--gcc/rust/resolve/rust-name-resolver.h2
8 files changed, 121 insertions, 99 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve-implitem.h b/gcc/rust/resolve/rust-ast-resolve-implitem.h
index 192ecaf..29dbe34 100644
--- a/gcc/rust/resolve/rust-ast-resolve-implitem.h
+++ b/gcc/rust/resolve/rust-ast-resolve-implitem.h
@@ -147,8 +147,7 @@ public:
rust_error_at (r, "redefined multiple times");
});
- mappings->insert_canonical_path (mappings->get_current_crate (),
- function.get_node_id (), cpath);
+ mappings->insert_canonical_path (function.get_node_id (), cpath);
}
void visit (AST::TraitItemMethod &method) override
@@ -166,8 +165,7 @@ public:
rust_error_at (r, "redefined multiple times");
});
- mappings->insert_canonical_path (mappings->get_current_crate (),
- method.get_node_id (), cpath);
+ mappings->insert_canonical_path (method.get_node_id (), cpath);
}
void visit (AST::TraitItemConst &constant) override
@@ -185,8 +183,7 @@ public:
rust_error_at (r, "redefined multiple times");
});
- mappings->insert_canonical_path (mappings->get_current_crate (),
- constant.get_node_id (), cpath);
+ mappings->insert_canonical_path (constant.get_node_id (), cpath);
}
void visit (AST::TraitItemType &type) override
@@ -204,8 +201,7 @@ public:
rust_error_at (r, "redefined multiple times");
});
- mappings->insert_canonical_path (mappings->get_current_crate (),
- type.get_node_id (), cpath);
+ mappings->insert_canonical_path (type.get_node_id (), cpath);
}
private:
diff --git a/gcc/rust/resolve/rust-ast-resolve-item.cc b/gcc/rust/resolve/rust-ast-resolve-item.cc
index 62518b6..244bf64 100644
--- a/gcc/rust/resolve/rust-ast-resolve-item.cc
+++ b/gcc/rust/resolve/rust-ast-resolve-item.cc
@@ -46,8 +46,7 @@ ResolveTraitItems::visit (AST::TraitItemType &type)
= CanonicalPath::new_seg (type.get_node_id (), type.get_identifier ());
auto path = prefix.append (decl);
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- type.get_node_id (), cpath);
+ mappings->insert_canonical_path (type.get_node_id (), cpath);
for (auto &bound : type.get_type_param_bounds ())
ResolveTypeBound::go (bound.get ());
@@ -60,8 +59,7 @@ ResolveTraitItems::visit (AST::TraitItemFunc &func)
func.get_node_id (), func.get_trait_function_decl ().get_identifier ());
auto path = prefix.append (decl);
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- func.get_node_id (), cpath);
+ mappings->insert_canonical_path (func.get_node_id (), cpath);
NodeId scope_node_id = func.get_node_id ();
resolver->get_name_scope ().push (scope_node_id);
@@ -107,8 +105,7 @@ ResolveTraitItems::visit (AST::TraitItemMethod &func)
func.get_trait_method_decl ().get_identifier ());
auto path = prefix.append (decl);
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- func.get_node_id (), cpath);
+ mappings->insert_canonical_path (func.get_node_id (), cpath);
NodeId scope_node_id = func.get_node_id ();
resolver->get_name_scope ().push (scope_node_id);
@@ -170,8 +167,7 @@ ResolveTraitItems::visit (AST::TraitItemConst &constant)
constant.get_identifier ());
auto path = prefix.append (decl);
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- constant.get_node_id (), cpath);
+ mappings->insert_canonical_path (constant.get_node_id (), cpath);
ResolveType::go (constant.get_type ().get ());
@@ -199,8 +195,7 @@ ResolveItem::visit (AST::TypeAlias &alias)
= CanonicalPath::new_seg (alias.get_node_id (), alias.get_new_type_name ());
auto path = prefix.append (talias);
auto cpath = canonical_prefix.append (talias);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- alias.get_node_id (), cpath);
+ mappings->insert_canonical_path (alias.get_node_id (), cpath);
NodeId scope_node_id = alias.get_node_id ();
resolver->get_type_scope ().push (scope_node_id);
@@ -223,8 +218,7 @@ ResolveItem::visit (AST::Module &module)
auto mod = CanonicalPath::new_seg (module.get_node_id (), module.get_name ());
auto path = prefix.append (mod);
auto cpath = canonical_prefix.append (mod);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- module.get_node_id (), cpath);
+ mappings->insert_canonical_path (module.get_node_id (), cpath);
resolve_visibility (module.get_visibility ());
@@ -259,8 +253,7 @@ ResolveItem::visit (AST::TupleStruct &struct_decl)
struct_decl.get_identifier ());
auto path = prefix.append (decl);
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- struct_decl.get_node_id (), cpath);
+ mappings->insert_canonical_path (struct_decl.get_node_id (), cpath);
resolve_visibility (struct_decl.get_visibility ());
@@ -294,8 +287,7 @@ ResolveItem::visit (AST::Enum &enum_decl)
enum_decl.get_identifier ());
auto path = prefix.append (decl);
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- enum_decl.get_node_id (), cpath);
+ mappings->insert_canonical_path (enum_decl.get_node_id (), cpath);
resolve_visibility (enum_decl.get_visibility ());
@@ -327,8 +319,7 @@ ResolveItem::visit (AST::EnumItem &item)
= CanonicalPath::new_seg (item.get_node_id (), item.get_identifier ());
auto path = prefix.append (decl);
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- item.get_node_id (), cpath);
+ mappings->insert_canonical_path (item.get_node_id (), cpath);
}
void
@@ -338,8 +329,7 @@ ResolveItem::visit (AST::EnumItemTuple &item)
= CanonicalPath::new_seg (item.get_node_id (), item.get_identifier ());
auto path = prefix.append (decl);
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- item.get_node_id (), cpath);
+ mappings->insert_canonical_path (item.get_node_id (), cpath);
for (auto &field : item.get_tuple_fields ())
{
@@ -357,8 +347,7 @@ ResolveItem::visit (AST::EnumItemStruct &item)
= CanonicalPath::new_seg (item.get_node_id (), item.get_identifier ());
auto path = prefix.append (decl);
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- item.get_node_id (), cpath);
+ mappings->insert_canonical_path (item.get_node_id (), cpath);
for (auto &field : item.get_struct_fields ())
{
@@ -377,8 +366,7 @@ ResolveItem::visit (AST::EnumItemDiscriminant &item)
auto path = prefix.append (decl);
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- item.get_node_id (), cpath);
+ mappings->insert_canonical_path (item.get_node_id (), cpath);
}
void
@@ -388,8 +376,7 @@ ResolveItem::visit (AST::StructStruct &struct_decl)
struct_decl.get_identifier ());
auto path = prefix.append (decl);
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- struct_decl.get_node_id (), cpath);
+ mappings->insert_canonical_path (struct_decl.get_node_id (), cpath);
resolve_visibility (struct_decl.get_visibility ());
@@ -423,8 +410,7 @@ ResolveItem::visit (AST::Union &union_decl)
union_decl.get_identifier ());
auto path = prefix.append (decl);
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- union_decl.get_node_id (), cpath);
+ mappings->insert_canonical_path (union_decl.get_node_id (), cpath);
resolve_visibility (union_decl.get_visibility ());
@@ -456,8 +442,7 @@ ResolveItem::visit (AST::StaticItem &var)
= CanonicalPath::new_seg (var.get_node_id (), var.get_identifier ());
auto path = prefix.append (decl);
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- var.get_node_id (), cpath);
+ mappings->insert_canonical_path (var.get_node_id (), cpath);
ResolveType::go (var.get_type ().get ());
ResolveExpr::go (var.get_expr ().get (), path, cpath);
@@ -470,8 +455,7 @@ ResolveItem::visit (AST::ConstantItem &constant)
constant.get_identifier ());
auto path = prefix.append (decl);
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- constant.get_node_id (), cpath);
+ mappings->insert_canonical_path (constant.get_node_id (), cpath);
resolve_visibility (constant.get_visibility ());
@@ -487,8 +471,7 @@ ResolveItem::visit (AST::Function &function)
auto path = prefix.append (decl);
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- function.get_node_id (), cpath);
+ mappings->insert_canonical_path (function.get_node_id (), cpath);
resolve_visibility (function.get_visibility ());
@@ -614,8 +597,7 @@ ResolveItem::visit (AST::Method &method)
= CanonicalPath::new_seg (method.get_node_id (), method.get_method_name ());
auto path = prefix.append (decl);
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- method.get_node_id (), cpath);
+ mappings->insert_canonical_path (method.get_node_id (), cpath);
NodeId scope_node_id = method.get_node_id ();
diff --git a/gcc/rust/resolve/rust-ast-resolve-stmt.h b/gcc/rust/resolve/rust-ast-resolve-stmt.h
index 8867845..6f21bc3 100644
--- a/gcc/rust/resolve/rust-ast-resolve-stmt.h
+++ b/gcc/rust/resolve/rust-ast-resolve-stmt.h
@@ -60,8 +60,7 @@ public:
constant.get_identifier ());
auto path = decl; // this ensures we have the correct relative resolution
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- constant.get_node_id (), cpath);
+ mappings->insert_canonical_path (constant.get_node_id (), cpath);
resolver->get_name_scope ().insert (
path, constant.get_node_id (), constant.get_locus (), false,
@@ -94,8 +93,7 @@ public:
struct_decl.get_identifier ());
auto path = decl; // this ensures we have the correct relative resolution
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- struct_decl.get_node_id (), cpath);
+ mappings->insert_canonical_path (struct_decl.get_node_id (), cpath);
resolver->get_type_scope ().insert (
path, struct_decl.get_node_id (), struct_decl.get_locus (), false,
@@ -126,8 +124,7 @@ public:
enum_decl.get_identifier ());
auto path = decl; // this ensures we have the correct relative resolution
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- enum_decl.get_node_id (), cpath);
+ mappings->insert_canonical_path (enum_decl.get_node_id (), cpath);
resolver->get_type_scope ().insert (
path, enum_decl.get_node_id (), enum_decl.get_locus (), false,
@@ -158,8 +155,7 @@ public:
CanonicalPath::new_seg (item.get_node_id (), item.get_identifier ()));
auto path = decl; // this ensures we have the correct relative resolution
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- item.get_node_id (), cpath);
+ mappings->insert_canonical_path (item.get_node_id (), cpath);
resolver->get_type_scope ().insert (
path, item.get_node_id (), item.get_locus (), false,
@@ -178,8 +174,7 @@ public:
CanonicalPath::new_seg (item.get_node_id (), item.get_identifier ()));
auto path = decl; // this ensures we have the correct relative resolution
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- item.get_node_id (), cpath);
+ mappings->insert_canonical_path (item.get_node_id (), cpath);
resolver->get_type_scope ().insert (
path, item.get_node_id (), item.get_locus (), false,
@@ -204,8 +199,7 @@ public:
CanonicalPath::new_seg (item.get_node_id (), item.get_identifier ()));
auto path = decl; // this ensures we have the correct relative resolution
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- item.get_node_id (), cpath);
+ mappings->insert_canonical_path (item.get_node_id (), cpath);
resolver->get_type_scope ().insert (
path, item.get_node_id (), item.get_locus (), false,
@@ -230,8 +224,7 @@ public:
CanonicalPath::new_seg (item.get_node_id (), item.get_identifier ()));
auto path = decl; // this ensures we have the correct relative resolution
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- item.get_node_id (), cpath);
+ mappings->insert_canonical_path (item.get_node_id (), cpath);
resolver->get_type_scope ().insert (
path, item.get_node_id (), item.get_locus (), false,
@@ -250,8 +243,7 @@ public:
struct_decl.get_identifier ());
auto path = decl; // this ensures we have the correct relative resolution
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- struct_decl.get_node_id (), cpath);
+ mappings->insert_canonical_path (struct_decl.get_node_id (), cpath);
resolver->get_type_scope ().insert (
path, struct_decl.get_node_id (), struct_decl.get_locus (), false,
@@ -287,8 +279,7 @@ public:
union_decl.get_identifier ());
auto path = decl; // this ensures we have the correct relative resolution
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- union_decl.get_node_id (), cpath);
+ mappings->insert_canonical_path (union_decl.get_node_id (), cpath);
resolver->get_type_scope ().insert (
path, union_decl.get_node_id (), union_decl.get_locus (), false,
@@ -322,8 +313,7 @@ public:
function.get_function_name ());
auto path = decl; // this ensures we have the correct relative resolution
auto cpath = canonical_prefix.append (decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- function.get_node_id (), cpath);
+ mappings->insert_canonical_path (function.get_node_id (), cpath);
resolver->get_name_scope ().insert (
path, function.get_node_id (), function.get_locus (), false,
diff --git a/gcc/rust/resolve/rust-ast-resolve-toplevel.h b/gcc/rust/resolve/rust-ast-resolve-toplevel.h
index 7aacc0a..352faac 100644
--- a/gcc/rust/resolve/rust-ast-resolve-toplevel.h
+++ b/gcc/rust/resolve/rust-ast-resolve-toplevel.h
@@ -24,6 +24,7 @@
#include "rust-ast-resolve-implitem.h"
#include "rust-ast-full.h"
#include "rust-name-resolver.h"
+#include "rust-session-manager.h"
namespace Rust {
namespace Resolver {
@@ -72,8 +73,7 @@ public:
resolver->pop_module_scope ();
- mappings->insert_canonical_path (mappings->get_current_crate (),
- module.get_node_id (), cpath);
+ mappings->insert_canonical_path (module.get_node_id (), cpath);
}
void visit (AST::TypeAlias &alias) override
@@ -93,8 +93,7 @@ public:
NodeId current_module = resolver->peek_current_module_scope ();
mappings->insert_module_child_item (current_module, talias);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- alias.get_node_id (), cpath);
+ mappings->insert_canonical_path (alias.get_node_id (), cpath);
}
void visit (AST::TupleStruct &struct_decl) override
@@ -114,8 +113,7 @@ public:
NodeId current_module = resolver->peek_current_module_scope ();
mappings->insert_module_child_item (current_module, decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- struct_decl.get_node_id (), cpath);
+ mappings->insert_canonical_path (struct_decl.get_node_id (), cpath);
}
void visit (AST::Enum &enum_decl) override
@@ -138,8 +136,7 @@ public:
NodeId current_module = resolver->peek_current_module_scope ();
mappings->insert_module_child_item (current_module, decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- enum_decl.get_node_id (), cpath);
+ mappings->insert_canonical_path (enum_decl.get_node_id (), cpath);
}
void visit (AST::EnumItem &item) override
@@ -157,8 +154,7 @@ public:
rust_error_at (r, "redefined multiple times");
});
- mappings->insert_canonical_path (mappings->get_current_crate (),
- item.get_node_id (), cpath);
+ mappings->insert_canonical_path (item.get_node_id (), cpath);
}
void visit (AST::EnumItemTuple &item) override
@@ -176,8 +172,7 @@ public:
rust_error_at (r, "redefined multiple times");
});
- mappings->insert_canonical_path (mappings->get_current_crate (),
- item.get_node_id (), cpath);
+ mappings->insert_canonical_path (item.get_node_id (), cpath);
}
void visit (AST::EnumItemStruct &item) override
@@ -195,8 +190,7 @@ public:
rust_error_at (r, "redefined multiple times");
});
- mappings->insert_canonical_path (mappings->get_current_crate (),
- item.get_node_id (), cpath);
+ mappings->insert_canonical_path (item.get_node_id (), cpath);
}
void visit (AST::EnumItemDiscriminant &item) override
@@ -214,8 +208,7 @@ public:
rust_error_at (r, "redefined multiple times");
});
- mappings->insert_canonical_path (mappings->get_current_crate (),
- item.get_node_id (), cpath);
+ mappings->insert_canonical_path (item.get_node_id (), cpath);
}
void visit (AST::StructStruct &struct_decl) override
@@ -235,8 +228,7 @@ public:
NodeId current_module = resolver->peek_current_module_scope ();
mappings->insert_module_child_item (current_module, decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- struct_decl.get_node_id (), cpath);
+ mappings->insert_canonical_path (struct_decl.get_node_id (), cpath);
}
void visit (AST::Union &union_decl) override
@@ -256,8 +248,7 @@ public:
NodeId current_module = resolver->peek_current_module_scope ();
mappings->insert_module_child_item (current_module, decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- union_decl.get_node_id (), cpath);
+ mappings->insert_canonical_path (union_decl.get_node_id (), cpath);
}
void visit (AST::StaticItem &var) override
@@ -277,8 +268,7 @@ public:
NodeId current_module = resolver->peek_current_module_scope ();
mappings->insert_module_child_item (current_module, decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- var.get_node_id (), cpath);
+ mappings->insert_canonical_path (var.get_node_id (), cpath);
}
void visit (AST::ConstantItem &constant) override
@@ -298,8 +288,7 @@ public:
NodeId current_module = resolver->peek_current_module_scope ();
mappings->insert_module_child_item (current_module, decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- constant.get_node_id (), cpath);
+ mappings->insert_canonical_path (constant.get_node_id (), cpath);
}
void visit (AST::Function &function) override
@@ -319,8 +308,7 @@ public:
NodeId current_module = resolver->peek_current_module_scope ();
mappings->insert_module_child_item (current_module, decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- function.get_node_id (), cpath);
+ mappings->insert_canonical_path (function.get_node_id (), cpath);
}
void visit (AST::InherentImpl &impl_block) override
@@ -385,8 +373,7 @@ public:
NodeId current_module = resolver->peek_current_module_scope ();
mappings->insert_module_child_item (current_module, decl);
- mappings->insert_canonical_path (mappings->get_current_crate (),
- trait.get_node_id (), cpath);
+ mappings->insert_canonical_path (trait.get_node_id (), cpath);
}
void visit (AST::ExternBlock &extern_block) override
@@ -397,6 +384,56 @@ public:
}
}
+ void visit (AST::ExternCrate &extern_crate) override
+ {
+ if (extern_crate.is_marked_for_strip ())
+ return;
+
+ NodeId resolved_crate = UNKNOWN_NODEID;
+ if (extern_crate.references_self ())
+ {
+ // FIXME
+ // then this resolves to current crate_node_id
+ // need to expose on the session object a reference to the current
+ // AST::Crate& to get node_id
+ gcc_unreachable ();
+ return;
+ }
+ else
+ {
+ rust_debug_loc (extern_crate.get_locus (), "load extern crate: [%s]",
+ extern_crate.as_string ().c_str ());
+
+ Session &session = Session::get_instance ();
+ resolved_crate
+ = session.load_extern_crate (extern_crate.get_referenced_crate ());
+ }
+
+ if (resolved_crate == UNKNOWN_NODEID)
+ {
+ rust_error_at (extern_crate.get_locus (), "failed to resolve crate");
+ return;
+ }
+
+ // mark the node as resolved
+ resolver->insert_resolved_name (extern_crate.get_node_id (),
+ resolved_crate);
+
+ // does it has an as clause
+ if (extern_crate.has_as_clause ())
+ {
+ auto decl = CanonicalPath::new_seg (extern_crate.get_node_id (),
+ extern_crate.get_as_clause ());
+ resolver->get_type_scope ().insert (
+ decl, extern_crate.get_node_id (), extern_crate.get_locus (), false,
+ [&] (const CanonicalPath &, NodeId, Location locus) -> void {
+ RichLocation r (extern_crate.get_locus ());
+ r.add_range (locus);
+ rust_error_at (r, "redefined multiple times");
+ });
+ }
+ }
+
private:
ResolveTopLevel (const CanonicalPath &prefix,
const CanonicalPath &canonical_prefix)
diff --git a/gcc/rust/resolve/rust-ast-resolve-type.cc b/gcc/rust/resolve/rust-ast-resolve-type.cc
index e875688..8e85889 100644
--- a/gcc/rust/resolve/rust-ast-resolve-type.cc
+++ b/gcc/rust/resolve/rust-ast-resolve-type.cc
@@ -371,8 +371,7 @@ ResolveTypeToCanonicalPath::visit (AST::TypePath &path)
return;
const CanonicalPath *type_path = nullptr;
- if (mappings->lookup_canonical_path (mappings->get_current_crate (),
- resolved_node, &type_path))
+ if (mappings->lookup_canonical_path (resolved_node, &type_path))
{
auto &final_seg = path.get_segments ().back ();
switch (final_seg->get_type ())
diff --git a/gcc/rust/resolve/rust-ast-resolve-type.h b/gcc/rust/resolve/rust-ast-resolve-type.h
index f933d1e..1679831 100644
--- a/gcc/rust/resolve/rust-ast-resolve-type.h
+++ b/gcc/rust/resolve/rust-ast-resolve-type.h
@@ -184,8 +184,7 @@ public:
rust_error_at (locus, "was defined here");
});
- mappings->insert_canonical_path (mappings->get_current_crate (),
- param.get_node_id (), seg);
+ mappings->insert_canonical_path (param.get_node_id (), seg);
}
private:
diff --git a/gcc/rust/resolve/rust-name-resolver.cc b/gcc/rust/resolve/rust-name-resolver.cc
index a788914..fb70874 100644
--- a/gcc/rust/resolve/rust-name-resolver.cc
+++ b/gcc/rust/resolve/rust-name-resolver.cc
@@ -34,11 +34,10 @@
_R.push_back (builtin_type); \
tyctx->insert_builtin (_TY->get_ref (), builtin_type->get_node_id (), \
_TY); \
- mappings->insert_node_to_hir (mappings->get_current_crate (), \
- builtin_type->get_node_id (), \
+ mappings->insert_node_to_hir (builtin_type->get_node_id (), \
_TY->get_ref ()); \
mappings->insert_canonical_path ( \
- mappings->get_current_crate (), builtin_type->get_node_id (), \
+ builtin_type->get_node_id (), \
CanonicalPath::new_seg (builtin_type->get_node_id (), _X)); \
} \
while (0)
@@ -129,6 +128,24 @@ Rib::decl_was_declared_here (NodeId def) const
return false;
}
+void
+Rib::debug () const
+{
+ fprintf (stderr, "%s\n", debug_str ().c_str ());
+}
+
+std::string
+Rib::debug_str () const
+{
+ std::string buffer;
+ for (const auto &it : path_mappings)
+ {
+ buffer += it.first.get () + "=" + std::to_string (it.second);
+ buffer += ",";
+ }
+ return "{" + buffer + "}";
+}
+
Scope::Scope (CrateNum crate_num) : crate_num (crate_num) {}
void
diff --git a/gcc/rust/resolve/rust-name-resolver.h b/gcc/rust/resolve/rust-name-resolver.h
index e9f7c62..014628a 100644
--- a/gcc/rust/resolve/rust-name-resolver.h
+++ b/gcc/rust/resolve/rust-name-resolver.h
@@ -45,6 +45,8 @@ public:
void append_reference_for_def (NodeId def, NodeId ref);
bool have_references_for_node (NodeId def) const;
bool decl_was_declared_here (NodeId def) const;
+ void debug () const;
+ std::string debug_str () const;
CrateNum get_crate_num () const { return crate_num; }
NodeId get_node_id () const { return node_id; }