Спасибо Илья! Посмотрел, получил что требовалось, вот пример: MODULE T_Trap; (* sia *) IMPORT StdLog, Kernel; VAR res, err: INTEGER;
PROCEDURE trapChk(); BEGIN err := Kernel.err END trapChk;
PROCEDURE trapView(); BEGIN END trapView;
PROCEDURE TestAssert(a, b, c: INTEGER); BEGIN res := 0; err := 0; IF a = 21 THEN ASSERT(a = 0, 21); res := 21 ELSIF a = 41 THEN ASSERT(a = 0, 42); res := 42 ELSE res := 99 END; INC(res, 100); END TestAssert;
PROCEDURE Do*; VAR a, b, c: INTEGER; BEGIN Kernel.SetTrapGuard(FALSE); Kernel.InstallTrapViewer(trapView); Kernel.InstallTrapChecker(trapChk);
Kernel.Try( TestAssert, 21, 0, 0); StdLog.String("21 ? res, err = "); StdLog.Int(res); StdLog.Int(err); StdLog.Bool(err = 21); StdLog.Ln();
Kernel.Try( TestAssert, 41, 0, 0); StdLog.String("41 ? res, err = "); StdLog.Int(res); StdLog.Int(err); StdLog.Bool(err = 41); StdLog.Ln();
Kernel.Try( TestAssert, 99, 0, 0); StdLog.String("0 ? res, err = "); StdLog.Int(res); StdLog.Int(err); StdLog.Bool(err = 0); StdLog.Ln();
END Do; END T_Trap.
T_Trap.Do;
(* Log: 21 ? res, err = 0 21 $TRUE 41 ? res, err = 0 42 $FALSE 0 ? res, err = 199 0 $TRUE *)
|