https://gcc.gnu.org/g:435f227c2501d1d5a72905d30a5a90848be11481

commit 435f227c2501d1d5a72905d30a5a90848be11481
Author: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>
Date:   Sat May 4 03:21:27 2024 +0200

    Change lookup_macro_invocation's return type
    
    Wrap the function's return type within an optional and remove the out
    reference argument.
    
    gcc/rust/ChangeLog:
    
            * expand/rust-macro-expand.cc (MacroExpander::expand_invoc): Adapt
            the function call to match its new prototype.
            * resolve/rust-early-name-resolver-2.0.cc (Early::insert_once):
            Likewise.
            (Early::visit): Likewise.
            * resolve/rust-early-name-resolver.cc (EarlyNameResolver::visit):
            Likewise.
            * util/rust-hir-map.cc (Mappings::lookup_macro_invocation): Change 
the
            function's return type.
            * util/rust-hir-map.h: Update the function's prototype.
    
    Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>

Diff:
---
 gcc/rust/expand/rust-macro-expand.cc             | 18 +++++++++---------
 gcc/rust/resolve/rust-early-name-resolver-2.0.cc |  8 ++------
 gcc/rust/resolve/rust-early-name-resolver.cc     |  3 +--
 gcc/rust/util/rust-hir-map.cc                    | 10 ++++------
 gcc/rust/util/rust-hir-map.h                     |  4 ++--
 5 files changed, 18 insertions(+), 25 deletions(-)

diff --git a/gcc/rust/expand/rust-macro-expand.cc 
b/gcc/rust/expand/rust-macro-expand.cc
index d95665d8d4a0..1efc81a8b3f3 100644
--- a/gcc/rust/expand/rust-macro-expand.cc
+++ b/gcc/rust/expand/rust-macro-expand.cc
@@ -272,25 +272,25 @@ MacroExpander::expand_invoc (AST::MacroInvocation &invoc, 
bool has_semicolon)
   invoc_data.set_expander (this);
 
   // lookup the rules
-  AST::MacroRulesDefinition *rules_def = nullptr;
-  bool ok = mappings.lookup_macro_invocation (invoc, &rules_def);
+  auto rules_def = mappings.lookup_macro_invocation (invoc);
 
   // If there's no rule associated with the invocation, we can simply return
   // early. The early name resolver will have already emitted an error.
-  if (!ok)
+  if (!rules_def)
     return;
 
+  auto rdef = rules_def.value ();
+
   // We store the last expanded invocation and macro definition for error
   // reporting in case the recursion limit is reached
   last_invoc = *invoc.clone_macro_invocation_impl ();
-  last_def = *rules_def;
+  last_def = *rdef;
 
-  if (rules_def->is_builtin ())
-    fragment
-      = rules_def->get_builtin_transcriber () (invoc.get_locus (), invoc_data)
-         .value_or (AST::Fragment::create_empty ());
+  if (rdef->is_builtin ())
+    fragment = rdef->get_builtin_transcriber () (invoc.get_locus (), 
invoc_data)
+                .value_or (AST::Fragment::create_empty ());
   else
-    fragment = expand_decl_macro (invoc.get_locus (), invoc_data, *rules_def,
+    fragment = expand_decl_macro (invoc.get_locus (), invoc_data, *rdef,
                                  has_semicolon);
 
   set_expanded_fragment (std::move (fragment));
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 473cdc4e317e..bcbe3bd75e33 100644
--- a/gcc/rust/resolve/rust-early-name-resolver-2.0.cc
+++ b/gcc/rust/resolve/rust-early-name-resolver-2.0.cc
@@ -32,10 +32,7 @@ Early::insert_once (AST::MacroInvocation &invocation, NodeId 
resolved)
   // TODO: Should we use `ctx.mark_resolved()`?
   auto definition = ctx.mappings.lookup_macro_def (resolved);
 
-  AST::MacroRulesDefinition *existing;
-  auto exists = ctx.mappings.lookup_macro_invocation (invocation, &existing);
-
-  if (!exists)
+  if (!ctx.mappings.lookup_macro_invocation (invocation))
     ctx.mappings.insert_macro_invocation (invocation, definition.value ());
 }
 
@@ -176,8 +173,7 @@ Early::visit (AST::MacroInvocation &invoc)
   if (!rules_def)
     return;
 
-  AST::MacroRulesDefinition *tmp_def = nullptr;
-  if (mappings.lookup_macro_invocation (invoc, &tmp_def))
+  if (mappings.lookup_macro_invocation (invoc))
     return;
 
   mappings.insert_macro_invocation (invoc, rules_def.value ());
diff --git a/gcc/rust/resolve/rust-early-name-resolver.cc 
b/gcc/rust/resolve/rust-early-name-resolver.cc
index 4021f5d56129..14d204150408 100644
--- a/gcc/rust/resolve/rust-early-name-resolver.cc
+++ b/gcc/rust/resolve/rust-early-name-resolver.cc
@@ -503,8 +503,7 @@ EarlyNameResolver::visit (AST::MacroInvocation &invoc)
    * 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_def = nullptr;
-  if (mappings.lookup_macro_invocation (invoc, &tmp_def))
+  if (mappings.lookup_macro_invocation (invoc))
     return;
 
   mappings.insert_macro_invocation (invoc, *rules_def);
diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc
index 5d46fc49af27..f7975fa9537a 100644
--- a/gcc/rust/util/rust-hir-map.cc
+++ b/gcc/rust/util/rust-hir-map.cc
@@ -897,16 +897,14 @@ Mappings::insert_macro_invocation (AST::MacroInvocation 
&invoc,
   macroInvocations[invoc.get_macro_node_id ()] = def;
 }
 
-bool
-Mappings::lookup_macro_invocation (AST::MacroInvocation &invoc,
-                                  AST::MacroRulesDefinition **def)
+tl::optional<AST::MacroRulesDefinition *>
+Mappings::lookup_macro_invocation (AST::MacroInvocation &invoc)
 {
   auto it = macroInvocations.find (invoc.get_macro_node_id ());
   if (it == macroInvocations.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 aff787db7cbd..34500474dc53 100644
--- a/gcc/rust/util/rust-hir-map.h
+++ b/gcc/rust/util/rust-hir-map.h
@@ -282,8 +282,8 @@ public:
 
   void insert_macro_invocation (AST::MacroInvocation &invoc,
                                AST::MacroRulesDefinition *def);
-  bool lookup_macro_invocation (AST::MacroInvocation &invoc,
-                               AST::MacroRulesDefinition **def);
+  tl::optional<AST::MacroRulesDefinition *>
+  lookup_macro_invocation (AST::MacroInvocation &invoc);
 
   void insert_exported_macro (AST::MacroRulesDefinition &def);
   std::vector<NodeId> &get_exported_macros ();

Reply via email to