Function dmd.aliasthis.isRecursiveAliasThis
Check and set 'att' if 't' is a recursive 'alias this' type
The goal is to prevent endless loops when there is a cycle in the alias this chain.
Since there is no multiple alias this, the chain either ends in a leaf,
or it loops back on itself as some point.
Example
S0 -> (S1 -> S2 -> S3 -> S1)
S0 is not a recursive alias this, so this returns false, and a rewrite to S1 can be tried.
S1 is a recursive alias this type, but since att is initialized to null,
this still returns false, but att1 is set to S1.
A rewrite to S2 and S3 can be tried, but when we want to try a rewrite to S1 again,
we notice att == t, so we're back at the start of the loop, and this returns true.
Parameters
| Name | Description |
|---|---|
| att | type reference used to detect recursion. Should be initialized to null. |
| t | type of 'alias this' rewrite to attempt |
Returns
false if the rewrite is safe, true if it would loop back around