aboutsummaryrefslogtreecommitdiff
path: root/libgrust
diff options
context:
space:
mode:
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>2023-04-24 16:46:23 +0200
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 18:34:16 +0100
commit1ff234bffdbd1e25636e2a382c8400fb1702ed13 (patch)
treee651774fa16d91fac58ff9a766a4a87221e98531 /libgrust
parenta365e3ed705caf88509acc9237cfba1bffcea797 (diff)
downloadgcc-1ff234bffdbd1e25636e2a382c8400fb1702ed13.zip
gcc-1ff234bffdbd1e25636e2a382c8400fb1702ed13.tar.gz
gcc-1ff234bffdbd1e25636e2a382c8400fb1702ed13.tar.bz2
gccrs: libproc_macro: Add proc_macro interface structures
Add the structures that should be used by a compiler opening a procedural macro to either identify or execute it. libgrust/ChangeLog: * libproc_macro/proc_macro.h (struct CustomDerivePayload): Add C compatible payload structure. (struct AttrPayload): Likewise. (struct BangPayload): Likewise. (enum ProcmacroTag): Add tag for tagged union. (union ProcmacroPayload): Proc macro payload union. (struct Procmacro): Tagged union. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Diffstat (limited to 'libgrust')
-rw-r--r--libgrust/libproc_macro/proc_macro.h55
1 files changed, 55 insertions, 0 deletions
diff --git a/libgrust/libproc_macro/proc_macro.h b/libgrust/libproc_macro/proc_macro.h
index 5778098..a5ee774 100644
--- a/libgrust/libproc_macro/proc_macro.h
+++ b/libgrust/libproc_macro/proc_macro.h
@@ -23,6 +23,7 @@
#ifndef PROC_MACRO_H
#define PROC_MACRO_H
+#include <cstdint>
#include "literal.h"
#include "tokenstream.h"
#include "tokentree.h"
@@ -30,4 +31,58 @@
#include "punct.h"
#include "ident.h"
+namespace ProcMacro {
+
+extern "C" {
+
+using CustomDeriveMacro = TokenStream (*) (TokenStream);
+using AttributeMacro = TokenStream (*) (TokenStream, TokenStream);
+using BangMacro = TokenStream (*) (TokenStream);
+
+struct CustomDerivePayload
+{
+ // TODO: UTF-8 function name
+ char *trait_name;
+ // TODO: UTF-8 attributes
+ char **attributes;
+ std::uint64_t attr_size;
+ CustomDeriveMacro macro;
+};
+
+struct AttrPayload
+{
+ // TODO: UTF-8 function name
+ char *name;
+ AttributeMacro macro;
+};
+
+struct BangPayload
+{
+ char *name;
+ BangMacro macro;
+};
+}
+
+enum ProcmacroTag
+{
+ CUSTOM_DERIVE,
+ ATTR,
+ BANG,
+};
+
+union ProcmacroPayload
+{
+ CustomDerivePayload custom_derive;
+ AttrPayload attribute;
+ BangPayload bang;
+};
+
+struct Procmacro
+{
+ ProcmacroTag tag;
+ ProcmacroPayload payload;
+};
+
+} // namespace ProcMacro
+
#endif /* ! PROC_MACRO_H */