aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>2023-04-24 17:14:35 +0200
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 18:34:16 +0100
commitfb3eb13f0f866568f2de799e4b93b704aa02f3d7 (patch)
tree2dda4cf6aabc1feddd48168eed637fdf64e66942
parent1ff234bffdbd1e25636e2a382c8400fb1702ed13 (diff)
downloadgcc-fb3eb13f0f866568f2de799e4b93b704aa02f3d7.zip
gcc-fb3eb13f0f866568f2de799e4b93b704aa02f3d7.tar.gz
gcc-fb3eb13f0f866568f2de799e4b93b704aa02f3d7.tar.bz2
gccrs: libproc_macro: Add helpers to construct Procmacro
Add some helper functions to create Procmacro tagged unions. libgrust/ChangeLog: * libproc_macro/proc_macro.cc (Procmacro::make_derive): Add custom derive macro constructor. (Procmacro::make_attribute): Add attribute macro constructor. (Procmacro::make_bang): Add bang macro constructor. * libproc_macro/proc_macro.h (struct Procmacro): Add helper function prototypes. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
-rw-r--r--libgrust/libproc_macro/proc_macro.cc29
-rw-r--r--libgrust/libproc_macro/proc_macro.h14
2 files changed, 39 insertions, 4 deletions
diff --git a/libgrust/libproc_macro/proc_macro.cc b/libgrust/libproc_macro/proc_macro.cc
index 03beb89..2e50f0a 100644
--- a/libgrust/libproc_macro/proc_macro.cc
+++ b/libgrust/libproc_macro/proc_macro.cc
@@ -21,3 +21,32 @@
// <http://www.gnu.org/licenses/>.
#include "proc_macro.h"
+
+namespace ProcMacro {
+
+Procmacro
+Procmacro::make_derive (const char *trait_name, const char **attributes,
+ std::uint64_t size, CustomDeriveMacro macro)
+{
+ ProcmacroPayload payload;
+ payload.custom_derive = {trait_name, attributes, size, macro};
+ return {CUSTOM_DERIVE, payload};
+}
+
+Procmacro
+Procmacro::make_attribute (const char *name, AttributeMacro macro)
+{
+ ProcmacroPayload payload;
+ payload.attribute = {name, macro};
+ return {ATTR, payload};
+}
+
+Procmacro
+Procmacro::make_bang (const char *name, BangMacro macro)
+{
+ ProcmacroPayload payload;
+ payload.bang = {name, macro};
+ return {BANG, payload};
+}
+
+} // namespace ProcMacro
diff --git a/libgrust/libproc_macro/proc_macro.h b/libgrust/libproc_macro/proc_macro.h
index a5ee774..3022203 100644
--- a/libgrust/libproc_macro/proc_macro.h
+++ b/libgrust/libproc_macro/proc_macro.h
@@ -42,9 +42,9 @@ using BangMacro = TokenStream (*) (TokenStream);
struct CustomDerivePayload
{
// TODO: UTF-8 function name
- char *trait_name;
+ const char *trait_name;
// TODO: UTF-8 attributes
- char **attributes;
+ const char **attributes;
std::uint64_t attr_size;
CustomDeriveMacro macro;
};
@@ -52,13 +52,13 @@ struct CustomDerivePayload
struct AttrPayload
{
// TODO: UTF-8 function name
- char *name;
+ const char *name;
AttributeMacro macro;
};
struct BangPayload
{
- char *name;
+ const char *name;
BangMacro macro;
};
}
@@ -81,6 +81,12 @@ struct Procmacro
{
ProcmacroTag tag;
ProcmacroPayload payload;
+
+public:
+ Procmacro make_derive (const char *trait_name, const char **attribute,
+ std::uint64_t size, CustomDeriveMacro macro);
+ Procmacro make_attribute (const char *name, AttributeMacro macro);
+ Procmacro make_bang (const char *name, BangMacro macro);
};
} // namespace ProcMacro