mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 23:25:24 +02:00
gccrs: libproc_macro: Add literal ffi implementations
Add literal type related ffi functions implementation. libgrust/ChangeLog: * libproc_macro/literal.h (Literal__drop): Implement drop. (Literal__string): Constructor from a string function prototype. (Literal__byte_string): Constructor from a byte string function prototype. (Literal__from_string): Add function body, no implementation yet. * libproc_macro/literal.cc: New file. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
This commit is contained in:
committed by
Arthur Cohen
parent
49eb3f5fc6
commit
86c070baa8
80
libgrust/libproc_macro/literal.cc
Normal file
80
libgrust/libproc_macro/literal.cc
Normal file
@@ -0,0 +1,80 @@
|
||||
// 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/>.
|
||||
|
||||
#include "literal.h"
|
||||
#include <cstring>
|
||||
|
||||
extern "C" {
|
||||
|
||||
void
|
||||
Literal__drop (Literal *lit)
|
||||
{
|
||||
switch (lit->tag)
|
||||
{
|
||||
case STRING:
|
||||
delete lit->payload.string_payload.data;
|
||||
lit->payload.string_payload.len = 0;
|
||||
break;
|
||||
case BYTE_STRING:
|
||||
delete lit->payload.byte_string_payload.data;
|
||||
lit->payload.byte_string_payload.size = 0;
|
||||
break;
|
||||
case CHAR:
|
||||
case UNSIGNED:
|
||||
case SIGNED:
|
||||
case USIZE:
|
||||
case ISIZE:
|
||||
case FLOAT32:
|
||||
case FLOAT64:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Literal
|
||||
Literal__string (const unsigned char *str, std::uint64_t len)
|
||||
{
|
||||
unsigned char *data = new unsigned char[len];
|
||||
StringPayload str_payload = {data, len};
|
||||
std::memcpy (data, str, len);
|
||||
LiteralPayload payload;
|
||||
payload.string_payload = str_payload;
|
||||
return {STRING, payload};
|
||||
}
|
||||
|
||||
Literal
|
||||
Literal__byte_string (const std::uint8_t *bytes, std::uint64_t len)
|
||||
{
|
||||
std::uint8_t *data = new std::uint8_t[len];
|
||||
ByteStringPayload bstr_payload = {data, len};
|
||||
std::memcpy (data, bytes, len);
|
||||
LiteralPayload payload;
|
||||
payload.byte_string_payload = bstr_payload;
|
||||
return {BYTE_STRING, payload};
|
||||
}
|
||||
|
||||
bool
|
||||
Literal__from_string (const unsigned char *str, std::uint64_t len, Literal *lit)
|
||||
{
|
||||
// FIXME: implement this function with parser
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -158,4 +158,19 @@ struct Literal
|
||||
LiteralPayload payload;
|
||||
};
|
||||
|
||||
extern "C" {
|
||||
void
|
||||
Literal__drop (Literal *lit);
|
||||
|
||||
Literal
|
||||
Literal__string (const unsigned char *str, std::uint64_t len);
|
||||
|
||||
Literal
|
||||
Literal__byte_string (const std::uint8_t *bytes, std::uint64_t len);
|
||||
|
||||
bool
|
||||
Literal__from_string (const unsigned char *str, std::uint64_t len,
|
||||
Literal *lit);
|
||||
}
|
||||
|
||||
#endif /* ! LITERAL_H */
|
||||
|
||||
Reference in New Issue
Block a user