| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- MODULE TExceptTrap;
- (* M4: compiler-emitted index and subrange traps are catchable language
- exceptions with the right M2EXCEPTION values. *)
- FROM M2EXCEPTION IMPORT
- M2Exception, IsM2Exception, indexException, rangeException;
- TYPE
- Small = [0..7];
- VAR ExitCode : INTEGER;
- VAR a : ARRAY [0..2] OF INTEGER;
- VAR s : Small;
- VAR i : INTEGER;
- PROCEDURE IndexTrap;
- BEGIN
- i := 3;
- a[i] := 1;
- ExitCode := 1
- EXCEPT
- IF IsM2Exception() AND (M2Exception() = indexException) THEN
- ExitCode := 2
- ELSE
- ExitCode := 3
- END
- END IndexTrap;
- PROCEDURE RangeTrap;
- BEGIN
- i := 9;
- s := i;
- ExitCode := 4
- EXCEPT
- IF IsM2Exception() AND (M2Exception() = rangeException) THEN
- ExitCode := 42
- ELSE
- ExitCode := 5
- END
- END RangeTrap;
- BEGIN
- ExitCode := 0;
- IndexTrap;
- IF ExitCode = 2 THEN RangeTrap END
- END TExceptTrap.
|