mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-27 05:44:15 +08:00
gccrs: libproc_macro: Add Literal type
Add the Literal type matching rust ffi definitions. libgrust/ChangeLog: * libproc_macro/proc_macro.h (PROC_MACRO_H): Add literal header include directive. * libproc_macro/literal.h: New file. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
This commit is contained in:
parent
4756e2ae8d
commit
49eb3f5fc6
161
libgrust/libproc_macro/literal.h
Normal file
161
libgrust/libproc_macro/literal.h
Normal file
@ -0,0 +1,161 @@
|
||||
// Copyright (C) 2023 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU Proc Macro Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// Under Section 7 of GPL version 3, you are granted additional
|
||||
// permissions described in the GCC Runtime Library Exception, version
|
||||
// 3.1, as published by the Free Software Foundation.
|
||||
|
||||
// You should have received a copy of the GNU General Public License and
|
||||
// a copy of the GCC Runtime Library Exception along with this program;
|
||||
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#ifndef LITERAL_H
|
||||
#define LITERAL_H
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
enum UnsignedTag
|
||||
{
|
||||
UNSIGNED_8,
|
||||
UNSIGNED_16,
|
||||
UNSIGNED_32,
|
||||
UNSIGNED_64,
|
||||
UNSIGNED_128
|
||||
};
|
||||
|
||||
struct Payload128
|
||||
{
|
||||
std::uint64_t low;
|
||||
std::uint64_t high;
|
||||
};
|
||||
|
||||
union UnsignedPayload
|
||||
{
|
||||
std::uint8_t unsigned8;
|
||||
std::uint16_t unsigned16;
|
||||
std::uint32_t unsigned32;
|
||||
std::uint64_t unsigned64;
|
||||
Payload128 unsigned128;
|
||||
};
|
||||
|
||||
struct Unsigned
|
||||
{
|
||||
UnsignedTag tag;
|
||||
UnsignedPayload payload;
|
||||
};
|
||||
|
||||
enum SignedTag
|
||||
{
|
||||
SIGNED_8,
|
||||
SIGNED_16,
|
||||
SIGNED_32,
|
||||
SIGNED_64,
|
||||
SIGNED_128
|
||||
};
|
||||
|
||||
union SignedPayload
|
||||
{
|
||||
std::int8_t signed8;
|
||||
std::int16_t signed16;
|
||||
std::int32_t signed32;
|
||||
std::int64_t signed64;
|
||||
};
|
||||
|
||||
struct Signed
|
||||
{
|
||||
SignedTag tag;
|
||||
SignedPayload payload;
|
||||
};
|
||||
|
||||
enum LiteralTag
|
||||
{
|
||||
STRING,
|
||||
BYTE_STRING,
|
||||
CHAR,
|
||||
UNSIGNED,
|
||||
SIGNED,
|
||||
USIZE,
|
||||
ISIZE,
|
||||
FLOAT32,
|
||||
FLOAT64
|
||||
};
|
||||
|
||||
struct StringPayload
|
||||
{
|
||||
unsigned char *data;
|
||||
std::uint64_t len;
|
||||
};
|
||||
|
||||
struct ByteStringPayload
|
||||
{
|
||||
std::uint8_t *data;
|
||||
std::uint64_t size;
|
||||
};
|
||||
|
||||
struct UnsignedSuffixPayload
|
||||
{
|
||||
Unsigned value;
|
||||
bool suffix;
|
||||
};
|
||||
|
||||
struct SignedSuffixPayload
|
||||
{
|
||||
Signed value;
|
||||
bool suffix;
|
||||
};
|
||||
|
||||
struct UsizePayload
|
||||
{
|
||||
std::uint64_t value;
|
||||
bool suffix;
|
||||
};
|
||||
|
||||
struct IsizePayload
|
||||
{
|
||||
std::int64_t value;
|
||||
bool suffix;
|
||||
};
|
||||
|
||||
struct Float32Payload
|
||||
{
|
||||
float value;
|
||||
bool suffix;
|
||||
};
|
||||
|
||||
struct Float64Payload
|
||||
{
|
||||
double value;
|
||||
bool suffix;
|
||||
};
|
||||
|
||||
union LiteralPayload
|
||||
{
|
||||
StringPayload string_payload;
|
||||
ByteStringPayload byte_string_payload;
|
||||
std::uint32_t char_payload;
|
||||
UnsignedSuffixPayload unsigned_payload;
|
||||
SignedSuffixPayload signed_payload;
|
||||
UsizePayload usize_payload;
|
||||
IsizePayload isize_payload;
|
||||
Float32Payload float32_payload;
|
||||
Float64Payload float64_payload;
|
||||
};
|
||||
|
||||
struct Literal
|
||||
{
|
||||
LiteralTag tag;
|
||||
LiteralPayload payload;
|
||||
};
|
||||
|
||||
#endif /* ! LITERAL_H */
|
@ -23,4 +23,6 @@
|
||||
#ifndef PROC_MACRO_H
|
||||
#define PROC_MACRO_H
|
||||
|
||||
#include "literal.h"
|
||||
|
||||
#endif /* ! PROC_MACRO_H */
|
||||
|
Loading…
Reference in New Issue
Block a user