t_cstring.mod 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. MODULE TCString;
  2. (* C string boundary regression: an ARRAY OF CHAR actual must arrive at
  3. a foreign C procedure as a NUL-terminated char *, not as the V3
  4. descriptor address. Expected exit code: 42.
  5. This test is intentionally pending until the external-call boundary
  6. conversion lands; it is not yet wired into run_tests.sh. *)
  7. PROCEDURE m2_c_strlen (s : ARRAY OF CHAR) : CARDINAL; EXTERNAL;
  8. PROCEDURE m2_c_fill (VAR buf : ARRAY OF CHAR;
  9. cap : CARDINAL; ch : CHAR) : CARDINAL; EXTERNAL;
  10. VAR
  11. ExitCode : INTEGER;
  12. fixed : ARRAY [0..7] OF CHAR;
  13. out : ARRAY [0..7] OF CHAR;
  14. n : CARDINAL;
  15. PROCEDURE open_len (s : ARRAY OF CHAR) : CARDINAL;
  16. BEGIN
  17. RETURN m2_c_strlen(s)
  18. END open_len;
  19. BEGIN
  20. fixed := "hello";
  21. n := m2_c_fill(out, 8, 'x');
  22. IF (m2_c_strlen("hello") = 5)
  23. AND (m2_c_strlen(fixed) = 5)
  24. AND (open_len("world") = 5)
  25. AND (n = 7)
  26. AND (out[0] = 'x')
  27. AND (out[6] = 'x')
  28. AND (out[7] = CHR(0)) THEN
  29. ExitCode := 42
  30. ELSE
  31. ExitCode := 1
  32. END
  33. END TCString.