From: Pierre-Emmanuel Patry Date: Tue, 11 Apr 2023 13:07:03 +0000 (+0200) Subject: gccrs: libproc_macro: Add named constructor X-Git-Tag: basepoints/gcc-15~2638 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f4b2b28f325ef693f36776168a40152e9ce6cd34;p=thirdparty%2Fgcc.git gccrs: libproc_macro: Add named constructor Add named constructor directly in Ident struct. libgrust/ChangeLog: * 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. * libproc_macro/ident.h (struct Ident): Add named constructor prototypes. Signed-off-by: Pierre-Emmanuel Patry --- diff --git a/libgrust/libproc_macro/ident.cc b/libgrust/libproc_macro/ident.cc index 6ea70dc0823f..6ad9e7807f10 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 ( + 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 0a4b4f88bad9..8ab7e6dc3242 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" {