gccrs: Add containers for proc macro collection mappings

Add one container for each kind of procedural macro mapping. Also add a
new structure to gather informations required for derive procedural
macros. Add different functions to fill those new containers.

gcc/rust/ChangeLog:

	* backend/rust-compile-context.h (struct CustomDeriveInfo): Add
	new derive procedural macro metadata information holder for
	mappings.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
This commit is contained in:
Pierre-Emmanuel Patry 2023-09-06 14:34:45 +02:00 committed by Arthur Cohen
parent 2d2fa103e1
commit f915a3fe90

View file

@ -38,6 +38,13 @@ struct fncontext
TyTy::BaseType *retty;
};
struct CustomDeriveInfo
{
tree fndecl;
std::string trait_name;
std::vector<std::string> attributes;
};
class Context
{
public:
@ -357,6 +364,18 @@ public:
static hashval_t type_hasher (tree type);
void collect_attribute_proc_macro (tree fndecl)
{
attribute_macros.push_back (fndecl);
}
void collect_bang_proc_macro (tree fndecl) { bang_macros.push_back (fndecl); }
void collect_derive_proc_macro (CustomDeriveInfo macro)
{
custom_derive_macros.push_back (macro);
}
private:
Resolver::Resolver *resolver;
Resolver::TypeCheckContext *tyctx;
@ -381,6 +400,10 @@ private:
std::map<HirId, tree> implicit_pattern_bindings;
std::map<hashval_t, tree> main_variants;
std::vector<CustomDeriveInfo> custom_derive_macros;
std::vector<tree> attribute_macros;
std::vector<tree> bang_macros;
// closure bindings
std::vector<HirId> closure_scope_bindings;
std::map<HirId, std::map<HirId, tree>> closure_bindings;