aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/util/rust-hir-map.cc
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2021-08-05 21:33:47 +0000
committerGitHub <noreply@github.com>2021-08-05 21:33:47 +0000
commit935f1d7da3ea82980bed642c6eea06d69de5fdf6 (patch)
treebb7172a61dc354681743d86f708e021b4613cc9f /gcc/rust/util/rust-hir-map.cc
parent074c070c02e61033694f2f969a33a795036ad540 (diff)
parent65ef30eb84314ae7525be4a4d7dd79d2868e3e3c (diff)
downloadgcc-935f1d7da3ea82980bed642c6eea06d69de5fdf6.zip
gcc-935f1d7da3ea82980bed642c6eea06d69de5fdf6.tar.gz
gcc-935f1d7da3ea82980bed642c6eea06d69de5fdf6.tar.bz2
Merge #609
609: Initial TypeBounds support r=philberty a=philberty This allows us to specify bounds on type parameters that influence path resolution to allow us to resolve to trait items. More error checking is required to actually enforce the trait constraint but this patch is getting rather large and does not cause regressions. Fixes #583 Co-authored-by: Philip Herron <philip.herron@embecosm.com>
Diffstat (limited to 'gcc/rust/util/rust-hir-map.cc')
-rw-r--r--gcc/rust/util/rust-hir-map.cc50
1 files changed, 50 insertions, 0 deletions
diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc
index 69fbe25..4ffbff0 100644
--- a/gcc/rust/util/rust-hir-map.cc
+++ b/gcc/rust/util/rust-hir-map.cc
@@ -383,6 +383,56 @@ Mappings::lookup_hir_expr (CrateNum crateNum, HirId id)
}
void
+Mappings::insert_hir_path_expr_seg (CrateNum crateNum, HirId id,
+ HIR::PathExprSegment *expr)
+{
+ rust_assert (lookup_hir_path_expr_seg (crateNum, id) == nullptr);
+
+ hirPathSegMappings[crateNum][id] = expr;
+ nodeIdToHirMappings[crateNum][expr->get_mappings ().get_nodeid ()] = id;
+ insert_location (crateNum, id, expr->get_locus ());
+}
+
+HIR::PathExprSegment *
+Mappings::lookup_hir_path_expr_seg (CrateNum crateNum, HirId id)
+{
+ auto it = hirPathSegMappings.find (crateNum);
+ if (it == hirPathSegMappings.end ())
+ return nullptr;
+
+ auto iy = it->second.find (id);
+ if (iy == it->second.end ())
+ return nullptr;
+
+ return iy->second;
+}
+
+void
+Mappings::insert_hir_generic_param (CrateNum crateNum, HirId id,
+ HIR::GenericParam *param)
+{
+ rust_assert (lookup_hir_generic_param (crateNum, id) == nullptr);
+
+ hirGenericParamMappings[crateNum][id] = param;
+ nodeIdToHirMappings[crateNum][param->get_mappings ().get_nodeid ()] = id;
+ insert_location (crateNum, id, param->get_locus_slow ());
+}
+
+HIR::GenericParam *
+Mappings::lookup_hir_generic_param (CrateNum crateNum, HirId id)
+{
+ auto it = hirGenericParamMappings.find (crateNum);
+ if (it == hirGenericParamMappings.end ())
+ return nullptr;
+
+ auto iy = it->second.find (id);
+ if (iy == it->second.end ())
+ return nullptr;
+
+ return iy->second;
+}
+
+void
Mappings::insert_hir_type (CrateNum crateNum, HirId id, HIR::Type *type)
{
rust_assert (lookup_hir_type (crateNum, id) == nullptr);