t_record_multidim.mod 878 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. MODULE TRecordMultiDim;
  2. (* M5: rank-2 array field stored as an inline flat payload with a
  3. synthesized view; record arrays, local records, ADR/SIZE and calls. *)
  4. FROM SYSTEM IMPORT ADDRESS, ADR;
  5. TYPE
  6. Grid = ARRAY [0..1], [0..2] OF INTEGER;
  7. Rec = RECORD
  8. tag : INTEGER;
  9. grid : Grid
  10. END;
  11. VAR ExitCode : INTEGER;
  12. r : Rec;
  13. ra : ARRAY [0..1] OF Rec;
  14. PROCEDURE Fill (VAR a : ARRAY OF ARRAY OF INTEGER);
  15. BEGIN
  16. a[1, 2] := 42
  17. END Fill;
  18. PROCEDURE Local;
  19. VAR x : Rec;
  20. BEGIN
  21. x.grid[0, 1] := 7;
  22. IF x.grid[0, 1] # 7 THEN ExitCode := 3 END
  23. END Local;
  24. BEGIN
  25. r.grid[0, 1] := 7;
  26. Fill(r.grid);
  27. Fill(ra[1].grid);
  28. Local;
  29. IF (r.grid[1, 2] # 42) OR (ra[1].grid[1, 2] # 42) THEN
  30. ExitCode := 1
  31. ELSIF SIZE(r.grid) # 24 THEN
  32. ExitCode := 2
  33. ELSIF ADR(r.grid) # ADR(r.grid[0]) THEN
  34. ExitCode := 4
  35. ELSE
  36. ExitCode := 42
  37. END
  38. END TRecordMultiDim.