Forums » Programming with the ECS » Oberon »
exception handling
Added by Sergey Durmanov 12 months ago
Let's say we have exceptions E1 and E2 and a procedure P that raises them.
We register the exceptions and call procedure P.
VAR e1: E1; e2: E2; IF e1.Try() & e2.Try() THEN P(); ELSE ??? END;
1) How do we know which exception was raised? E1 or E2?
2) What happens if we forget to call e1.End, e2.End?
3) Does the order of calling End matter? (e1.End, e2.End) мы (e2.Endб e1.End)
Replies (1)
RE: exception handling - Added by Florian Negele 12 months ago
- Several exceptions should be registered using nested
IFstatements:IF e1.Try() THEN IF e2.Try() THEN P; e2.End; ELSE (* handle e2 *) ENDIF e1.End; ELSE (* handle e1 *) ENDIF - When registering an exception, it is pushed onto a stack of registered exceptions. The
Endprocedure pops the most current exception. If you forget to call this procedure, the stack becomes invalid. - Yes, the order matters as only the most current exception is removed from the stack. Raising an exception automatically pops exceptions from the stack until an appropriate match is found.