Method scheduling handles recursion and dependency.
[IRC.git] / Robust / src / Tests / OwnershipAnalysisTest / test01 / test01.java
1 public class Parameter {
2     flag w;
3     int a, b;
4     Parameter f, g;
5     public Parameter() {
6         a = 0; b = 0; f = null; g = null;
7     }
8
9     public void bar() { foo(); }
10     public void foo() { bar(); }
11 }
12
13 task Startup( StartupObject s{ initialstate } ) {
14
15     Parameter p = new Parameter(){!w};
16     p.foo();
17
18     taskexit( s{ !initialstate } );
19 }
20
21 /*
22 task aliasFromObjectAssignment
23     ( Parameter p1{!w}, Parameter p2{!w} ) {
24     
25     p1.f = p2.g;
26
27     taskexit( p1{w}, p2{w} );
28 }
29
30 task noAliasFromPrimitiveAssignment
31     ( Parameter p1{!w}, Parameter p2{!w} ) {
32     
33     p1.a = p2.b;
34
35     taskexit( p1{w}, p2{w} );
36 }
37
38 task aliasWithTwoLinks
39     ( Parameter p1{!w}, Parameter p2{!w} ) {
40     
41     Parameter j = p1.f;
42     p2.f = j;
43
44     taskexit( p1{w}, p2{w} );
45 }
46
47 task aliasWithThreeLinks
48     ( Parameter p1{!w}, Parameter p2{!w} ) {
49     
50     Parameter j = p1.f;
51     Parameter k = j;
52     p2.f = k;
53
54     taskexit( p1{w}, p2{w} );
55 }
56
57 task noAliasBreakLinks
58     ( Parameter p1{!w}, Parameter p2{!w} ) {
59     
60     Parameter j = p1.f;
61     Parameter k = j;
62     k = p2.f;
63     p2.f = k;
64
65     taskexit( p1{w}, p2{w} );
66 }
67
68 task possibleAliasConditional
69     ( Parameter p1{!w}, Parameter p2{!w} ) {
70     
71     Parameter y;
72
73     if( p1.a == 0 ) {
74         y = p1.f;
75     } else {
76         y = p2.f;
77     }
78
79     p2.g = y;
80
81     taskexit( p1{w}, p2{w} );
82 }
83
84 task bunchOfPaths
85     ( Parameter p1{!w}, Parameter p2{!w} ) {
86
87     Parameter y;
88
89     for( int i =0; i < 100; ++i ) {
90
91         if( y == p1 ) {
92             Parameter z;
93
94             for( int j = 0; i < 50; ++j ) {
95                 if( z == y ) {
96                     p1.f = y;
97                 } else {
98                     z = p2.g;
99                 }
100
101                 p1.f = z;
102             }
103
104             y = p1.g;
105         } else {
106
107             p2.f = y;
108         }
109     }
110
111     p1.f = p2.g;
112
113
114     taskexit( p1{w}, p2{w} );
115 }
116
117 task literalTest( Parameter p1{!w} ) {
118     Parameter x = null;
119     int y = 5;
120     String s = "Dude";
121
122     taskexit( p1{w} );
123 }
124 */
125
126 /*
127 task newNoAlias
128     ( Parameter p1{!w}, Parameter p2{!w} ) {
129
130     for( int i = 0; i < 1; ++i ) {
131         p1.f = new Parameter();
132     }
133
134     taskexit( p1{w}, p2{w} );
135 }
136
137 task newPossibleAlias
138     ( Parameter p1{!w}, Parameter p2{!w} ) {
139
140     Parameter x, y;
141
142     for( int i = 0; i < 1; ++i ) {
143         p1.f = new Parameter();
144         if( true ) {
145             x = p1.f;
146         } else {
147             y = p1.f;
148         }
149     }
150
151     p2.f = y;
152
153     taskexit( p1{w}, p2{w} );
154 }
155 */