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.