// <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
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;
};
struct AttrPayload
{
// TODO: UTF-8 function name
- char *name;
+ const char *name;
AttributeMacro macro;
};
struct BangPayload
{
- char *name;
+ const char *name;
BangMacro macro;
};
}
{
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