aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/util
diff options
context:
space:
mode:
authorSourabh Jaiswal <sourabhrj31@gmail.com>2024-03-01 19:46:23 +0800
committerArthur Cohen <arthur.cohen@embecosm.com>2024-08-01 13:12:14 +0200
commit8c642618265162c28a9de83ba4df12318023fda7 (patch)
tree0f9d0fc131c37336cdc82c215ce7635c8383318a /gcc/rust/util
parentebbf7bedbabc2a52fd0cd2b97611eb5d9bf02086 (diff)
downloadgcc-8c642618265162c28a9de83ba4df12318023fda7.zip
gcc-8c642618265162c28a9de83ba4df12318023fda7.tar.gz
gcc-8c642618265162c28a9de83ba4df12318023fda7.tar.bz2
gccrs: Clean BiMap to use tl::optional for lookups
gcc/rust/Changelog: * expand/rust-expand-visitor.cc (ExpandVisitor::expand_inner_items): Adjust to use has_value () (ExpandVisitor::expand_inner_stmts): Likewise * expand/rust-macro-builtins.cc (builtin_macro_from_string): Likewise (make_macro_path_str): Likewise * util/rust-hir-map.cc (Mappings::insert_macro_def): Likewise * util/rust-lang-item.cc (LangItem::Parse): Adjust to return tl::optional (LangItem::toString) Likewise * util/rust-token-converter.cc (handle_suffix): Adjust to use value.or () (from_literal) Likewise * util/bi-map.h (BiMap::lookup): Adjust to use tl::optional for lookups Signed-off-by: Sourabh Jaiswal <sourabhrj31@gmail.com>
Diffstat (limited to 'gcc/rust/util')
-rw-r--r--gcc/rust/util/bi-map.h22
-rw-r--r--gcc/rust/util/rust-hir-map.cc2
-rw-r--r--gcc/rust/util/rust-lang-item.cc6
-rw-r--r--gcc/rust/util/rust-token-converter.cc5
4 files changed, 20 insertions, 15 deletions
diff --git a/gcc/rust/util/bi-map.h b/gcc/rust/util/bi-map.h
index ff26c83..bc4f580 100644
--- a/gcc/rust/util/bi-map.h
+++ b/gcc/rust/util/bi-map.h
@@ -24,9 +24,6 @@
// very simple bi-directional hashmap
template <typename K, typename V> class BiMap
{
- using v_iter = typename std::unordered_map<K, V>::const_iterator;
- using k_iter = typename std::unordered_map<V, K>::const_iterator;
-
public:
BiMap (std::unordered_map<K, V> &&original) : map (std::move (original))
{
@@ -34,11 +31,22 @@ public:
rmap.insert ({kv.second, kv.first});
}
- const v_iter lookup (const K &key) const { return map.find (key); }
- const k_iter lookup (const V &key) const { return rmap.find (key); }
+ const tl::optional<const V &> lookup (const K &key) const
+ {
+ auto itr = map.find (key);
+ if (itr == map.end ())
+ return tl::nullopt;
+
+ return itr->second;
+ }
+ const tl::optional<const K &> lookup (const V &key) const
+ {
+ auto itr = rmap.find (key);
+ if (itr == rmap.end ())
+ return tl::nullopt;
- bool is_iter_ok (const v_iter &iter) const { return iter != map.end (); }
- bool is_iter_ok (const k_iter &iter) const { return iter != rmap.end (); }
+ return itr->second;
+ }
private:
std::unordered_map<K, V> map;
diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc
index 1f7cb4d..c62c111 100644
--- a/gcc/rust/util/rust-hir-map.cc
+++ b/gcc/rust/util/rust-hir-map.cc
@@ -880,7 +880,7 @@ Mappings::insert_macro_def (AST::MacroRulesDefinition *macro)
{
auto builtin
= MacroBuiltin::builtins.lookup (macro->get_rule_name ().as_string ());
- if (!MacroBuiltin::builtins.is_iter_ok (builtin))
+ if (!builtin.has_value ())
{
rust_error_at (macro->get_locus (),
"cannot find a built-in macro with name %qs",
diff --git a/gcc/rust/util/rust-lang-item.cc b/gcc/rust/util/rust-lang-item.cc
index 38df90f..0d8a98077 100644
--- a/gcc/rust/util/rust-lang-item.cc
+++ b/gcc/rust/util/rust-lang-item.cc
@@ -97,17 +97,15 @@ tl::optional<LangItem::Kind>
LangItem::Parse (const std::string &item)
{
auto lang_item = LangItem::lang_items.lookup (item);
- if (!LangItem::lang_items.is_iter_ok (lang_item))
- return tl::nullopt;
- return lang_item->second;
+ return lang_item;
}
std::string
LangItem::ToString (LangItem::Kind type)
{
auto str = LangItem::lang_items.lookup (type);
- return str->second;
+ return str.value ();
}
LangItem::Kind
diff --git a/gcc/rust/util/rust-token-converter.cc b/gcc/rust/util/rust-token-converter.cc
index 41f8105..220e891 100644
--- a/gcc/rust/util/rust-token-converter.cc
+++ b/gcc/rust/util/rust-token-converter.cc
@@ -67,7 +67,7 @@ handle_suffix (const const_TokenPtr &token, ProcMacro::LitKind kind)
{
auto str = token->as_string ();
auto lookup = suffixes.lookup (token->get_type_hint ());
- auto suffix = suffixes.is_iter_ok (lookup) ? lookup->second : "";
+ auto suffix = lookup.value_or ("");
return ProcMacro::Literal::make_literal (kind, convert (token->get_locus ()),
str, suffix);
}
@@ -296,8 +296,7 @@ from_literal (const ProcMacro::Literal &literal,
{
auto lookup = suffixes.lookup (literal.suffix.to_string ());
auto loc = convert (literal.span);
- auto suffix
- = suffixes.is_iter_ok (lookup) ? lookup->second : CORETYPE_UNKNOWN;
+ auto suffix = lookup.value_or (CORETYPE_UNKNOWN);
// FIXME: Add spans instead of empty locations
switch (literal.kind.tag)
{