| 12345678910111213141516171819202122232425262728293031 |
- MODULE TRetRec;
- (* Composite function results: a record/array result, a record result
- passed as a value argument, and a field of a call result. Exit 42. *)
- VAR ExitCode, got : INTEGER;
- TYPE
- Rec = RECORD a, b : INTEGER END;
- Arr = ARRAY [0..3] OF INTEGER;
- VAR r : Rec; a : Arr;
- PROCEDURE MkRec (x : INTEGER) : Rec;
- VAR q : Rec;
- BEGIN q.a := x; q.b := x + 1; RETURN q END MkRec;
- PROCEDURE MkArr (x : INTEGER) : Arr;
- VAR q : Arr; i : CARDINAL;
- BEGIN i := 0; WHILE i < 4 DO q[i] := x + i; INC(i) END; RETURN q END MkArr;
- PROCEDURE Sum (q : Rec) : INTEGER;
- BEGIN RETURN q.a + q.b END Sum;
- BEGIN
- got := 0;
- IF Sum(MkRec(20)) = 41 THEN INC(got) END;
- r := MkRec(10);
- IF (r.a = 10) AND (r.b = 11) THEN INC(got) END;
- a := MkArr(5);
- IF (a[0] = 5) AND (a[3] = 8) THEN INC(got) END;
- IF MkRec(7).b = 8 THEN INC(got) END;
- IF got = 4 THEN ExitCode := 42 ELSE ExitCode := got END
- END TRetRec.
|