30 lines
827 B
Plaintext
30 lines
827 B
Plaintext
(* TEST: [-tok] *)
|
||
type rec: [integer: x; integer: y]
|
||
type T1: integer -> integer
|
||
type T2: rec -> integer
|
||
function foo : T1
|
||
function bar1 : T2
|
||
function bar2 : T2
|
||
foo(x) := {
|
||
return x * x;
|
||
}
|
||
bar1(a) := {
|
||
return a.x * a.y;
|
||
}
|
||
bar2 as (r,s) := {
|
||
return r * s;
|
||
}
|
||
entry(arg) := {
|
||
[ integer: result ; rec: w]
|
||
result := foo(5);
|
||
w := reserve(w); (* see types.alpha – reserve returns a value of type address,
|
||
which can be assigned to array and record variables
|
||
*)
|
||
w.x := 5;
|
||
w.y := 7;
|
||
result := bar1(w); (* pass w (a rec type value) to bar1 *)
|
||
result := bar2(5,7); (* implicitly build a rec type value, assign 5 and 7 to fields x and y, but call them r and s *)
|
||
|
||
return 0;
|
||
}
|