diff options
author | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-02-20 14:53:32 +0100 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-08-01 13:11:30 +0200 |
commit | cac2e9715a7d35d869962a724cd4e0834a8d4438 (patch) | |
tree | d714d431cdd15ec0ac47956aea0061b17484d7bf /gcc | |
parent | bf6d216f818daa9bb63f5770165beeca7666a3c6 (diff) | |
download | gcc-cac2e9715a7d35d869962a724cd4e0834a8d4438.zip gcc-cac2e9715a7d35d869962a724cd4e0834a8d4438.tar.gz gcc-cac2e9715a7d35d869962a724cd4e0834a8d4438.tar.bz2 |
gccrs: extern-types: Declare external types in name resolver.
gcc/rust/ChangeLog:
* resolve/rust-ast-resolve-implitem.h: Declare external types as new
types.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve-implitem.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve-implitem.h b/gcc/rust/resolve/rust-ast-resolve-implitem.h index fabc258..4f4d2893 100644 --- a/gcc/rust/resolve/rust-ast-resolve-implitem.h +++ b/gcc/rust/resolve/rust-ast-resolve-implitem.h @@ -228,6 +228,25 @@ public: mappings->insert_module_child_item (current_module, decl); } + void visit (AST::ExternalTypeItem &type) override + { + auto decl = CanonicalPath::new_seg (type.get_node_id (), + type.get_identifier ().as_string ()); + auto path = prefix.append (decl); + + resolver->get_type_scope ().insert ( + path, type.get_node_id (), type.get_locus (), false, Rib::ItemType::Type, + [&] (const CanonicalPath &, NodeId, location_t locus) -> void { + rich_location r (line_table, type.get_locus ()); + r.add_range (locus); + + rust_error_at (r, "redefined multiple times"); + }); + + NodeId current_module = resolver->peek_current_module_scope (); + mappings->insert_module_child_item (current_module, decl); + } + private: ResolveToplevelExternItem (const CanonicalPath &prefix) : ResolverBase (), prefix (prefix) |