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 <pierre-emmanuel.patry@embecosm.com>
This commit is contained in:
Pierre-Emmanuel Patry 2023-04-11 15:07:03 +02:00 committed by Arthur Cohen
parent d2c9c8cf39
commit f4b2b28f32
2 changed files with 33 additions and 9 deletions

View File

@ -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};
}

View File

@ -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" {