diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-04-11 15:07:03 +0200 |
---|---|---|
committer | CohenArthur <arthur.cohen@embecosm.com> | 2023-04-21 09:31:24 +0000 |
commit | 3fb63250eafe750e6af31cbdea66902c5f7e9adb (patch) | |
tree | f2baea78fd5783b8d69a8c715afab48983e45a37 | |
parent | a3978a75914c5be49b1c3bee4f012cee1a8bbc3e (diff) | |
download | gcc-3fb63250eafe750e6af31cbdea66902c5f7e9adb.tar.gz |
libproc_macro: Add named constructor
Add named constructor directly in Ident struct.
ChangeLog:
* libgrust/libproc_macro/ident.cc (Ident__new): Use named
constructor.
(Ident__new_raw): Use named constructor.
(Ident__clone): Use clone member function.
(Ident::clone): Make clone const.
(Ident::make_ident): Add named construcot.
* libgrust/libproc_macro/ident.h (struct Ident): Add named
constructor prototypes.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
-rw-r--r-- | libgrust/libproc_macro/ident.cc | 36 | ||||
-rw-r--r-- | libgrust/libproc_macro/ident.h | 6 |
2 files changed, 33 insertions, 9 deletions
diff --git a/libgrust/libproc_macro/ident.cc b/libgrust/libproc_macro/ident.cc index 6ea70dc0823..6ad9e7807f1 100644 --- a/libgrust/libproc_macro/ident.cc +++ b/libgrust/libproc_macro/ident.cc @@ -27,17 +27,13 @@ extern "C" { Ident Ident__new (unsigned char *str, std::uint64_t len) { - unsigned char *val = new unsigned char[len]; - std::memcpy (val, str, len); - return {false, val, len}; + return Ident::make_ident (str, len); } Ident Ident__new_raw (unsigned char *str, std::uint64_t len) { - unsigned char *val = new unsigned char[len]; - std::memcpy (val, str, len); - return {true, val, len}; + return Ident::make_ident (str, len, true); } void @@ -49,8 +45,30 @@ Ident__drop (Ident *ident) Ident Ident__clone (const Ident *ident) { - unsigned char *val = new unsigned char[ident->len]; - std::memcpy (val, ident->val, ident->len); - return {ident->is_raw, val, ident->len}; + return ident->clone (); +} +} + +Ident +Ident::clone () const +{ + unsigned char *val = new unsigned char[this->len]; + std::memcpy (val, this->val, this->len); + return {this->is_raw, val, this->len}; } + +Ident +Ident::make_ident (std::string str, bool raw) +{ + return Ident::make_ident (reinterpret_cast<const unsigned char *> ( + str.c_str ()), + str.length (), raw); +} + +Ident +Ident::make_ident (const unsigned char *str, std::uint64_t len, bool raw) +{ + unsigned char *val = new unsigned char[len]; + std::memcpy (val, str, len); + return {raw, val, len}; } diff --git a/libgrust/libproc_macro/ident.h b/libgrust/libproc_macro/ident.h index 0a4b4f88bad..8ab7e6dc324 100644 --- a/libgrust/libproc_macro/ident.h +++ b/libgrust/libproc_macro/ident.h @@ -33,6 +33,12 @@ struct Ident unsigned char *val; // Length in bytes std::uint64_t len; + +public: + Ident clone () const; + static Ident make_ident (std::string str, bool raw = false); + static Ident make_ident (const unsigned char *str, std::uint64_t len, + bool raw = false); }; extern "C" { |