| |
| Posted by Stefan Koch | PermalinkReply |
|
Stefan Koch
| Good day,
I am not sure if it was visible in the examples that I posted.
But a function returning an alias[] never actually return a tuple.
And if you think about it, you will realize that, if it did, it would be dishonest about the return type.
So how can we transform an alias[] back into a tuple once we are done with filtering and all that?
It's easy.
You use the .tupleof property.
The latest version of talias_master[0] will actually allow you to transform a ctfe-knwon enum alias[] into a TupleExp.
I always intended to have type function returns transform themselves automatically into tuples when they are leaving the last level of CTFE calls, but that's not only tricky to implement, that's also a rather bad idea ;)
The syntax is preliminary of course.
And you can feel free to make suggestions.
Here is the code which you can try out right now!
Cheers!
---
auto makeAliasArray(alias[] types ...)
{
return types;
}
enum basic_types = makeAliasArray(bool, ubyte, char, byte, ushort, wchar, short, uint, dchar, int, ulong, long);
enum mangles = () {
string result;
// alias does not expose the mangleof (since the type alias itself doesn't have a mangle)
// so the only way to get at the mangle of the type held in the alias variable
// is to transform it into a real type again, using the tupleof property.
foreach(btype; basic_types.tupleof)
{
result ~= "type: " ~ btype.stringof ~ " mangle: '" ~ btype.mangleof ~ "'" ~ '\n';
}
return result;
} ();
pragma(msg, mangles);
/+ output:
type: bool mangle: 'b'
type: ubyte mangle: 'h'
type: char mangle: 'a'
type: byte mangle: 'g'
type: ushort mangle: 't'
type: wchar mangle: 'u'
type: short mangle: 's'
type: uint mangle: 'k'
type: dchar mangle: 'w'
type: int mangle: 'i'
type: ulong mangle: 'm'
type: long mangle: 'l'
+/
---
[0] https://github.com/UplinkCoder/dmd/tree/talias_master
|