Corrects the TypeAdapter::removeUnnecessaryImplicitGeneralTypes method so that it does not remove implicit specializations from types that are part of a chain of circular owned specializations. Declarations such as the following no longer produce errors:
part def A :> A;
part def B :> C;
part def C :> B;
In the case of a circle of two or more types, the implicit specialization is added to the lexically last one processed (e.g., C in the example above), though it would also have been legal to add the implicit specialization to any or all of the types in the circle.
Corrects the
TypeAdapter::removeUnnecessaryImplicitGeneralTypes
method so that it does not remove implicit specializations from types that are part of a chain of circular owned specializations. Declarations such as the following no longer produce errors:In the case of a circle of two or more types, the implicit specialization is added to the lexically last one processed (e.g.,
C
in the example above), though it would also have been legal to add the implicit specialization to any or all of the types in the circle.