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.

bool
isRecursiveAliasThis
(
ref Type att
,)

Parameters

att Type

type reference used to detect recursion. Should be initialized to null.

t Type

type of 'alias this' rewrite to attempt

Return Value

Type: bool

false if the rewrite is safe, true if it would loop back around

Examples

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.

Meta