diff options
author | Philip Herron <philip.herron@embecosm.com> | 2021-01-18 17:57:22 +0000 |
---|---|---|
committer | Philip Herron <herron.philip@googlemail.com> | 2021-01-20 09:59:22 +0000 |
commit | 12f7bd0fc4e9ab4e98869b5265aea6bacfb31d03 (patch) | |
tree | aaff0986f81394b83e8536b68a18bcd48ecb9484 /gcc/rust/util/rust-hir-map.cc | |
parent | 6e2acd529fcfa43368f7ea8209cc5e6b88d2bd79 (diff) | |
download | gcc-12f7bd0fc4e9ab4e98869b5265aea6bacfb31d03.zip gcc-12f7bd0fc4e9ab4e98869b5265aea6bacfb31d03.tar.gz gcc-12f7bd0fc4e9ab4e98869b5265aea6bacfb31d03.tar.bz2 |
Support struct initializers using Identifiers
This resolves each identifier for its respective field. It includes fixes
for the TypeResolver to print errors instead of asserts where we loose
decent debug info.
Diffstat (limited to 'gcc/rust/util/rust-hir-map.cc')
-rw-r--r-- | gcc/rust/util/rust-hir-map.cc | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc index 0fea501..c6e177b 100644 --- a/gcc/rust/util/rust-hir-map.cc +++ b/gcc/rust/util/rust-hir-map.cc @@ -350,6 +350,30 @@ Mappings::lookup_hir_param (CrateNum crateNum, HirId id) } void +Mappings::insert_hir_struct_field (CrateNum crateNum, HirId id, + HIR::StructExprField *field) +{ + rust_assert (lookup_hir_stmt (crateNum, id) == nullptr); + + hirStructFieldMappings[crateNum][id] = field; + nodeIdToHirMappings[crateNum][field->get_mappings ().get_nodeid ()] = id; +} + +HIR::StructExprField * +Mappings::lookup_hir_struct_field (CrateNum crateNum, HirId id) +{ + auto it = hirStructFieldMappings.find (crateNum); + if (it == hirStructFieldMappings.end ()) + return nullptr; + + auto iy = it->second.find (id); + if (iy == it->second.end ()) + return nullptr; + + return iy->second; +} + +void Mappings::insert_local_defid_mapping (CrateNum crateNum, LocalDefId id, HIR::Item *item) { |