Added upstream from http://ftp.icm.edu.pl/pub/loglan/
[loglan.git] / HTML / MicroMan / Exceptio.htm
1 <!doctype html public "-//IETF//DTD HTML//EN">\r
2 <HTML>\r
3 \r
4 <HEAD>\r
5 \r
6 <TITLE>Exception handling</TITLE>\r
7 \r
8 <META NAME="GENERATOR" CONTENT="Internet Assistant for Word 1.0Z">\r
9 <META NAME="AUTHOR" CONTENT="NOM">\r
10 </HEAD>\r
11 \r
12 <BODY>\r
13 \r
14 <P>\r
15 <U><I>Loglan 82, A micro-manual of the programming language -\r
16 Basic constructs and facilities</I></U>\r
17 <H1><IMG ALIGN=MIDDLE SRC="gifs/logo2.gif"> 12) Exception handling\r
18 </H1>\r
19 <HR>\r
20 \r
21 <P>\r
22 Exceptions are events that cause interruption of normal program\r
23 execution. One kind of exceptions are those which are raised as\r
24 a result of some run time errors. For instance, when an attempt\r
25 is made to access a killed object, when the result of numeric\r
26 operation does not lie within the range, when the dynamic storage\r
27 allocated to a program is exceeded etc.\r
28 <P>\r
29 Another kind of exceptions are those which are raised explicitly\r
30 by a user (with the execution of the raise statement).\r
31 <P>\r
32 The response to exceptions (one or more) is defined by an exception\r
33 handler. A handler may appear at the end of declarations of any\r
34 unit. The corresponding actions are defined as sequences of statements\r
35 preceded by keyword when and an exception identifier.\r
36 <P>\r
37 Example:\r
38 <P>\r
39 In procedure squareeq (p.3) we wish to include the case when a=0.\r
40 It may be treated as an exception (division by zero).\r
41 <P>\r
42 <IMG SRC="gifs/eh01.gif"> \r
43 <P>\r
44 The handler declared in that procedure handles the only one exception\r
45 (division_by_zero).\r
46 <P>\r
47 When an exception is raised, the corresponding handler is searched\r
48 for, starting from the active object and going through return\r
49 traces. If there is no object containing the declaration of the\r
50 handler, then the program (or the corresponding process) is terminated.\r
51 Otherwise the control is transferred to the first found handler.\r
52 <P>\r
53 In our example the handler is declared within the unit itself,\r
54 so control is passed to a sequence:\r
55 <P>\r
56 <IMG SRC="gifs/eh02.gif"> \r
57 <P>\r
58 Therefore, when b=/=0, the unique root of square equation will\r
59 be determined and the procedure will be normally terminated (terminate).\r
60 In general, terminate causes that all the objects are terminated,\r
61 starting from that one where the exception was raised and ending\r
62 on that one where the handler was found. Then the computation\r
63 is continued in a normal way.\r
64 <P>\r
65 In our example, when b=0, a new exception is raised by the user.\r
66 For this kind of exceptions , the exception itself should be declared\r
67 (because it is not predefined as a run time error). Its declaration\r
68 may have parameters which are transmitted to a handler. The exception\r
69 declaration need not be visible by the exception handler. However\r
70 the way the handler is searched for does not differ from the standard\r
71 one. Consider an example:\r
72 <P>\r
73 <IMG SRC="gifs/eh03.gif"> \r
74 <P>\r
75 Exception Wrong_data may be raised wherever its declaration (signal\r
76 Wrong_data) is visible. When its handler is found the specified\r
77 sequence of actions is performed. In the example above different\r
78 handlers may be 0efined in inner units to the main block where\r
79 squereeq is called.\r
80 <P>\r
81 The case a=0 could be included, of course, in a normal way, i.e.\r
82 by a corresponding conditional statement occurring in the procedure\r
83 body. But the case a=0 was assumed to be exceptional (happens\r
84 scarcely). Thus the evaluation of condition a=0 would be mostly\r
85 unnecessary. As can be noticed thanks to exceptions the above\r
86 problem can be solved with the minimal waste of run time. <HR>\r
87 \r
88 <hr><P>\r
89 <A HREF="Programm.htm"><IMG SRC="gifs/PrevPage.gif"></A>\r
90 <A HREF="HomePage.htm"><IMG SRC="gifs/HomePage.gif"></A> \r
91 <A HREF="Concurre.htm"><IMG SRC="gifs/NextPage.gif"></A> <HR>\r
92 \r
93 <ADDRESS>\r
94 Last update 02/07/95 \r
95 </ADDRESS>\r
96 \r
97 <ADDRESS>\r
98 Comments, suggestions and critiques are welcome to : <A HREF="mailto:linfo062@crisv2.univ-pau.fr">linfo062@crisv2.univ-pau.fr</A>\r
99 \r
100 </ADDRESS>\r
101 \r
102 </BODY>\r
103 \r
104 </HTML>\r