diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2024-05-04 02:42:10 +0200 |
---|---|---|
committer | P-E-P <32375388+P-E-P@users.noreply.github.com> | 2024-05-17 15:28:30 +0000 |
commit | c3493829b74bade43a6a9bc83520066c9a3c9e09 (patch) | |
tree | a2a878056c1f0c41c584345910b7fceeef3ebafb | |
parent | 291068b42e9ef3a23af89f33b0a72f5b8651b38d (diff) | |
download | gcc-c3493829b74bade43a6a9bc83520066c9a3c9e09.zip gcc-c3493829b74bade43a6a9bc83520066c9a3c9e09.tar.gz gcc-c3493829b74bade43a6a9bc83520066c9a3c9e09.tar.bz2 |
Change lookup_macro_def return type
Wrap the function's return type within an optional.
gcc/rust/ChangeLog:
* resolve/rust-early-name-resolver-2.0.cc (Early::insert_once): Change
call site to accomodate the new return type.
(Early::visit): Likewise.
* resolve/rust-early-name-resolver.cc (EarlyNameResolver::visit):
Likewise.
* resolve/rust-toplevel-name-resolver-2.0.cc (TopLevel::visit):
Likewise.
* util/rust-hir-map.cc (Mappings::lookup_macro_def): Change the
function's return type.
* util/rust-hir-map.h: Update the function's prototype.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
-rw-r--r-- | gcc/rust/resolve/rust-early-name-resolver-2.0.cc | 25 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-early-name-resolver.cc | 17 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc | 3 | ||||
-rw-r--r-- | gcc/rust/util/rust-hir-map.cc | 9 | ||||
-rw-r--r-- | gcc/rust/util/rust-hir-map.h | 2 |
5 files changed, 22 insertions, 34 deletions
diff --git a/gcc/rust/resolve/rust-early-name-resolver-2.0.cc b/gcc/rust/resolve/rust-early-name-resolver-2.0.cc index 8af4b02..473cdc4 100644 --- a/gcc/rust/resolve/rust-early-name-resolver-2.0.cc +++ b/gcc/rust/resolve/rust-early-name-resolver-2.0.cc @@ -30,26 +30,20 @@ void Early::insert_once (AST::MacroInvocation &invocation, NodeId resolved) { // TODO: Should we use `ctx.mark_resolved()`? - AST::MacroRulesDefinition *definition; - auto ok = ctx.mappings.lookup_macro_def (resolved, &definition); - - rust_assert (ok); + auto definition = ctx.mappings.lookup_macro_def (resolved); AST::MacroRulesDefinition *existing; auto exists = ctx.mappings.lookup_macro_invocation (invocation, &existing); if (!exists) - ctx.mappings.insert_macro_invocation (invocation, definition); + ctx.mappings.insert_macro_invocation (invocation, definition.value ()); } void Early::insert_once (AST::MacroRulesDefinition &def) { // TODO: Should we use `ctx.mark_resolved()`? - AST::MacroRulesDefinition *definition; - auto exists = ctx.mappings.lookup_macro_def (def.get_node_id (), &definition); - - if (!exists) + if (!ctx.mappings.lookup_macro_def (def.get_node_id ())) ctx.mappings.insert_macro_def (&def); } @@ -176,18 +170,17 @@ Early::visit (AST::MacroInvocation &invoc) // now do we need to keep mappings or something? or insert "uses" into our // ForeverStack? can we do that? are mappings simpler? auto &mappings = Analysis::Mappings::get (); - AST::MacroRulesDefinition *rules_def = nullptr; - if (!mappings.lookup_macro_def (definition->get_node_id (), &rules_def)) - { - // Macro definition not found, maybe it is not expanded yet. - return; - } + auto rules_def = mappings.lookup_macro_def (definition->get_node_id ()); + + // Macro definition not found, maybe it is not expanded yet. + if (!rules_def) + return; AST::MacroRulesDefinition *tmp_def = nullptr; if (mappings.lookup_macro_invocation (invoc, &tmp_def)) return; - mappings.insert_macro_invocation (invoc, rules_def); + mappings.insert_macro_invocation (invoc, rules_def.value ()); } void diff --git a/gcc/rust/resolve/rust-early-name-resolver.cc b/gcc/rust/resolve/rust-early-name-resolver.cc index 83b6576..4021f5d 100644 --- a/gcc/rust/resolve/rust-early-name-resolver.cc +++ b/gcc/rust/resolve/rust-early-name-resolver.cc @@ -425,8 +425,7 @@ EarlyNameResolver::visit (AST::MacroRulesDefinition &rules_def) * we could be inserting the same macro def over and over again until we * implement some optimizations */ // FIXME: ARTHUR: Remove that lookup and add proper optimizations instead - AST::MacroRulesDefinition *tmp = nullptr; - if (mappings.lookup_macro_def (rules_def.get_node_id (), &tmp)) + if (mappings.lookup_macro_def (rules_def.get_node_id ())) return; mappings.insert_macro_def (&rules_def); @@ -481,11 +480,9 @@ EarlyNameResolver::visit (AST::MacroInvocation &invoc) } // lookup the rules - AST::MacroRulesDefinition *rules_def = nullptr; - bool ok = mappings.lookup_macro_def (resolved_node, &rules_def); - rust_assert (ok); + auto rules_def = mappings.lookup_macro_def (resolved_node); - auto &outer_attrs = rules_def->get_outer_attrs (); + auto &outer_attrs = rules_def.value ()->get_outer_attrs (); bool is_builtin = std::any_of (outer_attrs.begin (), outer_attrs.end (), [] (AST::Attribute attr) { @@ -495,12 +492,12 @@ EarlyNameResolver::visit (AST::MacroInvocation &invoc) if (is_builtin) { - auto builtin_kind - = builtin_macro_from_string (rules_def->get_rule_name ().as_string ()); + auto builtin_kind = builtin_macro_from_string ( + rules_def.value ()->get_rule_name ().as_string ()); invoc.map_to_builtin (builtin_kind.value ()); } - auto attributes = rules_def->get_outer_attrs (); + auto attributes = rules_def.value ()->get_outer_attrs (); /* Since the EarlyNameResolver runs multiple time (fixed point algorithm) * we could be inserting the same macro def over and over again until we @@ -510,7 +507,7 @@ EarlyNameResolver::visit (AST::MacroInvocation &invoc) if (mappings.lookup_macro_invocation (invoc, &tmp_def)) return; - mappings.insert_macro_invocation (invoc, rules_def); + mappings.insert_macro_invocation (invoc, *rules_def); } // FIXME: ARTHUR: Do we need to resolve these as well here? diff --git a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc index 7bcebba..b991145 100644 --- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc +++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc @@ -307,8 +307,7 @@ TopLevel::visit (AST::MacroRulesDefinition ¯o) insert_or_error_out (macro.get_rule_name (), macro, Namespace::Macros); auto &mappings = Analysis::Mappings::get (); - AST::MacroRulesDefinition *tmp = nullptr; - if (mappings.lookup_macro_def (macro.get_node_id (), &tmp)) + if (mappings.lookup_macro_def (macro.get_node_id ())) return; mappings.insert_macro_def (¯o); diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc index c0d9a65..5d46fc4 100644 --- a/gcc/rust/util/rust-hir-map.cc +++ b/gcc/rust/util/rust-hir-map.cc @@ -877,15 +877,14 @@ Mappings::insert_macro_def (AST::MacroRulesDefinition *macro) macroMappings[macro->get_node_id ()] = macro; } -bool -Mappings::lookup_macro_def (NodeId id, AST::MacroRulesDefinition **def) +tl::optional<AST::MacroRulesDefinition *> +Mappings::lookup_macro_def (NodeId id) { auto it = macroMappings.find (id); if (it == macroMappings.end ()) - return false; + return tl::nullopt; - *def = it->second; - return true; + return it->second; } void diff --git a/gcc/rust/util/rust-hir-map.h b/gcc/rust/util/rust-hir-map.h index a912ca8..aff787d 100644 --- a/gcc/rust/util/rust-hir-map.h +++ b/gcc/rust/util/rust-hir-map.h @@ -278,7 +278,7 @@ public: void insert_macro_def (AST::MacroRulesDefinition *macro); - bool lookup_macro_def (NodeId id, AST::MacroRulesDefinition **def); + tl::optional<AST::MacroRulesDefinition *> lookup_macro_def (NodeId id); void insert_macro_invocation (AST::MacroInvocation &invoc, AST::MacroRulesDefinition *def); |