diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-07-31 18:26:40 +0200 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-01-16 19:04:33 +0100 |
commit | 7c265ce70b5104b6c6ea2ec0efe3b0f47ea0bbb8 (patch) | |
tree | e7554c96d577e533042e607b009df4cbb68f8b48 /gcc | |
parent | 47886454483eefc4dc2f0e82dd3e19173a7bf357 (diff) | |
download | gcc-7c265ce70b5104b6c6ea2ec0efe3b0f47ea0bbb8.zip gcc-7c265ce70b5104b6c6ea2ec0efe3b0f47ea0bbb8.tar.gz gcc-7c265ce70b5104b6c6ea2ec0efe3b0f47ea0bbb8.tar.bz2 |
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 <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 136da86..b78c429 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 { |