| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- MODULE TExceptLib;
- (* M3: EXCEPTIONS / M2EXCEPTION over user RAISE and SYSTEM.THROW. *)
- FROM EXCEPTIONS IMPORT
- ExceptionSource, ExceptionNumber, AllocateSource, RAISE,
- CurrentNumber, GetMessage, IsCurrentSource, IsExceptionalExecution;
- FROM M2EXCEPTION IMPORT
- M2Exception, IsM2Exception, wholeDivException, exException;
- FROM SYSTEM IMPORT THROW;
- VAR ExitCode : INTEGER;
- VAR src : ExceptionSource;
- VAR other : ExceptionSource;
- VAR msg : ARRAY [0..63] OF CHAR;
- VAR n : ExceptionNumber;
- PROCEDURE UserRaise;
- BEGIN
- RAISE(src, 7, "boom");
- ExitCode := 1
- EXCEPT
- IF IsExceptionalExecution() AND IsCurrentSource(src)
- AND NOT IsCurrentSource(other)
- AND NOT IsM2Exception() AND (CurrentNumber(src) = 7) THEN
- GetMessage(msg);
- IF msg = "boom" THEN ExitCode := 42 ELSE ExitCode := 2 END
- ELSE
- ExitCode := 3
- END
- END UserRaise;
- PROCEDURE AskWrongSource;
- BEGIN
- n := CurrentNumber(other);
- ExitCode := 1
- EXCEPT
- IF IsM2Exception() AND (M2Exception() = exException) THEN
- ExitCode := 42
- ELSE
- ExitCode := 6
- END
- END AskWrongSource;
- PROCEDURE LanguageRaise;
- BEGIN
- THROW(6)
- EXCEPT
- IF IsM2Exception() AND (M2Exception() = wholeDivException) THEN
- ExitCode := 42
- ELSE
- ExitCode := 4
- END
- END LanguageRaise;
- BEGIN
- AllocateSource(src);
- AllocateSource(other);
- ExitCode := 0;
- UserRaise;
- IF ExitCode = 42 THEN
- GetMessage(msg);
- IF msg = "" THEN ExitCode := 0 ELSE ExitCode := 5 END
- END;
- IF ExitCode = 0 THEN AskWrongSource END;
- IF ExitCode = 42 THEN LanguageRaise END
- END TExceptLib.
|