]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: libproc_macro: Add proc_macro interface structures
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Mon, 24 Apr 2023 14:46:23 +0000 (16:46 +0200)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 16 Jan 2024 17:34:16 +0000 (18:34 +0100)
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>
libgrust/libproc_macro/proc_macro.h

index 5778098bd4b29b87b0e0fdf16d505a69c874dadd..a5ee77435fea9c38d2f5d8491488f409e5be3bad 100644 (file)
@@ -23,6 +23,7 @@
 #ifndef PROC_MACRO_H
 #define PROC_MACRO_H
 
+#include <cstdint>
 #include "literal.h"
 #include "tokenstream.h"
 #include "tokentree.h"
 #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 */