diff options
Diffstat (limited to 'gcc/rust/resolve/rust-ast-resolve-implitem.h')
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve-implitem.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve-implitem.h b/gcc/rust/resolve/rust-ast-resolve-implitem.h index 365bdd61..d9c9bcb 100644 --- a/gcc/rust/resolve/rust-ast-resolve-implitem.h +++ b/gcc/rust/resolve/rust-ast-resolve-implitem.h @@ -110,6 +110,26 @@ public: item->accept_vis (resolver); }; + void visit (AST::Function &function) override + { + auto decl + = CanonicalPath::new_seg (function.get_node_id (), + function.get_function_name ().as_string ()); + auto path = prefix.append (decl); + auto cpath = canonical_prefix.append (decl); + + resolver->get_name_scope ().insert ( + path, function.get_node_id (), function.get_locus (), false, + Rib::ItemType::Function, + [&] (const CanonicalPath &, NodeId, location_t locus) -> void { + rich_location r (line_table, function.get_locus ()); + r.add_range (locus); + rust_error_at (r, "redefined multiple times"); + }); + + mappings->insert_canonical_path (function.get_node_id (), cpath); + } + void visit (AST::TraitItemFunc &function) override { auto decl = CanonicalPath::new_seg ( |