gccrs: Use optional for proc macro invocation lookup
The old interface for those mappings was clunky at best. Now we can use the optional structure to return a reference to the instance. gcc/rust/ChangeLog: * expand/rust-macro-expand.h (struct MacroExpander): Update lookup function prototypes. * util/rust-hir-map.cc (Mappings::lookup_derive_proc_macro_invocation): Update lookup function according to new signature. (Mappings::lookup_bang_proc_macro_invocation): Likewise. (Mappings::lookup_attribute_proc_macro_invocation): Likewise. * util/rust-hir-map.h: Update function prototypes. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
This commit is contained in:
parent
346ccc0f0a
commit
8a343bd46f
3 changed files with 33 additions and 35 deletions
|
@ -410,8 +410,9 @@ struct MacroExpander
|
|||
template <typename T>
|
||||
AST::Fragment expand_derive_proc_macro (T &item, AST::SimplePath &path)
|
||||
{
|
||||
CustomDeriveProcMacro macro;
|
||||
if (!mappings->lookup_derive_proc_macro_invocation (path, macro))
|
||||
tl::optional<CustomDeriveProcMacro &> macro
|
||||
= mappings->lookup_derive_proc_macro_invocation (path);
|
||||
if (!macro.has_value ())
|
||||
{
|
||||
rust_error_at (path.get_locus (), "Macro not found");
|
||||
return AST::Fragment::create_error ();
|
||||
|
@ -424,15 +425,17 @@ struct MacroExpander
|
|||
auto c = collector.collect_tokens ();
|
||||
std::vector<const_TokenPtr> vec (c.cbegin (), c.cend ());
|
||||
|
||||
return parse_proc_macro_output (macro.get_handle () (convert (vec)));
|
||||
return parse_proc_macro_output (
|
||||
macro.value ().get_handle () (convert (vec)));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
AST::Fragment expand_bang_proc_macro (T &item,
|
||||
AST::MacroInvocation &invocation)
|
||||
{
|
||||
BangProcMacro macro;
|
||||
if (!mappings->lookup_bang_proc_macro_invocation (invocation, macro))
|
||||
tl::optional<BangProcMacro &> macro
|
||||
= mappings->lookup_bang_proc_macro_invocation (invocation);
|
||||
if (!macro.has_value ())
|
||||
{
|
||||
rust_error_at (invocation.get_locus (), "Macro not found");
|
||||
return AST::Fragment::create_error ();
|
||||
|
@ -445,14 +448,16 @@ struct MacroExpander
|
|||
auto c = collector.collect_tokens ();
|
||||
std::vector<const_TokenPtr> vec (c.cbegin (), c.cend ());
|
||||
|
||||
return parse_proc_macro_output (macro.get_handle () (convert (vec)));
|
||||
return parse_proc_macro_output (
|
||||
macro.value ().get_handle () (convert (vec)));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
AST::Fragment expand_attribute_proc_macro (T &item, AST::SimplePath &path)
|
||||
{
|
||||
AttributeProcMacro macro;
|
||||
if (!mappings->lookup_attribute_proc_macro_invocation (path, macro))
|
||||
tl::optional<AttributeProcMacro &> macro
|
||||
= mappings->lookup_attribute_proc_macro_invocation (path);
|
||||
if (!macro.has_value ())
|
||||
{
|
||||
rust_error_at (path.get_locus (), "Macro not found");
|
||||
return AST::Fragment::create_error ();
|
||||
|
@ -467,8 +472,8 @@ struct MacroExpander
|
|||
|
||||
// FIXME: Handle attributes
|
||||
return parse_proc_macro_output (
|
||||
macro.get_handle () (ProcMacro::TokenStream::make_tokenstream (),
|
||||
convert (vec)));
|
||||
macro.value ().get_handle () (ProcMacro::TokenStream::make_tokenstream (),
|
||||
convert (vec)));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1072,16 +1072,14 @@ Mappings::insert_derive_proc_macro_invocation (AST::SimplePath &invoc,
|
|||
procmacroDeriveInvocations[invoc.get_node_id ()] = def;
|
||||
}
|
||||
|
||||
bool
|
||||
Mappings::lookup_derive_proc_macro_invocation (AST::SimplePath &invoc,
|
||||
CustomDeriveProcMacro &def)
|
||||
tl::optional<CustomDeriveProcMacro &>
|
||||
Mappings::lookup_derive_proc_macro_invocation (AST::SimplePath &invoc)
|
||||
{
|
||||
auto it = procmacroDeriveInvocations.find (invoc.get_node_id ());
|
||||
if (it == procmacroDeriveInvocations.end ())
|
||||
return false;
|
||||
return tl::nullopt;
|
||||
|
||||
def = it->second;
|
||||
return true;
|
||||
return it->second;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1094,16 +1092,14 @@ Mappings::insert_bang_proc_macro_invocation (AST::MacroInvocation &invoc,
|
|||
procmacroBangInvocations[invoc.get_macro_node_id ()] = def;
|
||||
}
|
||||
|
||||
bool
|
||||
Mappings::lookup_bang_proc_macro_invocation (AST::MacroInvocation &invoc,
|
||||
BangProcMacro &def)
|
||||
tl::optional<BangProcMacro &>
|
||||
Mappings::lookup_bang_proc_macro_invocation (AST::MacroInvocation &invoc)
|
||||
{
|
||||
auto it = procmacroBangInvocations.find (invoc.get_macro_node_id ());
|
||||
if (it == procmacroBangInvocations.end ())
|
||||
return false;
|
||||
return tl::nullopt;
|
||||
|
||||
def = it->second;
|
||||
return true;
|
||||
return it->second;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1116,16 +1112,14 @@ Mappings::insert_attribute_proc_macro_invocation (AST::SimplePath &invoc,
|
|||
procmacroAttributeInvocations[invoc.get_node_id ()] = def;
|
||||
}
|
||||
|
||||
bool
|
||||
Mappings::lookup_attribute_proc_macro_invocation (AST::SimplePath &invoc,
|
||||
AttributeProcMacro &def)
|
||||
tl::optional<AttributeProcMacro &>
|
||||
Mappings::lookup_attribute_proc_macro_invocation (AST::SimplePath &invoc)
|
||||
{
|
||||
auto it = procmacroAttributeInvocations.find (invoc.get_node_id ());
|
||||
if (it == procmacroAttributeInvocations.end ())
|
||||
return false;
|
||||
return tl::nullopt;
|
||||
|
||||
def = it->second;
|
||||
return true;
|
||||
return it->second;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -310,19 +310,18 @@ public:
|
|||
bool lookup_bang_proc_macro_def (NodeId id, BangProcMacro ¯o);
|
||||
bool lookup_attribute_proc_macro_def (NodeId id, AttributeProcMacro ¯o);
|
||||
|
||||
tl::optional<CustomDeriveProcMacro &>
|
||||
lookup_derive_proc_macro_invocation (AST::SimplePath &invoc);
|
||||
tl::optional<BangProcMacro &>
|
||||
lookup_bang_proc_macro_invocation (AST::MacroInvocation &invoc_id);
|
||||
tl::optional<AttributeProcMacro &>
|
||||
lookup_attribute_proc_macro_invocation (AST::SimplePath &invoc);
|
||||
void insert_derive_proc_macro_invocation (AST::SimplePath &invoc,
|
||||
CustomDeriveProcMacro def);
|
||||
|
||||
bool lookup_derive_proc_macro_invocation (AST::SimplePath &invoc,
|
||||
CustomDeriveProcMacro &def);
|
||||
void insert_bang_proc_macro_invocation (AST::MacroInvocation &invoc,
|
||||
BangProcMacro def);
|
||||
bool lookup_bang_proc_macro_invocation (AST::MacroInvocation &invoc_id,
|
||||
BangProcMacro &def);
|
||||
void insert_attribute_proc_macro_invocation (AST::SimplePath &invoc,
|
||||
AttributeProcMacro def);
|
||||
bool lookup_attribute_proc_macro_invocation (AST::SimplePath &invoc,
|
||||
AttributeProcMacro &def);
|
||||
|
||||
void insert_visibility (NodeId id, Privacy::ModuleVisibility visibility);
|
||||
bool lookup_visibility (NodeId id, Privacy::ModuleVisibility &def);
|
||||
|
|
Loading…
Add table
Reference in a new issue