1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
type C;
procedure P(x:int, y:bool) returns (z:C);
procedure Q<a>(x:int, y:a) returns (z:a);
procedure CallP() {
var x:int;
var y:bool;
var z:C;
call z := P(x, y);
call * := P(x, y);
call z := P(*, y);
call z := P(x, *);
call * := P(*, y);
call * := P(x, *);
call z := P(*, *);
call * := P(*, *);
}
procedure CallQ() {
var x:int;
var y:bool;
var z:bool;
call z := Q(x, y);
call * := Q(x, y);
call z := Q(*, y);
call z := Q(x, *);
call * := Q(*, y);
call * := Q(x, *); // problem: type parameter cannot be inferred
call * := Q(*, *); // problem: type parameter cannot be inferred
}
|