t_except_trap.mod 834 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. MODULE TExceptTrap;
  2. (* M4: compiler-emitted index and subrange traps are catchable language
  3. exceptions with the right M2EXCEPTION values. *)
  4. FROM M2EXCEPTION IMPORT
  5. M2Exception, IsM2Exception, indexException, rangeException;
  6. TYPE
  7. Small = [0..7];
  8. VAR ExitCode : INTEGER;
  9. VAR a : ARRAY [0..2] OF INTEGER;
  10. VAR s : Small;
  11. VAR i : INTEGER;
  12. PROCEDURE IndexTrap;
  13. BEGIN
  14. i := 3;
  15. a[i] := 1;
  16. ExitCode := 1
  17. EXCEPT
  18. IF IsM2Exception() AND (M2Exception() = indexException) THEN
  19. ExitCode := 2
  20. ELSE
  21. ExitCode := 3
  22. END
  23. END IndexTrap;
  24. PROCEDURE RangeTrap;
  25. BEGIN
  26. i := 9;
  27. s := i;
  28. ExitCode := 4
  29. EXCEPT
  30. IF IsM2Exception() AND (M2Exception() = rangeException) THEN
  31. ExitCode := 42
  32. ELSE
  33. ExitCode := 5
  34. END
  35. END RangeTrap;
  36. BEGIN
  37. ExitCode := 0;
  38. IndexTrap;
  39. IF ExitCode = 2 THEN RangeTrap END
  40. END TExceptTrap.