diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-07-31 18:26:40 +0200 |
---|---|---|
committer | P-E-P <32375388+P-E-P@users.noreply.github.com> | 2023-09-05 14:05:36 +0000 |
commit | 76263ca000ac6d95c92074d5e4a10b3220db6ff1 (patch) | |
tree | ed1d4f1d4d04794b82cb5bc44914718e8addadc1 /gcc | |
parent | 32e861f10045b1c6a4e9a4cafc7f27d628af38ab (diff) | |
download | gcc-76263ca000ac6d95c92074d5e4a10b3220db6ff1.zip gcc-76263ca000ac6d95c92074d5e4a10b3220db6ff1.tar.gz gcc-76263ca000ac6d95c92074d5e4a10b3220db6ff1.tar.bz2 |
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 <pierre-emmanuel.patry@embecosm.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/ast/rust-ast.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/gcc/rust/ast/rust-ast.h b/gcc/rust/ast/rust-ast.h index db55f01..037b829 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<std::string> 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 { |