mirror of
https://github.com/gcc-mirror/gcc.git
synced 2024-11-21 13:40:47 +00:00
10c9b9f0cc
Change the literal representation on cpp side to match the new one in rust. This means FFIString had to be implemented on cpp side. A few helper functions has also been introduced. libgrust/ChangeLog: * libproc_macro/Makefile.am: Add ffistring unit to compiled objects list. * libproc_macro/Makefile.in: Regenerate. * libproc_macro/literal.cc (Literal::drop): Change with a call to ffistring drop function. (Literal::make_literal): Add new helper constructor (Literal__drop): Remove this function. (Literal__string): Likewise. (Literal__byte_string): Likewise. (Literal__from_string): Moved this function. (Literal::make_unsigned): Changed the constructor to match the new layout. (Literal::make_signed): Likewise. (Literal::clone): Reimplement th eclone function. (Literal::make_u8): Changed the constructor, make suffixed by default. (Literal::make_u16): Likewise. (Literal::make_u32): Likewise. (Literal::make_u64): Likewise. (Literal::make_i8): Likewise. (Literal::make_i16): Likewise. (Literal::make_i32): Likewise. (Literal::make_i64): Likewise. (Literal::make_string): Likewise. (Literal::make_byte_string): Likewise. (Literal::make_f32): Likewise. (Literal::make_f64): Likewise. (Literal::make_char): Likewise. (Literal::make_usize): Likewise. (Literal::make_isize): Likewise. (LitKind::make_byte): Add new helper constructor to avoid having to set the payload value. (LitKind::make_char): Likewise. (LitKind::make_integer): Likewise. (LitKind::make_float): Likewise. (LitKind::make_str): Likewise. (LitKind::make_str_raw): Add a new helper constructor which takes the payload value as an argument. (LitKind::make_byte_str): Add new helper constructor to avoid mistakes with payload value. (LitKind::make_byte_str_raw): Add a new helper constructor which takes the payload value as an argument. * libproc_macro/literal.h: Add new functions prototype. (enum UnsignedTag): Removed because it is now unused. (struct Payload128): Likewise. (union UnsignedPayload): Likewise. (struct Unsigned): Likewise. (enum SignedTag): Likewise. (union SignedPayload): Likewise. (struct Signed): Likewise. (enum LiteralTag): Likewise. (enum LitKindTag): Likewise. (struct StringPayload): Likewise. (struct ByteStringPayload): Likewise. (union LitKindPayload): Likewise. (struct UnsignedSuffixPayload): Likewise. (struct LitKind): Add new literal kind struct representation to match the enum on rust side. (struct SignedSuffixPayload): Removed because now unused. (struct UsizePayload): Likewise. (struct IsizePayload): Likewise. (struct Float32Payload): Likewise. (struct Float64Payload): Likewise. (union LiteralPayload): Likewise. (struct Literal): Changed the internals of the structure. (Literal__drop): Removed the drop function fom the c interface. (Literal__string): Removed unused function. (Literal__byte_string): Removed unused function. * libproc_macro/ffistring.cc: New file. * libproc_macro/ffistring.h: New file. gcc/rust/ChangeLog: * lex/rust-token.h: Implement hash for token id enumeration. * util/rust-token-converter.cc (dispatch_float_literals): Update to new internals. (dispatch_integer_literals): Likewise. (convert): Likewise. (string_literal): Remove function. (byte_string_literal): Likewise. (unsigned_literal): Likewise. (signed_literal): Likewise. (from_literal): Update with new internals. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
56 lines
1.6 KiB
C++
56 lines
1.6 KiB
C++
// 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 FFISTRING_H
|
|
#define FFISTRING_H
|
|
|
|
#include <cstdint>
|
|
#include <string>
|
|
|
|
namespace ProcMacro {
|
|
|
|
struct FFIString
|
|
{
|
|
const unsigned char *data;
|
|
std::uint64_t len;
|
|
|
|
public:
|
|
FFIString clone () const;
|
|
std::string to_string () const;
|
|
static FFIString make_ffistring (const std::string &str);
|
|
static FFIString make_ffistring (const unsigned char *data,
|
|
std::uint64_t len);
|
|
static void drop (FFIString *str);
|
|
};
|
|
|
|
extern "C" {
|
|
FFIString
|
|
FFIString__new (const unsigned char *data, std::uint64_t len);
|
|
|
|
void
|
|
FFIString__drop (FFIString *str);
|
|
}
|
|
|
|
} // namespace ProcMacro
|
|
|
|
#endif /* ! FFISTRING_H */
|