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

index 03beb89a33e2d47b1c01d88ac60a61275d7bde36..2e50f0afb01a05221e19aa82900a837566198b16 100644 (file)
 // <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
index a5ee77435fea9c38d2f5d8491488f409e5be3bad..3022203a5dd59628724312d625d351f1136ea3ae 100644 (file)
@@ -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