36 lines
745 B
Plaintext
36 lines
745 B
Plaintext
type rec: [integer: x; integer: y]
|
||
|
||
type T1: integer -> integer
|
||
type T2: rec -> integer
|
||
type arr: 1 -> integer
|
||
|
||
type main: string -> integer
|
||
function entry: main
|
||
function foo: T1
|
||
function bar1: T2
|
||
function bar2: T2
|
||
|
||
foo (x) := {
|
||
return x * x;
|
||
}
|
||
|
||
bar1 (x, y) := {
|
||
return x * y;
|
||
}
|
||
|
||
bar2 (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;
|
||
ressult := 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;
|
||
}
|
||
|