t_retrec.mod 903 B

12345678910111213141516171819202122232425262728293031
  1. MODULE TRetRec;
  2. (* Composite function results: a record/array result, a record result
  3. passed as a value argument, and a field of a call result. Exit 42. *)
  4. VAR ExitCode, got : INTEGER;
  5. TYPE
  6. Rec = RECORD a, b : INTEGER END;
  7. Arr = ARRAY [0..3] OF INTEGER;
  8. VAR r : Rec; a : Arr;
  9. PROCEDURE MkRec (x : INTEGER) : Rec;
  10. VAR q : Rec;
  11. BEGIN q.a := x; q.b := x + 1; RETURN q END MkRec;
  12. PROCEDURE MkArr (x : INTEGER) : Arr;
  13. VAR q : Arr; i : CARDINAL;
  14. BEGIN i := 0; WHILE i < 4 DO q[i] := x + i; INC(i) END; RETURN q END MkArr;
  15. PROCEDURE Sum (q : Rec) : INTEGER;
  16. BEGIN RETURN q.a + q.b END Sum;
  17. BEGIN
  18. got := 0;
  19. IF Sum(MkRec(20)) = 41 THEN INC(got) END;
  20. r := MkRec(10);
  21. IF (r.a = 10) AND (r.b = 11) THEN INC(got) END;
  22. a := MkArr(5);
  23. IF (a[0] = 5) AND (a[3] = 8) THEN INC(got) END;
  24. IF MkRec(7).b = 8 THEN INC(got) END;
  25. IF got = 4 THEN ExitCode := 42 ELSE ExitCode := got END
  26. END TRetRec.