/** * Basic class region parameter */ class C1<region P> { region r; C1<r> field; void m1() { field = new C1<r>(); C1<P> local = new C1<P>(); } } /** * Class with region parameter and type parameter */ class C2<type T, region P> { region r; C2<T,r> field; void m1() { field = new C2<T,r>(); C2<T,P> local = new C2<T,P>(); } } /** * Two class region parameters, one declared under an RPL */ class C3<region P1, P2> { region r1; } /** * Two class region parameters, one declared under an RPL and * both declared disjoint */ class C4<region P1, P2 under C4.r1 | P1 # P2> { region r1; } /** * One class region parameter shared with the superclass */ class C5<region P,Q> extends C1<Q> { region s; C5<r,s> anotherField; }