From: Pierre-Emmanuel Patry Date: Mon, 31 Jul 2023 16:26:40 +0000 (+0200) Subject: gccrs: Add proc macro ast representation X-Git-Tag: basepoints/gcc-15~2158 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7c265ce70b5104b6c6ea2ec0efe3b0f47ea0bbb8;p=thirdparty%2Fgcc.git gccrs: Add proc macro ast representation When resolving proc macros it is convenient to store every macro directly in the extern crate. These class in the ast module provide a better abstraction over the raw ProcMacro::{CustomDerive, Bang, Attribute} structures provided by the proc_macro library. gcc/rust/ChangeLog: * ast/rust-ast.h (class BangProcMacro): Add new proc macro abstraction. (class AttributeProcMacro): Likewise. (class CustomDeriveProcMacro): Likewise. Signed-off-by: Pierre-Emmanuel Patry --- diff --git a/gcc/rust/ast/rust-ast.h b/gcc/rust/ast/rust-ast.h index 136da86525d9..b78c4291e7ae 100644 --- a/gcc/rust/ast/rust-ast.h +++ b/gcc/rust/ast/rust-ast.h @@ -1950,6 +1950,71 @@ public: } }; +class BangProcMacro +{ +private: + std::string name; + NodeId node_id; + ProcMacro::BangMacro macro; + +public: + BangProcMacro (ProcMacro::Bang macro) + : name (macro.name), + node_id (Analysis::Mappings::get ()->get_next_node_id ()), + macro (macro.macro) + {} + + const std::string &get_name () const { return name; } + + NodeId get_node_id () const { return node_id; } + + ProcMacro::BangMacro get_handle () const { return macro; } +}; + +class AttributeProcMacro +{ +private: + std::string name; + NodeId node_id; + ProcMacro::AttributeMacro macro; + +public: + AttributeProcMacro (ProcMacro::Attribute macro) + : name (macro.name), + node_id (Analysis::Mappings::get ()->get_next_node_id ()), + macro (macro.macro) + {} + + const std::string &get_name () const { return name; } + + NodeId get_node_id () const { return node_id; } + + ProcMacro::AttributeMacro get_handle () const { return macro; } +}; + +class CustomDeriveProcMacro +{ +private: + std::string trait_name; + std::vector attributes; + NodeId node_id; + ProcMacro::CustomDeriveMacro macro; + +public: + CustomDeriveProcMacro (ProcMacro::CustomDerive macro) + : trait_name (macro.trait_name), + attributes (macro.attributes, macro.attributes + macro.attr_size), + node_id (Analysis::Mappings::get ()->get_next_node_id ()), + macro (macro.macro) + {} + + const std::string &get_trait_name () const { return trait_name; } + + NodeId get_node_id () const { return node_id; } + + ProcMacro::CustomDeriveMacro get_handle () const { return macro; } +}; + // A crate AST object - holds all the data for a single compilation unit struct Crate {