1 @LATTICE("L<M,M<H,H<C,C*,M*")
2 @METHODDEFAULT("L<M,M<H,H<IN,THISLOC=M,RETURNLOC=M")
10 public static void main(@LOC("H") String args[]) {
11 @LOC("H") test t = new test();
13 SSJAVA: while (true) {
15 t.doDelegationTest2();
20 public void doDelegationTest() {
22 @LOC("H") Foo ownedFoo = new Foo();
25 // System.out.println(ownedFoo.v);
27 changeLocationTest(ownedFoo);
30 public void delegate(@DELEGATE @LOC("IN") Foo foo) {
31 @LOC("M") Foo lowerFoo = foo; // allowed to lower
33 // create a temp var to walk the subtree
34 @LOC("L") Bar tempVar = lowerFoo.bar1;
39 public void changeLocationTest(@DELEGATE @LOC("IN") Foo foo) {
41 // local variable refers to the sub object the foo
42 @LOC("M") Bar tempVar = foo.bar1;
44 // ERROR: not allowed to lower if there is a local var alias to the subtree
46 // @LOC("M") Foo lowerFoo = foo;
50 public void doDelegationTest2() {
52 @LOC("H") Foo ownedFoo = new Foo();
53 notDelegate(ownedFoo);
57 public Foo notDelegate(@LOC("IN") Foo notownedFoo) {
59 // ERROR: not allowed to lower
60 // @LOC("M") Foo lowerFoo = notownedFoo;
62 // ERROR: now allowed to return not-owned-ref
69 @LATTICE("L<M,M<H,H<C,C*,M*")
80 @LATTICE("L<M,M<H,H<C,C*,M*")