t_arrrecfld.mod 928 B

123456789101112131415161718192021222324252627282930313233343536
  1. MODULE TArrRecFld;
  2. (* Regression for docs/wip/arrrec-field-openarray.mod: an array field of
  3. an array-of-record element passed as an open-array actual. The field's
  4. inline descriptor length word must be initialised in the static
  5. array-of-record data, else the callee reads 0 and traps. Exit 42. *)
  6. VAR ExitCode : INTEGER;
  7. TYPE
  8. ProcEnt = RECORD
  9. name : ARRAY [0..63] OF CHAR;
  10. END;
  11. VAR
  12. procs : ARRAY [0..3] OF ProcEnt;
  13. nProcs : CARDINAL;
  14. PROCEDURE CopyN (src : ARRAY OF CHAR; VAR dst : ARRAY OF CHAR);
  15. VAR i : CARDINAL;
  16. BEGIN
  17. i := 0;
  18. WHILE (i < 63) AND (src[i] # CHR(0)) DO dst[i] := src[i]; INC(i) END;
  19. dst[i] := CHR(0)
  20. END CopyN;
  21. PROCEDURE NoteProc (name : ARRAY OF CHAR);
  22. BEGIN
  23. CopyN(name, procs[nProcs].name);
  24. INC(nProcs)
  25. END NoteProc;
  26. BEGIN
  27. NoteProc("hello");
  28. IF (procs[0].name[0] = "h") AND (procs[0].name[4] = "o") THEN
  29. ExitCode := 42
  30. ELSE ExitCode := 1
  31. END
  32. END TArrRecFld.