Refactored fullName template

New fullName implementation gives same result as fullyQualifiedName for normal types and templated ones, and still works in BetterC
This commit is contained in:
Mergul 2023-04-27 23:08:27 +02:00
parent 50fa2ce19c
commit 6a600d22c8
3 changed files with 59 additions and 27 deletions

View file

@ -63,34 +63,19 @@ static long getIndexOfTypeInEntitiesData(EntitiesData, Type)()
return index;
}
static string attachParentName(alias T, string str)()
template fullName(alias T : X!A, alias X, A...)
{
alias parent = __traits(parent, T);
enum parent_str = parent.stringof;
static if(parent_str[0..7] == "module ")
{
static if(__traits(compiles, __traits(parent, parent)))
{
return attachParentName!(parent, parent_str[7 .. $] ~ '.' ~ str);
}
else return parent_str[7 .. $] ~ '.' ~ str;
}
else static if(parent_str[0..8] == "package ")
{
static if(__traits(compiles, __traits(parent, parent)))
{
return attachParentName!(parent, parent_str[8 .. $] ~ '.' ~ str);
}
else return parent_str[8 .. $] ~ '.' ~ str;
}
else static if(__traits(compiles, __traits(parent, parent)))
{
return attachParentName!(parent, parent_str ~ '.' ~ str);
}
else return parent_str ~ '.' ~ str;
alias parent = __traits(parent, X);
enum fullName = fullName!parent ~ '.' ~ __traits(identifier, X) ~ "!(" ~ fullName!A ~ ")";
}
static string fullName(T)()
template fullName(alias T)
{
return attachParentName!(T, T.stringof);
static if(__traits(compiles, __traits(parent, T)))
{
alias parent = __traits(parent, T);
enum fullName = fullName!parent ~ '.' ~ __traits(identifier, T);
}
else static if(__traits(compiles, __traits(identifier, T)))enum fullName = __traits(identifier, T);
else enum fullName = T.stringof;
}