Making TypeInfo.next() return a const(TypeInfo) was a bad idea
Rainer Schuetze
r.sagitario at gmx.de
Sun Oct 14 23:33:06 PDT 2012
On 10/14/2012 12:19 PM, Benjamin Thaut wrote:
> Because you are now no longer able to do stuff like this:
>
> void log(...)
> {
> auto t = _arguments[0];
> while(some condition)
> {
> t = t.next();
> }
> }
>
> To be actually able to use TypeInfo.next you will now need the ConstRef
> (hack) from phobos. Afaik there is no such thing in druntime which makes
> working with TypeInfo.next within druntime a real pita.
That's the general problem of non-rebindable const references which is a
real pita. There has been a pull request to implement it
(https://github.com/D-Programming-Language/dmd/pull/3) but unfortunately
it never made it into the compiler.
>
> Any suggestions?
You could create a recursive function hoping for
tail-recursion-optimization and inlining:
void log(...)
{
static const(TypeInfo) drillInto(const(TypeInfo) t)
{
if(some condition)
return drillInto(t.next());
return t;
}
auto t = drillInto(_arguments[0]);
}
More information about the Digitalmars-d
mailing list