%! % This is the prolog used by OzTeX 1.42 to convert a DVI file into PostScript. % Set dev to "LW" if LaserWriter, "LINO" if Linotronic, or "?" if unknown: /dev (?) def statusdict /product known { statusdict /product get (LaserWriter) anchorsearch { pop pop /dev (LW) def } { pop } ifelse statusdict /product get (Linotype) anchorsearch { pop pop /dev (LINO) def } { pop } ifelse } if % OzTeX calls @setup with the following parameters: % resolution (integer), landscape (boolean), horizontal and vertical offsets % (integers that are used to position the TeX origin correctly). /@setup { % set up OzTeX's coordinate system /voff exch def /hoff exch def /land exch def /res exch def /oshift -10.7 def % shift for TeX origin; % assumes A4 paper height (-11.7in + 1in); % you may want to change to -10.0 for US Letter paper dev (?) eq % unknown device? { land { % landscape 90 rotate % rotate axes 90deg anticlockwise 72 res div dup neg scale % units now device dots res dup translate % move to TeX origin voff neg hoff translate % adjust TeX origin if necessary } { % portrait 72 res div dup neg scale % units now device dots res oshift res mul translate % move to TeX origin hoff voff translate % adjust TeX origin if necessary } ifelse } if dev (LW) eq % LaserWriter? { % Display model and version in OzTeX window: % (\rmodel = ) print statusdict /product get print % (\rversion = ) print version print (\r) print flush land { % landscape 90 rotate % rotate axes 90deg anticlockwise 72 res div dup neg scale % units now device dots res dup translate % move to TeX origin voff neg hoff translate % adjust TeX origin if necessary % Model-specific adjustments to origin can be made here: statusdict /product get (LaserWriter) eq { -90 0 translate % move left a bit } { statusdict /product get (LaserWriter Plus) eq { -32 0 translate % move left a bit } { statusdict /product get (LaserWriter II NTX) eq { -20 0 translate % move left a bit } { statusdict /product get (LaserWriter IIg) eq { 0 0 translate } { % some other model 0 0 translate } ifelse } ifelse } ifelse } ifelse } { % portrait 72 res div dup neg scale % units now device dots res oshift res mul translate % move to TeX origin hoff voff translate % adjust TeX origin if necessary % Model-specific adjustments to origin can be made here: statusdict /product get (LaserWriter) eq { 0 22 translate % move down a bit } { statusdict /product get (LaserWriter Plus) eq { 0 0 translate } { statusdict /product get (LaserWriter II NTX) eq { 0 14 translate % move down a bit } { statusdict /product get (LaserWriter IIg) eq { 0 0 translate } { % some other model 0 0 translate } ifelse } ifelse } ifelse } ifelse } ifelse % The matrix produced above can cause scaling problems, % so round each matrix value to nearest integer and use setmatrix: matrix currentmatrix dup dup 0 get round cvi 0 exch put dup dup 1 get round cvi 1 exch put dup dup 2 get round cvi 2 exch put dup dup 3 get round cvi 3 exch put dup dup 4 get round cvi 4 exch put dup dup 5 get round cvi 5 exch put setmatrix % Display new matrix in OzTeX window: % matrix currentmatrix % dup 0 get ( ) cvs print ( ) print % dup 1 get ( ) cvs print ( ) print % dup 2 get ( ) cvs print ( ) print % dup 3 get ( ) cvs print ( ) print % dup 4 get ( ) cvs print ( ) print % dup 5 get ( ) cvs print (\r) print flush % pop } if dev (LINO) eq % Linotronic? { land { % landscape 90 rotate % rotate axes 90deg anticlockwise 72 res div dup neg scale % units now device dots res dup translate % move to TeX origin voff neg hoff translate % adjust TeX origin if necessary } { % portrait newpath clippath pathbbox % push LLx LLy URx URy (URy = ht in pts) /paperht exch 72 div def % paper height in inches pop pop pop % remove URx LLy LLx 72 res div dup neg scale % units now device dots res paperht res mul neg res add translate % move to TeX origin hoff voff translate % adjust TeX origin if necessary } ifelse } if % Some fine-tuning of the code used to draw a rule is necessary. % Use page 18 in nasty.dvi to check results: dev (LW) eq % LaserWriter? { version cvr 38.0 le % early model? { land { % landscape /r % set a wd by ht rule at h,v { newpath moveto % move to h,v /ht exch 1 sub def % reduce height by 1 /wd exch 1 sub def % ditto for width wd 0 rlineto 0 ht neg rlineto wd neg 0 rlineto fill } bind def } { % portrait /r % set a wd by ht rule at h,v { newpath 1 add moveto % move to h,v+1 /ht exch 1 sub def % reduce height by 1 /wd exch 1 sub def % ditto for width wd 0 rlineto 0 ht neg rlineto wd neg 0 rlineto fill } bind def } ifelse } if version cvr 2000.0 gt % IIg or newer model? { /r % set a wd by ht rule at h,v { newpath 1 add moveto % move to h,v+1 /ht exch def % set height /wd exch def % set width wd 0 rlineto 0 ht neg rlineto wd neg 0 rlineto fill } bind def } if } if /mtrx 6 array def mtrx currentmatrix pop % save our new transformation matrix } def % end of @setup % @saveVM and @restoreVM are only used if we are conserving VM % by downloading font bitmaps more often: /@saveVM {/prefontVM save def} def /@restoreVM {prefontVM restore} def /@newfont % create new font dict { /maxchcode exch def /fontid exch def fontid 7 dict def fontid load begin /FontType 3 def /FontMatrix [1 0 0 -1 0 0] def % -1 because y scale is negative /FontBBox [0 0 1 1] def /BitMaps maxchcode 1 add array def /BuildChar {CharBuilder} def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for % The above 2 lines fix a definefont error that occurs on some printers % (eg. the LaserWriter NTX-J). If you have an old LaserWriter and % now get VM errors then you might want to revert to the old code: % % /Encoding maxchcode 1 add array def % 0 1 maxchcode {Encoding exch /.notdef put} for end fontid fontid load definefont pop } def % The char data, a bitmap descriptor, is an array with 6 elements: /ch-image {ch-data 0 get} def % the hex string image /ch-width {ch-data 1 get} def % the number of pixels across /ch-height {ch-data 2 get} def % the number of pixels tall /ch-xoff {ch-data 3 get} def % number of pixels to left of origin /ch-yoff {ch-data 4 get} def % number of pixels below origin /ch-advw {ch-data 5 get} def % advance width % The following character builder looks up the char data in the BitMaps array % and paints the character: /CharBuilder % image one char { /ch-code exch def % save the char code /font-dict exch def % and the font dict /ch-data font-dict /BitMaps get ch-code get def ch-advw 0 ch-xoff neg ch-height ch-yoff sub 1 sub neg % -xo , -(ht-yo-1) ch-width ch-xoff sub 1 sub ch-yoff % (wd-xo-1) , yo setcachedevice ch-width ch-height true [1 0 0 -1 ch-xoff ch-yoff] % bitmap sent top to bottom {ch-image} imagemask } def /sf {setfont} def % set current font /dc % define new character { /ch-code exch def /ch-data exch def % The following code should be enabled if you have an old LaserWriter. % It attempts to overcome a bug that causes the printer to crash % and print a test page rather then report a VMerror. % % vmstatus % returns: savelevel vmused vmmax % 10000 sub gt % is vmused > (vmmax-10000)? % { pop VMERROR } % causes error message (avoiding crash) % { pop } % pop savelevel % ifelse currentfont /BitMaps get ch-code ch-data put currentfont /Encoding get ch-code dup ( ) cvs cvn put % generate unique name } bind def /@bop0 {pop} def % begin DVI page n /@bop1 % begin setting DVI page n { pop % throw away page number initgraphics % start with a clean slate mtrx setmatrix % switch to our TeX coordinate system /prepageVM save def % save state of VM at start of page } def /@eop % end DVI page n { pop % throw away page number prepageVM restore % restore VM to state at start of page showpage } def /@end { } def % end of file % h and s are used to typeset downloaded bitmap fonts: /h {exch 0 rmoveto show} bind def % move right by dh and show (...) /s {3 1 roll moveto show} bind def % move to h,v and show (...) % H and S are used to typeset resident PostScript fonts. % We can't use relative horizontal positioning because the advance widths in % a PostScript font are not integers and rounding errors would accumulate: /H {exch v moveto show} bind def % move to h,v and show (...) /S % ditto, and save v position { 3 1 roll 1 add % v+1 to match baseline of bitmap fonts dup /v exch def moveto show } bind def % r is used to typeset a rule: /r % set a wd by ht rule at h,v { newpath moveto % move to h,v /ht exch 1 sub def % reduce height by 1 /wd exch 1 sub def % ditto for width wd 0 rlineto 0 ht neg rlineto wd neg 0 rlineto fill } bind def % Following procedures are invoked as the result of \special{file}. % We change all scaling and graphics back to defaults, but shift the origin % to the current position on the page: /@bsp { /vmag exch def % vertical scaling /hmag exch def % horizontal scaling moveto % move to h,v gsave /prespecialVM save def % save showpage, TeX procedures etc. currentpoint transform initgraphics itransform translate hmag vmag scale land { 90 rotate } if % rotate axes if landscape /showpage { } def % user does not have to remove showpage } bind def /@esp { prespecialVM restore % restore saved showpage value etc. grestore } bind def % Following procedures are invoked as the result of \special{epsf=file}. % Note that @bepsf and @eepsf are currently identical to @bsp and @esp % but it is a good idea to allow for future changes: /@bepsf { /vmag exch def % vertical scaling /hmag exch def % horizontal scaling moveto % move to h,v gsave /prespecialVM save def % save showpage, TeX procedures etc. currentpoint transform initgraphics itransform translate hmag vmag scale land { 90 rotate } if % rotate axes if landscape /showpage { } def % user does not have to remove showpage } bind def /@eepsf { prespecialVM restore % restore saved showpage value etc. grestore } bind def % Here is the code to handle bitmaps generated by PICT/PNTG \specials: /@bitmap { /vmag exch def % vertical scaling /hmag exch def % horizontal scaling /vres exch def % vertical resolution of bitmap /hres exch def % horizontal resolution of bitmap /ht exch def % height /wd exch def % width /hexstring ht string def gsave 1 add translate % set origin to h,v+1 res hres div wd mul hmag mul res vres div ht mul vmag mul neg scale wd ht true [ wd 0 0 ht neg 0 ht ] { currentfile hexstring readhexstring pop } imagemask grestore } def % Here are the definitions needed to handle resident PostScript fonts: /sp % scaled pts to device dots { 16#10000 div % scaled pts to pts res mul 72.27 div % pts to device dots } bind def /PSfont % uses dot size and TFM name { dup /Times-Slanted eq {pop /Times-Roman findfont [1 0 .268 -1 0 0] makefont exch scalefont setfont} {findfont [1 0 0 -1 0 0] makefont exch scalefont setfont} ifelse } bind def % count 0 gt % { (\r *** Bug in DVItoPS.ps: stuff left on stack *** \r) print flush % } if % End of OzTeX's prolog. 300 false 0 0 @setup 1 @bop0 /cmbx10.622 127 @newfont /cmbx10.432 127 @newfont /cmr10.300 127 @newfont cmr10.300 sf [<030007003F00C700070007000700070007000700070007000700070007000700070007 00070007000700070007000700070007000F80FFF8> 16 28 -4 27 21] 49 dc cmbx10.622 sf [ 64 59 -4 58 65] 69 dc [ 48 38 -2 37 52] 120 dc [<0000FFF000000FFFFF00003FFFFFC000FFC03FE001FF003FF007FE007FF00FFC007FF0 0FF8007FF01FF8007FF03FF0007FF03FF0003FE07FF0001FC07FE00007007FE0000000FF E0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0 000000FFE0000000FFE00000007FE00000007FF00000007FF00000003FF00000003FF800 00781FF80000780FFC0000F80FFE0001F007FF0003E001FF8007C000FFE01F80003FFFFF 00000FFFFC000000FFC000> 40 38 -3 37 44] 99 dc [<0001FFC000000FFFF800003FFFFE0000FF80FF0001FE003F8007FC001FC00FF8000FE0 0FF8000FF01FF00007F03FF00007F83FF00007F87FE00007F87FE00003FC7FE00003FC7F E00003FCFFE00003FCFFFFFFFFFCFFFFFFFFFCFFFFFFFFFCFFE0000000FFE0000000FFE0 000000FFE00000007FE00000007FE00000007FE00000003FE00000003FF000003C1FF000 003C1FF000003C0FF800007807FC0000F803FE0001F001FF0007E000FFC03FC0003FFFFF 000007FFFC000000FFE000> 40 38 -3 37 45] 101 dc [<00FF01FF8000FFFF0FFFF000FFFF3FFFFC00FFFFFE03FF00FFFFF001FFC003FFE0007F E003FF80007FF003FF80003FF803FF00001FF803FF00001FFC03FF00000FFC03FF00000F FE03FF00000FFE03FF00000FFE03FF000007FF03FF000007FF03FF000007FF03FF000007 FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007 FF03FF00000FFE03FF00000FFE03FF00000FFE03FF00001FFC03FF00001FFC03FF00001F F803FF80003FF003FFC0007FF003FFE000FFE003FFF001FF8003FFFC07FF0003FF3FFFFC 0003FF0FFFF00003FF01FF000003FF0000000003FF0000000003FF0000000003FF000000 0003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF000000 0003FF0000000003FF0000000003FF00000000FFFFFC000000FFFFFC000000FFFFFC0000 00FFFFFC000000> 48 55 -3 37 55] 112 dc [<0007800000078000000780000007800000078000000F8000000F8000000F8000000F80 00001F8000001F8000003F8000003F8000007F800000FF800001FF800007FF80001FFFFF F0FFFFFFF0FFFFFFF0FFFFFFF001FF800001FF800001FF800001FF800001FF800001FF80 0001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF80 0001FF800001FF800001FF800001FF800001FF803C01FF803C01FF803C01FF803C01FF80 3C01FF803C01FF803C01FF803C00FF807800FFC078007FC0F8007FE1F0001FFFE00007FF C00001FF00> 32 55 -2 54 38] 116 dc [<00F00003FC0007FE000FFE000FFF001FFF001FFF001FFF000FFF000FFE0007FE0003FC 0000F00000000000000000000000000000000000000000000000000000000000000000FF 00FFFF00FFFF00FFFF00FFFF0007FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF 0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF 0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00FFFFF8FFFFF8FFFF F8FFFFF8> 24 61 -3 60 27] 105 dc [<0000FFC00000000FFFFC0000003FFFFF000000FFC0FFC00001FE001FE00007FC000FF8 0007F80007F8000FF00003FC001FF00003FE003FF00003FF003FE00001FF007FE00001FF 807FE00001FF807FE00001FF807FE00001FF80FFE00001FFC0FFE00001FFC0FFE00001FF C0FFE00001FFC0FFE00001FFC0FFE00001FFC0FFE00001FFC0FFE00001FFC0FFE00001FF C07FE00001FF807FE00001FF807FE00001FF803FF00003FF003FF00003FF001FF00003FE 000FF80007FC000FF80007FC0007FC000FF80003FE001FF00000FFC0FFC000003FFFFF00 00000FFFFC00000001FFE00000> 48 38 -3 37 49] 111 dc [<00FE007FC000FFFE01FFF800FFFE07FFFE00FFFE1F03FF00FFFE3C01FF0007FE7801FF 8003FE7000FF8003FEE000FFC003FFC000FFC003FFC000FFC003FF8000FFC003FF8000FF C003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FF C003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FF C003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FF C003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC0FFFFFC3FFFFFFFFFFC3FFF FFFFFFFC3FFFFFFFFFFC3FFFFF> 48 38 -4 37 55] 110 dc [<003FF83801FFFEF807FFFFF81FC00FF83F0003F87E0001F87C0000F87C0000F8FC0000 78FE000078FE000078FF800000FFE00000FFFF80007FFFFC007FFFFF003FFFFFC01FFFFF F00FFFFFF807FFFFFC01FFFFFE003FFFFE0001FFFF00000FFF000001FFF00000FFF00000 7FF800003FF800003FFC00003FFC00003EFE00007EFF00007CFF8000FCFFF007F0FFFFFF E0F8FFFF80E01FFC00> 32 38 -3 37 39] 115 dc [ 64 59 -4 58 68] 80 dc [<001FFF00000001FFFFF0000007FFFFFC00000FF807FF00001FF801FF80001FFC00FFC0 001FFC007FE0001FFC007FE0001FFC007FF0001FFC003FF0000FF8003FF00007F0003FF0 0001C0003FF0000000003FF0000000003FF0000000003FF0000000FFFFF000000FFFFFF0 00007FF83FF00003FF803FF00007FE003FF0001FFC003FF0003FF8003FF0007FF0003FF0 007FE0003FF000FFE0003FF000FFC0003FF000FFC0003FF000FFC0003FF000FFC0007FF0 00FFC0007FF000FFE000FFF0007FF001DFF0003FF803DFF8001FFC0F8FFFF00FFFFE0FFF F001FFFC07FFF0003FE000FFF0> 48 38 -3 37 48] 97 dc [<00FF00000000FFFF00000000FFFF00000000FFFF00000000FFFF0000000007FF000000 0003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF000000 0003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF000000 0003FF0000000003FF0000000003FF0000000003FF0000000003FF000FFFF803FF000FFF F803FF000FFFF803FF000FFFF803FF0001FE0003FF0001F80003FF0007F00003FF000FC0 0003FF001F800003FF003F000003FF00FE000003FF01F8000003FF03F0000003FF07E000 0003FF1FC0000003FF3FE0000003FF7FF0000003FFFFF8000003FFFFFC000003FFFFFC00 0003FFCFFE000003FF87FF000003FF07FF800003FE03FF800003FE01FFC00003FE00FFE0 0003FE007FF00003FE007FF00003FE003FF80003FE001FFC0003FE000FFE0003FE000FFE 0003FE0007FF0003FE0007FF80FFFFF83FFFFEFFFFF83FFFFEFFFFF83FFFFEFFFFF83FFF FE> 48 60 -3 59 52] 107 dc [<000000001F800007FF007FC0003FFFE1FFE000FFFFFBE7F003FE03FF07F007FC01FF0F F00FF800FF87F00FF800FF87F01FF0007FC3E01FF0007FC0003FF0007FE0003FF0007FE0 003FF0007FE0003FF0007FE0003FF0007FE0003FF0007FE0003FF0007FE0001FF0007FC0 001FF0007FC0000FF800FF80000FF800FF800007FC01FF000003FE03FE000003FFFFF800 00073FFFE000000707FF0000000F00000000000F00000000000F00000000000F80000000 000F80000000000FE0000000000FFFFFFC00000FFFFFFF800007FFFFFFF00007FFFFFFF8 0003FFFFFFFE0001FFFFFFFF0003FFFFFFFF000FFFFFFFFF801FC00007FF807F800000FF C07F0000003FC0FF0000003FC0FE0000001FC0FE0000001FC0FE0000001FC0FE0000001F C0FF0000003FC07F0000003F807F8000007F803FC00000FF000FF00003FC0007FE001FF8 0001FFFFFFE000003FFFFF00000003FFF00000> 48 57 -3 38 49] 103 dc cmbx10.432 sf [ 40 42 -2 41 38] 98 dc [ 40 39 -1 26 36] 121 dc [ 48 41 -3 40 52] 82 dc [<003FE00001FFFC0003F07E000FC01F801F800FC03F800FE03F0007E07F0007F07F0007 F07F0007F0FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007 F87F0007F07F0007F03F800FE03F800FE01F800FC00FC01F8007F07F0001FFFC00003FE0 00> 32 27 -2 26 34] 111 dc [<03FE300FFFF03E03F07800F07000F0F00070F00070F80070FC0000FFE000FFFE007FFF C03FFFE01FFFF007FFF800FFFC0003FC0000FCE0007CE0003CF0003CF0003CF80078FC00 78FF01F0F7FFC0C1FF00> 24 27 -2 26 27] 115 dc [ 72 41 -1 40 71] 87 dc [<07001FC01FE03FE03FE03FE01FE01FC007000000000000000000000000000000FFE0FF E0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F E00FE00FE00FE00FE0FFFEFFFEFFFE> 16 43 -3 42 20] 105 dc [ 16 42 -3 41 20] 108 dc [<01FF800007FFF0000F81FC001FC0FE001FC07F001FC07F001FC03F800F803F8000003F 8000003F8000003F80000FFF8000FFFF8007FC3F801FE03F803F803F807F803F807F003F 80FE003F80FE003F80FE003F80FE007F80FF007F807F00FFC03F83DFFC0FFF0FFC01FC03 FC> 32 27 -2 26 33] 97 dc [ 56 27 -3 26 60] 109 dc [<000003800000000007C00000000007C0000000000FE0000000000FE0000000000FE000 0000001FF0000000001FF0000000003FF8000000003FF8000000003FF80000000073FC00 00000073FC00000000F3FE00000000E1FE00000000E1FE00000001C0FF00000001C0FF00 000003C0FF80000003807F80000007807FC0000007003FC0000007003FC000000E003FE0 00000E001FE000001E001FF000001C000FF000001FFFFFF000003FFFFFF800003FFFFFF8 0000780007FC0000700003FC0000700003FC0000E00001FE0000E00001FE0001E00001FF 0001C00000FF0001C00000FF00FFFE001FFFFEFFFE001FFFFEFFFE001FFFFE> 48 41 -2 40 52] 65 dc [ 40 39 -2 26 38] 112 dc [ 24 27 -2 26 28] 114 dc [<000E00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE 0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE 0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE 007FFFFE7FFFFE7FFFFE> 24 39 -5 38 34] 49 dc [<007F800001FFF00007FFF8000FE0FE001FC07E003F803F007F003F807F003F80FF001F C0FF001FC0FF001FC0FF001FC0FF001FE0FF001FE0FF001FE0FF001FE07F003FE07F003F E07F003FE03F807FE01F80FFE00FE1DFE003FF9FE0007E1FE000001FE000001FC000001F C000001FC000003FC01F003F803F803F803F807F003F807F003F80FE003F01FC001E03F8 000FFFE00007FF800001FE0000> 32 39 -3 38 34] 57 dc [<007F800003FFF00007FFFC001F81FE001F00FF003F80FF003F807F803FC07F803F807F 803F807F801F007F800000FF800000FF000000FF000001FE000003F8000007F00000FFC0 0000FFF0000001FC000000FF0000007F8000007FC000003FC000003FE000003FE000003F E03C003FE07E003FE0FF003FE0FF003FE0FF003FC0FF007FC0FE007F807C00FF803F01FF 001FFFFC0007FFF00000FF8000> 32 39 -3 38 34] 51 dc 1 @bop1 cmr10.300 sf 965 2770(1)s cmbx10.622 sf 739 696(Exceptio)s 1(ns)h 803 777(P)s -3(ac)h -3(k)h -6(age)h cmbx10.432 sf 713 994(b)s -2(y)h 24(Ross)h 23(Will)h -1(i)h -1(am)h -2(s)h 816 1052(April)s 22(1993)h 1 @eop 2 @bop0 /cmbx10.360 127 @newfont /cmbx10.300 127 @newfont cmbx10.622 sf [<0000001FFF000070000001FFFFE000F000000FFFFFFC01F000007FFFFFFF03F00001FF FE007F87F00007FFE0000FEFF0000FFF000003FFF0003FFE000001FFF0007FF8000000FF F000FFF00000007FF001FFE00000003FF003FFC00000001FF003FF800000001FF007FF80 0000000FF00FFF0000000007F00FFF0000000007F01FFE0000000007F01FFE0000000003 F03FFC0000000003F03FFC0000000003F07FFC0000000001F07FFC0000000001F07FFC00 00000001F07FF8000000000000FFF8000000000000FFF8000000000000FFF80000000000 00FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF800 0000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF80000000000 00FFF80000000000007FF80000000000007FFC0000000000007FFC0000000000F07FFC00 00000000F03FFC0000000000F03FFC0000000000F01FFE0000000000F01FFE0000000001 F00FFF0000000001E00FFF0000000003E007FF8000000003E003FF8000000007C003FFC0 00000007C001FFE00000000F8000FFF00000001F00007FF80000003E00003FFE0000007C 00000FFF000001F8000007FFE00007F0000001FFFE003FC00000007FFFFFFF800000000F FFFFFC0000000001FFFFF000000000001FFF000000> 64 61 -5 59 71] 67 dc cmbx10.360 sf [<7FFFFFFFC07FFFFFFFC07E03F80FC07803F803C07003F801C06003F800C0E003F800E0 E003F800E0C003F80060C003F80060C003F80060C003F800600003F800000003F8000000 03F800000003F800000003F800000003F800000003F800000003F800000003F800000003 F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8 00000003F800000003F8000003FFFFF80003FFFFF800> 40 33 -2 32 40] 84 dc [<07FE00001FFF80003F07E0003F03F0003F01F0003F01F8001E01F8000001F8000001F8 00003FF80003FDF8001F81F8003E01F8007C01F800F801F800F801F800F801F800F801F8 007C02F8007E0CF8001FF8FF8007E03F80> 32 22 -2 21 28] 97 dc [ 32 35 -2 34 32] 98 dc [ 16 35 -2 34 15] 108 dc [<00FE0007FF800F83E01F01E03E00F07E00F07C00F8FC00F8FC0078FFFFF8FFFFF8FC00 00FC0000FC0000FC00007E00007E00183E00381F00300F80F003FFC000FF00> 24 22 -2 21 26] 101 dc [<00FF0007FFE00F81F01F00F83E007C7C003E7C003E7C003EFC003FFC003FFC003FFC00 3FFC003FFC003FFC003F7C003E7E007E3E007C1F00F80F81F007FFE000FF00> 24 22 -2 21 29] 111 dc [<001F8000FFE001F1F003E3F007E3F00FC3F00FC1E00FC0000FC0000FC0000FC0000FC0 000FC000FFFE00FFFE000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0 000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0007FFC007FFC00> 24 35 -2 34 18] 102 dc [<0001FF0040001FFFC1C0007F80F3C001FC001FC003F0000FC007E00007C00FC00003C0 1FC00003C03F800001C03F800001C07F800000C07F000000C07F000000C0FF00000000FF 00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF000000007F00 0000007F000000C07F800000C03F800000C03F800001C01FC00001800FC000018007E000 030003F000060001FC001C00007F807800001FFFE0000001FF0000> 40 34 -3 33 41] 67 dc [ 32 22 -3 21 32] 110 dc [<00C00000C00000C00000C00001C00001C00003C00007C0000FC0001FC000FFFF00FFFF 000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC1 800FC1800FC1800FC1800FC18007C18007E30003FE0000FC00> 24 32 -1 31 22] 116 dc [<07F9801FFF80380780700380F00180F00180F80000FF0000FFF8007FFE003FFF001FFF 8007FF80003FC0C007C0C003C0E003C0E003C0F00380FC0F00EFFE00C3F800> 24 22 -2 21 23] 115 dc cmbx10.300 sf [<00600001E0000FE000FFE000F3E00003E00003E00003E00003E00003E00003E00003E0 0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0 0003E0007FFF807FFF80> 24 27 -3 26 24] 49 dc [<003FE00001F07C0003C01E000F800F801F0007C01E0003C03E0003E07E0003F07C0001 F07C0001F0FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001 F87C0001F07E0003F07E0003F03E0003E03F0007E01F0007C00F800F8003C01E0001F07C 00003FE000> 32 28 -3 27 36] 79 dc [ 24 18 -1 17 25] 118 dc [<01FC000F07001C03803C01C07801C07801E0F801E0F801E0FFFFE0F80000F80000F800 007800007C00603C00601E00C00F038001FC00> 24 18 -1 17 22] 101 dc [ 24 18 -1 17 20] 114 dc [<1E003F003F003F003F001E00000000000000000000000000FF00FF001F001F001F001F 001F001F001F001F001F001F001F001F001F001F00FFE0FFE0> 16 30 -1 29 14] 105 dc [ 32 18 -1 17 34] 119 dc [<07F8001FFE00383F80780FC0FC07C0FC07E0FC03E0FC03E07803E00007E00007C00007 C0000F80001F00001E0000380000700000E0000180600300600600600800E01FFFC03FFF C07FFFC0FFFFC0FFFFC0> 24 27 -2 26 24] 50 dc [<07F8201FFEE03C07E07801E07000E0F000E0F00060F00060F80000FE0000FFE0007FFE 003FFF003FFF800FFFC007FFE0007FE00003F00001F00000F0C000F0C000F0C000E0E000 E0F001C0FC03C0EFFF0083FC00> 24 28 -3 27 27] 83 dc [<0300030003000300070007000F000F003FFCFFFC1F001F001F001F001F001F001F001F 001F001F0C1F0C1F0C1F0C0F08079803F0> 16 26 -1 25 19] 116 dc [<0FF8001C1E003E0F803E07803E07C01C07C00007C0007FC007E7C01F07C03C07C07C07 C0F807C0F807C0F807C0780BC03E13F80FE1F8> 24 18 -1 17 23] 97 dc [<03FC000E0E001C1F003C1F00781F00780E00F80000F80000F80000F80000F80000F800 007800007801803C01801C03000E0E0003F800> 24 18 -2 17 21] 99 dc [ 32 28 -2 27 33] 80 dc [ 40 18 -1 17 40] 109 dc [<1FD830786018E018E018F000FF807FE07FF01FF807FC007CC01CC01CE01CE018F830CF C0> 16 18 -2 17 19] 115 dc [<01FC000F07801C01C03C01E07800F07800F0F800F8F800F8F800F8F800F8F800F8F800 F87800F07800F03C01E01E03C00F078001FC00> 24 18 -1 17 24] 111 dc [<007F0001E38003C7C00787C00F87C00F83800F80000F80000F80000F80000F8000FFF8 00FFF8000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80 000F80000F80000F80007FF8007FF800> 24 29 0 28 15] 102 dc [ 24 29 -1 28 27] 104 dc [ 24 29 -1 28 25] 107 dc [<03F8F00E0F381E0F381C07303C07803C07803C07803C07801C07001E0F000E0E001BF8 001000001800001800001FFF001FFFC00FFFE01FFFF07801F8F00078F00078F000787000 707800F01E03C007FF00> 24 27 -1 17 24] 103 dc [<03F8001FFE003C1F003C0F807C07C07E07C07C07C03807C0000F80000F80001E00003C 0003F800001E00000F800007C00007C00007E03007E07807E0FC07E0FC07E0FC07C0780F 80781F001FFE0007F800> 24 27 -2 26 24] 51 dc [ 24 26 -1 17 27] 112 dc [<003FC00001F0300003C0380007C07C000F807C000F807C000F8038000F8000000F8000 000F8000000F800000FFFFFC00FFFFFC000F807C000F807C000F807C000F807C000F807C 000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C 007FE1FF807FE1FF80> 32 29 0 28 27] 12 dc [ 24 18 -1 17 27] 110 dc [<000180000380000780000F80001F80003F80006F8000CF80008F80018F80030F80060F 800C0F80180F80300F80600F80C00F80FFFFF8FFFFF8000F80000F80000F80000F80000F 80000F8001FFF801FFF8> 24 27 -1 26 24] 52 dc [ 16 28 -1 27 18] 73 dc [ 16 29 -1 28 14] 108 dc [<1801801FFF001FFE001FFC001FF8001FC00018000018000018000018000019F8001E0E 00180F801007800007C00007E00007E00007E07807E0F807E0F807E0F807C0F007C0600F 80381F001FFE0007F000> 24 27 -2 26 24] 53 dc [<7FFFFFE07FFFFFE0781F81E0701F80E0601F8060E01F8070C01F8030C01F8030C01F80 30C01F8030001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80 00001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800007FFFE 0007FFFE00> 32 28 -2 27 33] 84 dc cmr10.300 sf [<60F0F060> 8 4 -4 3 12] 46 dc [<001F808000E0618001801980070007800E0003801C0003801C00018038000180780000 807800008070000080F0000000F0000000F0000000F0000000F0000000F0000000F00000 00F0000000700000807800008078000080380000801C0001001C0001000E000200070004 000180080000E03000001FC000> 32 30 -2 28 30] 67 dc [<03F0000E1C00180600300300700380600180E001C0E001C0E001C0E001C0E001C0E001 C06001807003803003001806000E1C0003F000> 24 18 -1 17 21] 111 dc [ 24 18 -1 17 23] 110 dc [<007E0001C1800301800703C00E03C00E01800E00000E00000E00000E00000E0000FFFF C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 C00E01C00E01C00E01C00E01C07F87F8> 24 29 0 28 23] 12 dc [<00038003C4C00C38C01C3880181800381C00381C00381C00381C001818001C38000C30 0013C0001000003000001800001FF8001FFF001FFF803003806001C0C000C0C000C0C000 C06001803003001C0E0007F800> 24 28 -1 18 21] 103 dc [ 24 18 -1 17 23] 117 dc [ 16 18 -1 17 16] 114 dc [<1FC000307000783800781C00301C00001C00001C0001FC000F1C00381C00701C00601C 00E01C40E01C40E01C40603C40304E801F8700> 24 18 -2 17 21] 97 dc [<04000400040004000C000C001C003C00FFE01C001C001C001C001C001C001C001C001C 001C101C101C101C101C100C100E2003C0> 16 26 -1 25 16] 116 dc [<18003C003C0018000000000000000000000000000000FC001C001C001C001C001C001C 001C001C001C001C001C001C001C001C001C001C00FF80> 16 29 -1 28 12] 105 dc [ 32 28 -2 27 31] 72 dc [<03E00C301818300C700E6006E006FFFEE000E000E000E00060007002300218040C1803 E0> 16 18 -1 17 18] 101 dc [<003F0000070000070000070000070000070000070000070000070000070000070003E7 000C1700180F00300700700700600700E00700E00700E00700E00700E00700E007006007 00700700300700180F000C370007C7E0> 24 29 -2 28 23] 100 dc [ 32 28 -2 27 31] 78 dc [<07E00C301878307870306000E000E000E000E000E000E00060007004300418080C3007 C0> 16 18 -2 17 18] 99 dc [<07C01830201C400C400EF00FF80FF807F8077007000F000E000E001C001C0038007000 6000C00180030006010C01180110023FFE7FFEFFFE> 16 28 -2 27 21] 50 dc [<000600000006000000060000000F0000000F0000000F00000017800000178000001780 000023C0000023C0000023C0000041E0000041E0000041E0000080F0000080F0000180F8 000100780001FFF80003007C0002003C0002003C0006003E0004001E0004001E000C001F 001E001F00FF80FFF0> 32 29 -1 28 31] 65 dc [ 24 29 -1 28 23] 98 dc [<1F9030704030C010C010E010F8007F803FE00FF000F880388018C018C018E010D0608F C0> 16 18 -1 17 16] 115 dc [<07E01830201C201C781E780E781E381E001C001C00180030006007E00030001C001C00 0E000F000F700FF80FF80FF80FF00E401C201C183007E0> 16 29 -2 27 21] 51 dc [ 40 28 -2 27 38] 77 dc [ 24 18 -1 17 22] 118 dc [<000C00000C00001C00003C00003C00005C0000DC00009C00011C00031C00021C00041C 000C1C00081C00101C00301C00201C00401C00C01C00FFFFC0001C00001C00001C00001C 00001C00001C00001C0001FFC0> 24 28 -1 27 21] 52 dc [ 40 29 -1 27 43] 87 dc [ 24 29 -1 28 23] 104 dc [ 24 28 -2 27 28] 69 dc [<7F8FF00F03800F030007020003840001C80001D80000F00000700000780000F800009C 00010E00020E000607000403801E07C0FF0FF8> 24 18 0 17 22] 120 dc [ 24 26 -1 17 23] 112 dc [<0FE03038401CE00EF00EF00EF00E000C001C0030006000C00080018001000100010001 0001000100000000000000000000000300078007800300> 16 29 -2 28 20] 63 dc [<300C3FF83FF03FC020002000200020002000200023E024302818301C200E000E000F00 0F000F600FF00FF00FF00F800E401E401C2038187007C0> 16 29 -2 27 21] 53 dc [<07E0801C1980300580700380600180E00180E00080E00080E00080F00000F800007C00 007FC0003FF8001FFE0007FF0000FF80000F800007C00003C00001C08001C08001C08001 C0C00180C00180E00300D00200CC0C0083F800> 24 30 -2 28 23] 83 dc [<00F0030C06040C0E181E301E300C700070006000E3E0E430E818F00CF00EE006E007E0 07E007E007E007600760077006300E300C18180C3003E0> 16 29 -2 27 21] 54 dc [ 32 18 -1 17 30] 119 dc [ 32 29 -2 27 31] 85 dc [<7FFFFFC0700F01C0600F00C0400F0040400F0040C00F0020800F0020800F0020800F00 20000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F00 00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000001F80 0003FFFC00> 32 28 -1 27 30] 84 dc [ 24 28 -2 27 28] 80 dc [ 24 29 -1 28 22] 107 dc [ 16 28 -1 27 15] 73 dc [ 16 29 -1 28 12] 108 dc [ 40 18 -1 17 36] 109 dc [<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE00E000E000E000E000E000E 000E000E000E000E000E000E000E000E000E000E007FE0> 16 29 0 28 13] 102 dc [<001F808000E0618001801980070007800E0003801C0003801C00018038000180780000 807800008070000080F0000000F0000000F0000000F0000000F0000000F0000000F000FF F0F0000F80700007807800078078000780380007801C0007801C0007800E00078007000B 800180118000E06080001F8000> 32 30 -2 28 33] 71 dc [ 32 29 -1 27 31] 86 dc [ 24 26 -1 17 22] 121 dc [<7FF0FFC00FC03E000780180003C0180003E0100001E0200001F0600000F04000007880 00007D8000003D0000001E0000001F0000000F0000000F8000000F80000013C0000023E0 000021E0000041F00000C0F8000080780001007C0003003C0002001E0006001F001F003F 80FFC0FFF0> 32 28 -1 27 31] 88 dc [ 32 29 -2 27 31] 82 dc [ 24 28 -2 27 29] 66 dc [ 32 28 -2 27 32] 68 dc [<4000007FFF807FFF007FFF004002008004008004008008000010000010000020000060 0000400000C00000C00001C0000180000180000380000380000380000380000780000780 00078000078000078000078000030000> 24 29 -2 27 21] 55 dc [ 24 28 -2 27 27] 70 dc [<03E00C301008200C20066006600660067006780C3E083FB01FE007F007F818FC307E60 1E600FC007C003C003C003C00360026004300C1C1007E0> 16 29 -2 27 21] 56 dc [<03C00C301818300C700C600EE006E006E007E007E007E007E0076007700F300F18170C 2707C700060006000E300C780C78187010203030C00F80> 16 29 -2 27 21] 57 dc [<003F800000E0E0000380380007001C000E000E001C0007003C00078038000380780003 C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001 E0F00001E0700001C0780003C0780003C0380003803C0007801C0007000E000E0007001C 000380380000E0E000003F8000> 32 30 -2 28 32] 79 dc [<004000800100020006000C000C0018001800300030007000600060006000E000E000E0 00E000E000E000E000E000E000E000E000E000600060006000700030003000180018000C 000C0006000200010000800040> 16 42 -3 30 16] 40 dc [<800040002000100018000C000C000600060003000300038001800180018001C001C001 C001C001C001C001C001C001C001C001C001C0018001800180038003000300060006000C 000C0018001000200040008000> 16 42 -2 30 16] 41 dc [<60F0F0701010101020204080> 8 12 -4 3 12] 44 dc [<03C00C301818300C300C700E60066006E007E007E007E007E007E007E007E007E007E0 07E007E007E00760066006700E300C300C18180C3007E0> 16 29 -2 27 21] 48 dc 2 @bop1 cmbx10.622 sf 782 341(Con)s -3(ten)h -3(ts)h cmbx10.360 sf 0 594(T)s -5(able)h 20(of)h 18(Con)h -2(ten)h -2(ts)h cmbx10.300 sf 0 675(1)s 16(Ov)h -1(erview)h 0 1024(2)s 16(Static)h 14(P)h -1(arameters)h 14(of)h 15(this)h 14(P)h -1(ac)h -1(k)h -3(age)h 0 1223(3)s 16(Sp)h 1(eci\014cati)h -1(on)h 0 1721(4)s 16(Implemen)h -2(tati)h -1(on)h 0 2419(5)s 16(T)h -4(est)h 15(Program)h cmr10.300 sf 62 725(1.1)s 13(Con\014guration)h 13(Header)h 15(Notice)h 62 775(1.2)s 13(Abstract)h 62 825(1.3)s 13(Motiv)h -2(ation)h 62 874(1.4)s 13(What)h 14(is)h 13(an)h 14(Exception?)h 62 924(1.5)s 13(Exceptions)h 15(as)h 14(Activ)h -1(e)h 14(Statuses)h 62 974(1.6)s 13(Ho)h -1(w)h 14(to)h 13(Use)h 15(This)h 14(P)h -1(ac)h -1(k)h -2(age)h 62 1074(2.1)s 13(Inline)h 14(Switc)h -1(h)h 14(P)h -1(arameter)h 62 1124(2.2)s 13(Threading)h 14(P)h -1(arameter)h 62 1173(2.3)s 13(Macros)h 15(for)h 13(Global)h 12(V)h -3(ariables)h 62 1273(3.1)s 13(Sp)h 1(eci\014cation)h 14(Includes)h 62 1323(3.2)s 13(Exception)h 15(T)h -1(yp)h 1(e)h 62 1373(3.3)s 13(Macro)h 14(EX)h 16(RAISE)h 62 1422(3.4)s 13(Exception)h 15(Blo)h 1(c)h -1(k)h 13(Construct)h 62 1472(3.5)s 13(De\014nition)h 13(of)h 14(Seman)h -1(tics)h 62 1522(3.6)s 13(Exception)h 15(Informati)h -1(on)h 62 1572(3.7)s 13(F)h -3(unction)h 14(ex)h 15(str)h 62 1622(3.8)s 13(A)h 14(W)h -3(arning)h 13(Ab)h 1(out)h 14(Names)h 62 1672(3.9)s 13(Glossary)h 62 1771(4.1)s 13(Ov)h -1(erview)h 15(and)h 13(Data)h 14(Structure)h 15(Description)h 125 1821(4.1.1)s 12(Global)h 12(V)h -3(ariables)h 125 1871(4.1.2)s 12(Magic)h 13(Num)h -1(b)h 1(ers)h 62 1921(4.2)s 13(Exception)h 15(t)h -1(yp)h 1(e)h 62 1970(4.3)s 13(Macros)h 15(for)h 13(Declaring)h 14(and)h 13(De\014ning)h 14(Exceptions)h 62 2020(4.4)s 13(Macro)h 14(for)h 14(Raising)h 12(Exceptions)h 62 2070(4.5)s 13(Exception)h 15(Blo)h 1(c)h -1(k)h 13(Macros)h 15(\(Safe\))h 62 2120(4.6)s 13(F)h -3(ast,)h 13(Inline)h 14(V)h -3(ersions)h 14(of)h 13(the)h 15(Exception)h 14(Blo)h 1(c)h -1(k)h 14(Macros)h 62 2170(4.7)s 13(F)h -3(unction)h 14(ex)h 15(str)h 62 2219(4.8)s 13(Supp)h 1(ort)h 15(F)h -3(unctions)h 125 2269(4.8.1)s 12(F)h -3(unction)h 28(exrai)h 125 2319(4.8.2)s 12(F)h -3(unction)h 13(ex)h 16(b)h 1(om)h -1(b)h 125 2369(4.8.3)s 12(F)h -3(unction)h 28(exp)h 1(op)h 62 2469(5.1)s 13(F)h -3(unction)h 14(sc01)h 62 2518(5.2)s 13(F)h -3(unction)h 14(sc02)h 62 2568(5.3)s 13(F)h -3(unction)h 14(sc03)h 62 2618(5.4)s 13(F)h -3(unction)h 14(sc04)h 62 2668(5.5)s 13(F)h -3(unction)h 14(sc05)h 965 2770(2)s 1950 2 0 535 r 1950 2 0 621 r 13 2 318 1373 r 13 2 345 1572 r 13 2 345 2170 r 13 2 400 2269 r 13 2 439 2319 r 13 2 400 2369 r 2 @eop 3 @bop0 cmbx10.300 sf [<007E0003FF000781800F03C01E07C03C07C03C0380780000780000F80000F8F800FB0E 00FA0780FC0380FC03C0F803E0F803E0F803E0F803E07803E07803E07803C03C03C03C07 801E0F0007FE0003F800> 24 27 -2 26 24] 54 dc [ 32 28 -2 27 37] 68 dc [ 32 28 -2 27 37] 78 dc cmr10.300 sf [ 16 2 0 9 14] 45 dc 3 @bop1 cmbx10.300 sf 0 689(6)s 16(Design)h 14(Notes)h cmr10.300 sf 62 42(5.6)s 13(F)h -3(unction)h 14(sc06)h 62 91(5.7)s 13(F)h -3(unction)h 14(sc07)h 62 141(5.8)s 13(F)h -3(unction)h 14(sc08)h 62 191(5.9)s 13(F)h -3(unction)h 14(sc09)h 62 241(5.10)s 13(F)h -3(unction)h 13(fa01)h 62 291(5.11)s 13(F)h -3(unction)h 13(fa02)h 62 340(5.12)s 13(F)h -3(unction)h 13(fa03)h 62 390(5.13)s 13(F)h -3(unction)h 13(fa04)h 62 440(5.14)s 13(F)h -3(unction)h 13(fa05)h 62 490(5.15)s 13(F)h -3(unction)h 13(fa06)h 62 540(5.16)s 13(F)h -3(unction)h 13(fa07)h 62 589(5.17)s 13(F)h -3(unction)h 13(fa08)h 62 639(5.18)s 13(F)h -3(unction)h 13(fa09)h 62 739(6.1)s 13(Arc)h -1(hitectural)h 15(Discussion)h 62 789(6.2)s 13(Exception)h 15(Iden)h -1(tit)h -1(y)h 62 839(6.3)s 13(Iden)h -1(ti\014er)h 15(Names)h 62 888(6.4)s 13(Catering)h 14(for)h 13(Multi-Threading)h 62 938(6.5)s 13(Chec)h -1(king)h 62 988(6.6)s 13(F)h -3(uture)h 15(Impro)h -1(v)h -1(em)h -1(en)h -1(ts)h 965 2770(3)s 1950 2 0 1023 r 3 @eop 4 @bop0 /cmbx10.518 127 @newfont /cmsy10.300 127 @newfont /cmsl10.300 127 @newfont /cmr7.300 127 @newfont /cmtt10.300 127 @newfont cmbx10.518 sf [<0001E0000003E000000FE000007FE0001FFFE000FFFFE000FFBFE000E03FE000003FE0 00003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE0 00003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE0 00003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE0 00003FE000003FE000003FE000003FE000003FE000003FE000003FE0007FFFFFF07FFFFF F07FFFFFF0> 32 46 -6 45 41] 49 dc [<00000FFE0000000000FFFFE000000007FFFFFC0000001FFC07FF0000003FE000FF8000 00FF80003FE00001FF00001FF00003FE00000FF80007FC000007FC0007FC000007FC000F F8000003FE001FF8000003FF001FF0000001FF003FF0000001FF803FF0000001FF803FF0 000001FF807FE0000000FFC07FE0000000FFC07FE0000000FFC0FFE0000000FFE0FFE000 0000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE00000 00FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE07FE0000000 FFC07FE0000000FFC07FF0000001FFC07FF0000001FFC03FF0000001FF803FF0000001FF 801FF8000003FF001FF8000003FF000FFC000007FE000FFC000007FE0007FE00000FFC00 03FF00001FF80001FF80003FF00000FFC0007FE000003FE000FF8000001FFC07FF000000 07FFFFFC00000000FFFFE0000000000FFE000000> 56 49 -5 48 62] 79 dc [ 40 32 -2 31 44] 118 dc [<0007FC0000003FFF800000FFFFE00003FC07F00007F801F8000FE000FC001FE0007E00 3FC0007E003FC0003F007FC0003F007F80003F007F80003F80FF80003F80FF80003F80FF FFFFFF80FFFFFFFF80FFFFFFFF80FF80000000FF80000000FF800000007F800000007F80 0000003FC00000003FC00003801FC00003801FE00007800FF0000F0007F8001E0003FE00 FC0000FFFFF800003FFFE0000003FF0000> 40 32 -2 31 38] 101 dc [<03F03F00FFF0FFC0FFF1FFF0FFF3C7F00FF78FF807F70FF807FE0FF807FE0FF807FC07 F007FC03E007FC008007FC000007F8000007F8000007F8000007F8000007F8000007F800 0007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800 0007F8000007F80000FFFFE000FFFFE000FFFFE000> 32 32 -2 31 34] 114 dc [<03C0000FF0000FF0001FF8001FF8001FFC001FF8001FF8000FF0000FF00003C0000000 0000000000000000000000000000000000000000000001F800FFF800FFF800FFF8000FF8 0007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F8 0007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F8 00FFFF80FFFF80FFFF80> 24 51 -3 50 23] 105 dc [ 56 32 -2 31 60] 119 dc cmsy10.300 sf [ 32 20 -2 19 32] 17 dc [<003C00E001C00180038003800380038003800380038003800380038003800380038003 0007001C00F0001C00070003000380038003800380038003800380038003800380038003 800380018001C000E0003C> 16 41 -3 30 21] 102 dc [ 16 41 -3 30 21] 103 dc cmbx10.300 sf [ 24 18 -1 17 25] 120 dc [<78FCFCFCFC78> 8 6 -3 5 13] 46 dc [ 40 28 -2 27 45] 77 dc cmbx10.432 sf [<1C007F00FF80FF80FF80FF80FF807F001C00> 16 9 -5 8 19] 46 dc [<00003FF001800003FFFE0780000FFFFF8F80003FF007FF8000FF8001FF8001FE00007F 8007FC00003F8007F800001F800FF000000F801FE000000F803FE0000007803FC0000007 807FC0000003807FC0000003807FC000000380FF8000000000FF8000000000FF80000000 00FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80000000 00FF8000000000FF80000000007FC0000000007FC0000003807FC0000003803FC0000003 803FE0000003801FE0000007800FF00000070007F800000F0007FC00001E0001FE00003C 0000FF8000F800003FF007F000000FFFFFC0000003FFFF000000003FF80000> 48 41 -4 40 50] 67 dc [ 40 27 -3 26 38] 110 dc [<0001FF0000001FFFC000007F80F00000FE00F80003FC01FC0003F803FC0007F003FC00 07F003FC0007F003FC0007F001F80007F000F00007F000000007F000000007F000000007 F0000000FFFFFFFC00FFFFFFFC00FFFFFFFC0007F001FC0007F001FC0007F001FC0007F0 01FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001 FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC 0007F001FC0007F001FC0007F001FC007FFF1FFFC07FFF1FFFC07FFF1FFFC0> 40 42 -1 41 38] 12 dc [<00FF81F003FFE7FC0FC1FE7C1F80FC7C3F80FE7C3F007E107F007F007F007F007F007F 007F007F007F007F007F007F003F007E003F80FE001F80FC000FC1F8001FFFE00018FF80 00380000003C0000003C0000003E0000003FFFF8003FFFFF001FFFFFC00FFFFFE007FFFF F01FFFFFF07E0007F87C0001F8F80001F8F80000F8F80000F8F80000F8FC0001F87E0003 F03F0007E00FC01F8003FFFE00007FF000> 32 40 -2 26 34] 103 dc [ 40 27 -3 26 38] 117 dc [<00700000700000700000700000F00000F00000F00001F00003F00003F00007F0001FFF F0FFFFF0FFFFF007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0 0007F00007F00007F00007F03807F03807F03807F03807F03807F03807F03803F87001F8 F000FFE0001F80> 24 38 -1 37 27] 116 dc [ 48 41 -3 40 54] 72 dc [<003FE00001FFF80003F07E000FE03F001FC01F803F800FC03F800FC07F000FC07F0007 E0FF0007E0FF0007E0FF0007E0FFFFFFE0FFFFFFE0FF000000FF000000FF000000FF0000 007F0000007F8000003F8000E03F8001E01FC001C00FE003C003F81F8000FFFE00001FF0 00> 32 27 -2 26 32] 101 dc [<00003FF80000003FF80000003FF800000003F800000003F800000003F800000003F800 000003F800000003F800000003F800000003F800000003F800000003F800000003F80000 0003F800001FE3F80000FFFBF80003F03FF8000FE00FF8001FC007F8003F8003F8003F80 03F8007F8003F8007F0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003 F800FF0003F800FF0003F800FF0003F800FF0003F8007F0003F8007F0003F8003F8003F8 003F8007F8001FC00FF8000FE01FF80003F03FFF8000FFF3FF80003FC3FF80> 40 42 -2 41 38] 100 dc [ 48 41 -3 40 54] 78 dc [<001FF80000FFFE0003F01F000FE03F801FC03F803F803F803F803F807F801F007F0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 007F0000007F8000003F8001C03FC001C01FC003C00FE0078003F01F0000FFFC00001FE0 00> 32 27 -2 26 31] 99 dc cmsl10.300 sf [<003F0400C0CC0180380300380600180E00180E00180E00181E00101E00001F00000F80 000FF80007FF0003FF8001FFC0003FE00003E00001E00000E00000E04000E04000E04000 E04000C06001C0E00180F00300CC0E0083F800> 24 30 -2 28 23] 83 dc [<0FC78003D86001E03003C03803803803801803801C03801C03801C0700380700380700 380700700700700700E00F01C00EC3000E3C000E00000E00000E00001C00001C00001C00 001C0000FF8000> 24 26 0 17 23] 112 dc [<01F8070C0C061C073803300370037FFF7000E000E000E00060006002300430081C3007 C0> 16 18 -2 17 18] 101 dc [<01F8071C0C1E181C38183000700070007000E000E000E000600060047008301018200F C0> 16 18 -3 17 18] 99 dc [<00C001C001C0018000000000000000000000000000001F800780038007000700070007 00070007000E000E000E000E000E000E001C001E00FF80> 16 29 -1 28 12] 105 dc [<0007E0001C1000703800E07801C07801C03001C00001C0000380000380000380003FFF F00380F00380700700E00700E00700E00700E00700E00700E00E01C00E01C00E01C00E01 C00E01C00E01C01C03801C03C0FF8FF0> 24 29 -1 28 23] 12 dc [<07F0001C18001E0C001C0E00180E00000E00000E0001FE000F0E001C1C00301C00701C 00E01C40E01C40E03C40E05C80709D803F0E00> 24 18 -3 17 21] 97 dc [<020002000200060006000C001C003C00FFE01C001C0038003800380038003800380070 0070407040704070407080708031001E00> 16 26 -4 25 16] 116 dc [<00FC000307000E01801C01C03800C03000C07000E07000E07000E0E001C0E001C0E001 C0600180600380700700380E001C180007E000> 24 18 -2 17 21] 111 dc [<1F8F8007B0C003C0E00780E00780E00700E00700E00700E00700E00E01C00E01C00E01 C00E01C00E01C00E01C01C03801E03C0FF9FF0> 24 18 -1 17 23] 110 dc [<07E001E001C001C001C001C001C001C003800380038003800380038007000700070007 00070007000E000E000E000E000E000E001C001E00FF80> 16 29 -1 28 12] 108 dc [<0FFF8000F80000F00000F00000F00000F00000F00001E00001E00001E00001E00001E0 0001E00003C00003C00003C00003C00003C00003C0000780000780000780000780000780 000780000F00000F8000FFF800> 24 28 -1 27 15] 73 dc [<1F8FC0FC00079061060003E07607000780780700078078070007007007000700700700 070070070007007007000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E 00E00E001C01C01C001E01E01E00FF8FF8FF80> 40 18 -1 17 36] 109 dc [<1FFFFFF03C07C0F03007803020078020600780204007802040078020400F0020800F00 20000F0000000F0000000F0000000F0000001E0000001E0000001E0000001E0000001E00 00001E0000003C0000003C0000003C0000003C0000003C0000003C000000780000007C00 001FFFE000> 32 28 -4 27 30] 84 dc [<03F20C0E18061004300438043E001FE00FF007F8003C401C400C400C6018E010D0608F C0> 16 18 -1 17 16] 115 dc [<1F9C07EE03CF078E078C07000700070007000E000E000E000E000E000E001C001E00FF C0> 16 18 -1 17 16] 114 dc [<000038003CCC00C69C018308038380070380070380070380070380070700030600038C 0004F0000400000C00000C00000FFE0007FF800FFFC01801C02000C06000E0C000C0C000 C0600180200300180E0007F000> 24 28 0 18 21] 103 dc [<0007F010001C0C300070026000C001E0038000E0070000E00E0000600E0000601C0000 403C00004038000040780000007800000078000000F0000000F0000000F0000000F00000 00F0000000F0000080F0000100700001007000010038000200380004001C0004000C0018 00060020000380C000007F0000> 32 30 -4 28 30] 67 dc [ 24 18 -4 17 23] 117 dc [<07E00001E00001C00001C00001C00001C00001C00001C000038000038000038000038F 8003B0C003C0E00780E00780E00700E00700E00700E00700E00E01C00E01C00E01C00E01 C00E01C00E01C01C03801E03C0FF9FF0> 24 29 -1 28 23] 104 dc [<0003F00000F00000E00000E00000E00000E00000E00000E00001C00001C00001C000F1 C0030DC00C03C01C0380380380300380700380700380700380E00700E00700E007006007 00600700700F00301E00186F00078FC0> 24 29 -3 28 23] 100 dc cmr7.300 sf [<7FFFF06070304070104070108070088070088070080070000070000070000070000070 0000700000700000700000700000700000700000700007FF00> 24 20 -1 19 24] 84 dc [ 16 20 -1 19 18] 104 dc [<2070200000000000F03030303030303030303030FC> 8 21 -1 20 9] 105 dc [<3E806180C080C080E0007E003F8003C080C080C0C0C0E1809F00> 16 13 -1 12 13] 115 dc [ 24 13 -1 12 27] 109 dc [<7F00E1C0E0404060006007E038606060C060C064C06461E43E38> 16 13 -2 12 17] 97 dc [<0FE0187020706020C000C000C000C000C0006000201018200FC0> 16 13 -1 12 15] 99 dc [ 16 13 -1 12 13] 114 dc [<0FC0186020106018C00CC00CC00CC00CC00C6018601838700FC0> 16 13 -1 12 17] 111 dc [<10001000100030007000FF80300030003000300030003000300030803080308011000E 00> 16 18 -1 17 13] 116 dc [<0F80104020206030C010FFF0C000C000C0006000201018200FC0> 16 13 -1 12 15] 101 dc [<00780018001800180018001800180F98187820386018C018C018C018C018C018601820 3810580F9E> 16 20 -1 19 18] 100 dc [ 16 13 -1 12 18] 110 dc [ 16 13 -1 12 18] 117 dc [ 16 19 -1 12 18] 112 dc [<01F8000604000C0E00180E00180000180000180000FFFE001806001806001806001806 001806001806001806001806001806001806001806007E1F80> 24 20 0 19 19] 12 dc [ 8 20 -1 19 9] 108 dc [<40E040> 8 3 -3 2 9] 46 dc cmr10.300 sf [ 8 41 -4 30 12] 91 dc [ 8 41 0 30 12] 93 dc cmtt10.300 sf [<000180000380000380000700000700000E00000E00001C00001C000038000038000070 0000700000E00000E00001C00001C0000380000380000700000700000E00000E00001C00 001C0000380000380000700000700000E00000E00000C00000> 24 32 -2 28 22] 47 dc [<01C00001C00001C00001C00071C700F9CF807FFF001FFC0007F00007F0001FFC007FFF 00F9CF8071C70001C00001C00001C00001C000> 24 18 -2 21 22] 42 dc [<7FF800FFFE007FFF001C0F801C03801C03C01C01C01C01C01C01C01C03C01C03801C0F 801FFF001FFE001FF8001C00001C00001C00001C00001C00001C00001C00007F0000FF80 007F0000> 24 25 -1 24 22] 80 dc [<1FE0007FF8007FFC00783C00301E00000E00000E0003FE001FFE007E0E00F00E00E00E 00E00E00F01E00F83E007FFFE03FE7E00F83E0> 24 18 -2 17 22] 97 dc [<03F80FFE1FFE3C1E780C7000F000E000E000E000E000F000700778073E0F1FFE0FFC03 F0> 16 18 -3 17 22] 99 dc [<7E0000FE00007E00000E00000E00000E00000E00000E7FE00E7FE00E7FE00E0F000E1E 000E3C000E78000EF0000FF0000FF8000FBC000F1E000E0E000E07000E07807F87F0FFCF F07F87F0> 24 25 0 24 22] 107 dc [<03E3C00FFFE01FFFE01E3CC03C1E00380E00380E00380E003C1E001E3C001FFC001FF8 003BE0003800003800001FFC001FFF003FFFC07803C0F001E0E000E0E000E0E000E0F001 E07C07C03FFF800FFE0003F800> 24 28 -1 17 22] 103 dc [<03E00FF81FFC3C1E780E7007E007FFFFFFFFFFFFE000E000700778073C0F1FFE0FFC03 F0> 16 18 -3 17 22] 101 dc [<7E3C00FEFF007FFF800F87800F03800F03800E03800E03800E03800E03800E03800E03 800E03800E03800E03807FC7F0FFE7F87FC7F0> 24 18 0 17 22] 110 dc [ 24 18 0 17 22] 109 dc [<70F8F8F870000000000000000070F8F8F870> 8 18 -8 17 22] 58 dc [<7FFFC0FFFFC07FFFC01C01C01C01C01C01C01C01C01C00001C00001C1C001C1C001FFC 001FFC001FFC001C1C001C1C001C00001C00E01C00E01C00E01C00E01C00E07FFFE0FFFF E07FFFE0> 24 25 -1 24 22] 69 dc [<7F1FC07F3FC07F1FC00F1C00073C0003B80003F00001F00000E00001E00001F00003B8 00073C00071C000E0E007F1FC0FF3FE07F1FC0> 24 18 -1 17 22] 120 dc [<7E3E00FEFF807FFFC00F83E00F01E00E00F00E00F00E00700E00700E00700E00700E00 F00F00E00F01E00F83C00FFFC00EFF000E3C000E00000E00000E00000E00000E00000E00 007FC000FFE0007FC000> 24 27 0 17 22] 112 dc [<0300000700000700000700000700007FFF00FFFF00FFFF000700000700000700000700 0007000007000007000007010007038007038007078007878003FF0003FE0000F800> 24 23 -1 22 22] 116 dc [<70F8F8F870> 8 5 -8 4 22] 46 dc [ 24 25 -1 24 22] 86 dc [ 24 18 -1 17 22] 114 dc [<0FEC3FFC7FFCF03CE01CE01CF0007F801FF007FC003EE00EE00EF00EF81EFFFCFFF8C7 E0> 16 18 -3 17 22] 115 dc [<018003C003C0018000000000000000007FC07FC07FC001C001C001C001C001C001C001 C001C001C001C001C001C07FFFFFFF7FFF> 16 26 -3 25 22] 105 dc [<03E0000FF8001FFC003C1E00780F00700700E00380E00380E00380E00380E00380F007 80700700780F003C1E001FFC000FF80003E000> 24 18 -2 17 22] 111 dc [<01800380038007800F807F80FF80738003800380038003800380038003800380038003 8003800380038003807FF87FFC7FF8> 16 25 -4 24 22] 49 dc [<03E0000FF8001FFC001E3C00380E00780F00700700700700E00380E00380E00380E003 80E00380E00380E00380E00380F00780700700700700780F003C1E001E3C001FFC000FF8 0003E000> 24 25 -2 24 22] 48 dc [<01F18007FF800FFF801F0F803C0780780780780380700380F00000E00000E00000E000 00E00000E00000E00000E00000F000007003807803807803803C07801F0F000FFE0007FC 0001F000> 24 25 -2 24 22] 67 dc [ 24 25 -2 24 22] 108 dc [<003F00007F00003F0000070000070000070000070003C7000FF7003FFF003C1F00780F 00F00700F00700E00700E00700E00700E00700F00700F00F00781F007C3F003FFFE01FF7 F007C7E0> 24 25 -1 24 22] 100 dc [<00E00001F00001F00001B00001B00003B80003B80003B800031800071C00071C00071C 00071C00071C000E0E000E0E000FFE000FFE001FFF001C07001C07001C07007F1FC0FF1F E07F1FC0> 24 25 -1 24 22] 65 dc [<03E0000FF8003FFC007C1E00780F00F00700E00700E00780E00780E00380F00780F007 80780F803FFF803FFB800FE380000780000700300F00780E00781E00787C007FF8003FE0 000F8000> 24 25 -2 24 22] 57 dc [<07E0001FFC007FFE00781F00780F00780700000700000F00000F00003E0007FC0007F8 0007FC00001E00000700000780000380000380F00380F00780F00700F81F007FFE003FFC 0007E000> 24 25 -2 24 22] 51 dc [<7FE000FFF8007FFC001C1E001C0F001C07001C07001C07001C07001C0F001C1E001FFC 001FF8001FFC001C1C001C0E001C0E001C0E001C0E001C0E201C0E701C0E707F07E0FF87 E07F03C0> 24 25 -1 24 22] 82 dc [<07E0001FF8007FFE00783F00F00F00F00780F00380F003800003800003800007800007 00000F00001E00003C0000780000F00003E0000780000F00001E03803C03807FFF80FFFF 807FFF80> 24 25 -2 24 22] 50 dc [<07E3001FFF007FFF00781F00F00F00E00700E00700E00000F000007800007F80001FF0 0007FC0000FE00000F00000780000380000380E00380E00380F00780F80F00FFFE00FFFC 00C7F000> 24 25 -2 24 22] 83 dc [<7E0000FE00007E00000E00000E00000E00000E00000E3E000EFF800FFFC00F83E00F01 E00E00F00E00F00E00700E00700E00700E00700E00F00F00E00F01E00F83C00FFFC00EFF 00063C00> 24 25 0 24 22] 98 dc [ 24 25 -1 24 22] 70 dc [<7FFFE0FFFFE0FFFFE0E0E0E0E0E0E0E0E0E0E0E0E000E00000E00000E00000E00000E0 0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00007FC000FFE 0007FC00> 24 25 -1 24 22] 84 dc [<7E0000FE00007E00000E00000E00000E00000E00000E3C000EFF000FFF800F87800F03 800F03800E03800E03800E03800E03800E03800E03800E03800E03800E03807FC7F0FFE7 F87FC7F0> 24 25 0 24 22] 104 dc [ 24 18 -1 17 22] 119 dc [<001F00007F8000FF8001E78001C30001C00001C0007FFF00FFFF00FFFF0001C00001C0 0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0003FFE007FFF 003FFE00> 24 25 -1 24 22] 102 dc [<7E1F80FE3F807E1F800E03800E03800E03800E03800E03800E03800E03800E03800E03 800E03800E07800F0F800FFFF007FFF803E3F0> 24 18 0 17 22] 117 dc [<7F1FC0FF9FE07F1FC01C07000E07000E0E000E0E00070E00071C00071C00039C00039C 0003980001B80001B80000F00000F00000F00000E00000E00000E00001C00079C0007BC0 007F80003F00003C0000> 24 27 -1 17 22] 121 dc [<7F1FC0FF1FE07F1FC01C07001E0F000E0E000E0E000E0E00071C00071C00071C00071C 0003B80003B80003B80001F00001F00000E000> 24 18 -1 17 22] 118 dc [ 24 3 -2 13 22] 45 dc [ 24 25 -1 24 22] 87 dc [ 16 25 -3 24 22] 73 dc [ 24 3 -2 -2 22] 95 dc [<07C7001FF7003FFF007C3F00781F00F00F00F00700E00700E00700E00700E00700F007 00F00F00781F007C3F003FFF001FF70007C7000007000007000007000007000007000007 00003FE0007FF0003FE0> 24 27 -2 17 22] 113 dc [<387C7E7E3E0E1E3C7CF860> 8 11 -7 4 22] 44 dc [<7E1FC0FF3FE07F1FC01D07001D87001D87001D87001DC7001DC7001CC7001CC7001CE7 001CE7001CE7001C67001C67001C77001C77001C37001C37001C37001C17007F1F00FF9F 007F0F00> 24 25 -1 24 22] 78 dc [<00E001E007C007000F001E003C0038007800700070007000F000E000E000E000E000E0 00E000E000F000700070007000780038003C001E000F00070007C001E000E0> 16 33 -6 28 22] 40 dc [<00F80003FE000FFF001F0F803E3F803C7F8078FFC071E7C0F1C3C0E3C3C0E381C0E381 C0E381C0E381C0E381C0E3C3C0F1C38071E78078FF003C7E003E3C001F03C00FFFC003FF 0000FC00> 24 25 -2 24 22] 64 dc [ 16 33 -4 28 22] 41 dc [<03000F803FE0FDF8F0784010> 16 6 -4 24 22] 94 dc [ 24 25 -1 24 22] 76 dc [<00F80003FE000FFF001F0F003E0F003C0F00780600700000F00000F3F800EFFE00FFFE 00F80F00F00780F00780E00380F00380F00380700380780780780F003C1F001FFE000FF8 0003E000> 24 25 -2 24 22] 54 dc [<7F1FC0FFBFE07F1FC01C07001C07001C07001C07001C07001C07001C07001FFF001FFF 001FFF001C07001C07001C07001C07001C07001C07001C07001C07001C07007F1FC0FFBF E07F1FC0> 24 25 -1 24 22] 72 dc [<3FFFC07FFFC07FFFC0700780700F00701E00003C0000780001F00003E0000780000F00 001E01C03C01C07801C0FFFFC0FFFFC0FFFFC0> 24 18 -1 17 22] 122 dc [<3FFE003FFE003FFE003800003800003800003800003800003800003800003BF0003FFC 003FFE003C0F00300700000780000380600380F00380F00780F00F00F81F007FFE001FF8 0007E000> 24 25 -2 24 22] 53 dc [ 16 11 -4 24 22] 34 dc [<7FF800FFFE007FFF001C0F001C07801C03C01C01C01C01C01C01E01C00E01C00E01C00 E01C00E01C00E01C00E01C00E01C00E01C01C01C01C01C03C01C07801C0F807FFF00FFFE 007FF800> 24 25 0 24 22] 68 dc [<1FFC003FFE007FFF00780F00F00780E00380E00380E00380E00380E00380E00380E003 80E00380E00380E00380E00380E00380E00380E00380F00780F00780780F007FFF003FFE 001FFC00> 24 25 -2 24 22] 79 dc [<7F07F0FF8FF87F07F01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01 C01C01C01C01C01C01C01C01C01C01C01C01C01C01C00E03800E038007070007FF0003FE 0000F800> 24 25 0 24 22] 85 dc [ 24 25 -1 24 22] 89 dc [<387C7C7C380000000000000000387C7C7C3C1C3C38F8F060> 8 24 -7 17 22] 59 dc [ 24 25 -1 24 22] 77 dc [<7FF800FFFE007FFF001C0F001C07801C03801C03801C03801C07801C07001FFF001FFE 001FFE001C1F001C03801C03C01C01C01C01C01C01C01C01C01C03C01C07807FFF80FFFF 007FFC00> 24 25 -1 24 22] 66 dc 4 @bop1 cmbx10.518 sf 0 50(1)s 28(Ov)h -2(erview)h cmsy10.300 sf 233 461(\021)s 62 511(f)s 83 560(g)s 227 710(\021)s 62 760(f)s 83 809(g)s 234 959(\021)s 62 1009(f)s 83 1059(g)s 611 1569(\021)s 62 1619(f)s cmbx10.300 sf 0 461(except.h)s 0 710(except.c)s 0 959(ex)s 17(test.c)h 552 1569(M)s cmbx10.432 sf 0 1333(1.1)s 24(Con\014guration)h 24(Header)h 22(Notice)h cmsl10.300 sf 83 511(Sp)s 1(eci\014cation)h 14(\014le)h 83 760(Implem)s -1(en)h -1(tation)h 12(\014le)h 83 1009(T)s -3(est)h 14(program)h 13(\014le)h 0 1569(Con\014guration)s 13(header)h 15(notice)h cmr7.300 sf 0 610(This)s 12(macro)h 10(is)h 12(attac)h -1(hed)h 10(to)h 11(an)h 11(output)h 12(\014le.)h 0 859(This)s 12(macro)h 10(is)h 12(attac)h -1(hed)h 10(to)h 11(an)h 11(output)h 12(\014le.)h 0 1108(This)s 12(macro)h 10(is)h 12(attac)h -1(hed)h 10(to)h 11(an)h 11(output)h 12(\014le.)h cmr10.300 sf 0 137(This)s 14(o)h -1(v)h -1(erview)h 14(section)h 14(pro)h -1(vides)h 14(general)h 14(informatio)h -1(n)h 12(ab)h 1(out)h 14(this)h 14(pac)h -1(k)h -2(age.)h 0 212(Pro)s 1(cessing)h 17(this)h 16(\014le)h 16(using)h 15(F)h -3(unnelW)h -3(eb)h 16(will)h 14(result)h 17(in)h 15(the)h 17(pro)h 1(duction)h 16(of)h 15(the)h 16(sp)h 1(eci\014cation)h 17(and)h 15(implem)h -1(en)h -1(tation)h 0 262(\014les)s 15(de\014ned)h 16(b)h 1(elo)h -1(w.)h 21(In)h 14(addition)h 14(a)h 15(test)h 16(program)h 13(for)h 14(testing)h 15(this)h 15(pac)h -1(k)h -2(age)h 15(will)h 13(b)h 1(e)h 16(generated.)h 22(This)h 14(F)h -3(unnelW)h -3(eb)h 0 311(source)s 13(\014le)h 12(and)h 11(the)h 12(\014les)h 13(that)h 11(it)h 12(generates)h 13(are)h 12(Cop)h -1(yrigh)h -1(t)h 11(\(C\))h 12(Ross)h 11(William)h -1(s)h 10(1993.)h 16(See)h 12(the)h 13(con\014guration)h 11(header)h 0 361(notice)s 14(b)h 1(elo)h -1(w.)h 176 461([1])s 381 511([18])s 170 710([2])s 438 760([31])s 177 959([3])s 396 1009([74])s 0 1183(The)s 14(remainder)h 14(of)h 13(this)h 14(o)h -1(v)h -1(erview)h 14(section)h 14(con)h -1(tains)h 14(only)h 13(descriptions.)h 19(It)h 14(do)h 1(es)h 15(not)h 14(con)h -1(tain)h 13(an)h -1(y)h 13(co)h 1(de.)h 0 1420(The)s 13(follo)h -1(wing)h 11(notice)h 13(applies)h 13(to)h 13(this)h 13(F)h -3(unnelW)h -3(eb)h 13(source)h 14(\014le)h 13(as)h 13(w)h -1(ell)h 12(as)h 14(to)h 12(the)h 14(F)h -3(unnelW)h -3(eb)h 13(output)h 13(\014les)h 13(to)h 13(whic)h -1(h)h 0 1469(it)s 14(is)h 13(written.)h 507 1569([4])s 965 2770(4)s cmtt10.300 sf 83 1669(/************)s -1(*****)h -1(****)h -1(*****)h -1(*****)h -1(*****)h -1(*****)h -1(*****)h -1(****)h -1(*****)h -1(*****)h -1(*****)h -1(*****)h -1(***/)h 83 1719(/*)s 21(Package)h 21(name)h 43(:)h 21(Except.)h 1023(*/)h 83 1768(/*)s 21(Version)h 152(:)h 21(1.0)h 1111(*/)h 83 1818(/*)s 21(Completed)h 108(:)h 21(April)h 21(1993.)h 936(*/)h 83 1868(/*)s 21(Released)h 130(:)h 21(29)h 21(September)h 20(1993.)h 784(*/)h 83 1918(/*)s 21(First)h 21(created)h 21(:)h 21(This)h 21(package)h 20(was)h 22(first)h 20(created)h 21(in)h 21(April)h 21(1993.)h 195(*/)h 83 1968(/*)s 21(Summary)h 152(:)h 21(This)h 21(package)h 20(provides)h 21(Ada-like)h 20(exceptions)h 19(for)h 22(C.)h 130(*/)h 83 2017(/*)s 21(Components)h 86(:)h 21(except.fw)h 42(-)h 21(FunnelWeb)h 20(source)h 21(file.)h 413(*/)h 83 2067(/*)s 370(except.h)h 64(-)h 21(Exported)h 21(header)h 20(file.)h 435(*/)h 83 2117(/*)s 370(except.c)h 64(-)h 21(Implementation)h 19(file.)h 457(*/)h 83 2167(/*)s 370(ex_test.c)h 42(-)h 21(C)h 22(test)h 21(program.)h 565(*/)h 83 2217(/*)s 21(Requires)h 130(:)h 21(style.h,)h 20(as.h,)h 21(as.c.)h 740(*/)h 83 2267(/*)s 21(Author)h 174(:)h 21(Ross)h 21(N.)h 21(Williams)h 21(\(ross@guest)h -1(.ade)h -1(laide)h -1(.edu.)h -1(au\))h 194(*/)h 83 2316(/*)s 370(Rocksoft^tm)h 20(Pty)h 21(Ltd)h 762(*/)h 83 2366(/*)s 370(16)h 21(Lerwick)h 21(Avenue,)h 20(Hazelwood)h 20(Park)h 21(5066,)h 21(Australia.)h 85(*/)h 83 2416(/*)s 21(FTP)h 22(Archive)h 64(:)h 21(This)h 21(file)h 21(can)h 21(be)h 22(found)h 20(in)h 632(*/)h 83 2466(/*)s 370("ftp.adelaide)h -1(.edu.)h -1(au/pu)h -1(b/fun)h -1(nelw)h -1(eb/ex)h -1(ample)h -1(s/")h 194(*/)h 83 2516(/*)s 21(Disclaimer)h 86(:)h 21(This)h 21(program)h 20(is)h 22(distributed)h 19(WITHOUT)h 21(ANY)h 21(WARRANTY;)h 107(*/)h 83 2565(/*)s 370(without)h 20(even)h 21(the)h 22(implied)h 20(warranty)h 20(of)h 21(MERCHANTABILITY)h 41(*/)h 83 2615(/*)s 370(or)h 21(FITNESS)h 21(FOR)h 21(A)h 22(PARTICULAR)h 19(PURPOSE.)h 391(*/)h 83 2665(/*)s 21(Copyright)h 108(:)h 21(Copyright)h 20(\(C\))h 21(Ross)h 21(Williams)h 20(1993.)h 457(*/)h 15 2 50 959 r 4 @eop 5 @bop0 /cmti10.300 127 @newfont cmti10.300 sf [<01E007100C1018083810701070607F80E000E000E000E000E000E0086010602030C01F 00> 16 18 -5 17 19] 101 dc [<070E0019910010E38020E38041C30041C00001C00001C0000380000380000380000380 00070200670200E70400CB04008B080070F000> 24 18 -3 17 19] 120 dc [<01F007080C08181C3838300070007000E000E000E000E000E000E008E010602030C01F 00> 16 18 -5 17 19] 99 dc [<07870004D98008E0C008E0C011C0E011C0E001C0E001C0E00381C00381C00381C00381 800703800703000707000706000E8C000E70000E00000E00001C00001C00001C00001C00 003C0000FF8000> 24 26 -1 17 21] 112 dc [<00C001C001C001C00380038003800380FFE00700070007000E000E000E000E001C001C 001C001C00384038403840388019000E00> 16 26 -3 25 14] 116 dc [<01800380010000000000000000000000000000001C002600470047008E008E000E001C 001C001C0038003800710071007100720072003C00> 16 28 -4 27 13] 105 dc [<01E007180C0C180C380C300E700E700EE01CE01CE01CE018E038E030E06060C031801E 00> 16 18 -5 17 21] 111 dc [<3C3C002646004687004707008E07008E07000E07000E07001C0E001C0E001C0E001C1C 00381C40381C40383840383880701900300E00> 24 18 -4 17 23] 110 dc [<01F006080C080C1C18181C001F001FC00FF007F0007800386030E030C030806060C01F 00> 16 18 -3 17 17] 115 dc [<0FC00001C00001C0000380000380000380000380000700000700000700000700000E78 000E8C000F0E000E0E001C0E001C0E001C0E001C0E00381C00381C00381C003838007038 80703880707080707100E03200601C00> 24 29 -3 28 21] 104 dc [<03CC063C0C3C181C3838303870387038E070E070E070E070E0E2C0E2C0E261E462643C 38> 16 18 -5 17 21] 97 dc [<001F80000380000380000700000700000700000700000E00000E00000E00000E0003DC 00063C000C3C00181C00383800303800703800703800E07000E07000E07000E07000E0E2 00C0E200C0E20061E4006264003C3800> 24 29 -5 28 21] 100 dc [<1F800380038007000700070007000E000E000E000E001C001C001C001C003800380038 0038007000700070007000E400E400E400E40068003800> 16 29 -4 28 11] 108 dc [<3C3C26C2468747078E068E000E000E001C001C001C001C003800380038003800700030 00> 16 18 -4 17 18] 114 dc cmbx10.432 sf [<00FF800003FFF0000FFFFC003F03FF007C00FF807C007FC0FE007FC0FF003FE0FF003F E0FF003FE0FF001FE07E001FE03C003FE000003FE000003FC000003FC000007F8000007F 800000FF000001FE000001FC000003F0000007E000000FC000001F0000003E0000007C00 E0007800E000F000E001E001C0038001C0070001C00FFFFFC01FFFFFC03FFFFFC07FFFFF C0FFFFFF80FFFFFF80FFFFFF80> 32 39 -3 38 34] 50 dc [ 64 41 -3 40 65] 77 dc [ 40 27 -1 26 36] 118 dc cmr7.300 sf [ 16 13 -1 12 17] 118 dc [ 16 20 -1 19 17] 107 dc [<0C001C00EC000C000C000C000C000C000C000C000C000C000C000C000C000C000C000C 00FFC0> 16 19 -3 18 17] 49 dc [<0FC0003000084008600870083C103F600F800FE031F06078C01CC00CC00CC00C601830 300FC0> 16 19 -1 18 17] 56 dc [<40E060202020404080> 8 9 -3 2 9] 44 dc [<0FC030707038703870380038003000E00FC0007000380018001C601CF01CF018E03860 701FC0> 16 19 -1 18 17] 51 dc [<40007FFC7FF8401080108020004000800100010003000200060006000E000E000E000E 000E000400> 16 20 -2 19 17] 55 dc [<006000E000E00160026006600C600860106020606060C060FFFC006000600060006000 6003FC> 16 19 -1 18 17] 52 dc cmtt10.300 sf [<000180000780001F80003E0000F80001F00007C0000F80003E0000FC0000F00000FC00 003E00000F800007C00001F00000F800003E00001F80000780000180> 24 21 -2 22 22] 60 dc [ 24 21 -2 22 22] 62 dc [<0FE03FF87FFCF01EF00EF00E601E007C00F801F003E003C00380038003800380030000 000000000000000300078007800300> 16 25 -3 24 22] 63 dc [<7F1F807F3F807F1F800E1E000E1C00073C0007380003B80003F00001F00001E00000E0 0001E00001F00003F00003B80007B800071C00071C000E0E000E0E001C07007F1FC0FF1F E07F1FC0> 24 25 -1 24 22] 88 dc [<003000780078003000000000000000001FF81FF81FF800380038003800380038003800 380038003800380038003800380038003800380038003800386070F0F0FFE07FC03F80> 16 35 -2 25 22] 106 dc cmr10.300 sf [<007FC001C1C00303C00703C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFFF C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 C00E01C00E01C00E01C00E01C07FCFF8> 24 29 0 28 23] 13 dc [<60F0F8680808081010204080> 8 12 -4 28 12] 39 dc [<00C001E001E000C000000000000000000000000000000FE000E000E000E000E000E000 E000E000E000E000E000E000E000E000E000E000E000E000E000E000E060E0F0C0F1C061 803E00> 16 37 3 28 13] 106 dc [<03C1000C3300180B00300F00700700700700E00700E00700E00700E00700E00700E007 00600700700700300F00180F000C370007C7000007000007000007000007000007000007 00000700003FE0> 24 26 -2 17 22] 113 dc [<003F07E00001C09C18000380F018000701F03C000E01E03C000E00E018000E00E00000 0E00E000000E00E000000E00E000000E00E00000FFFFFFFC000E00E01C000E00E01C000E 00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00 E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C007FC7FC FF80> 40 29 0 28 35] 14 dc [<60F0F0F0F0F0F0F060606060606060606060606060000000000060F0F060> 8 30 -4 29 12] 33 dc [<60F0F0600000000000000000000060F0F060> 8 18 -4 17 12] 58 dc [<01800180018001804182F18F399C0FF003C003C00FF0399CF18F418201800180018001 80> 16 18 -2 30 21] 42 dc [<007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C0000E01C0000E01C0 000E01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0 000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0 000E01C0007F87FC00> 32 29 0 28 24] 11 dc 5 @bop1 cmsy10.300 sf 83 739(g)s cmti10.300 sf 476 1025(exc)s -2(eptions)h 959 1125(hand)s 2(ler)h 1848 1175(r)s -2(aises)h cmbx10.432 sf 0 938(1.2)s 24(Abstract)h 0 1424(1.3)s 24(Motiv)h -4(ation)h cmr7.300 sf 0 789(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nitions)h 13(18,)h 10(31,)h 11(and)h 11(74.)h cmtt10.300 sf 83 42(/*)s 370(However,)h 20(permission)h 20(is)h 21(granted)h 21(for)h 21(anyone)h 20(to)h 22(copy,)h 86(*/)h 83 91(/*)s 370(modify,)h 20(and)h 22(distribute)h 19(this)h 21(work)h 21(for)h 21(any)h 22(purpose,)h 107(*/)h 83 141(/*)s 370(commercial)h 20(or)h 21(non-commercial)h -1(,)h 20(so)h 21(long)h 21(as)h 22(this)h 21(notice)h 42(*/)h 83 191(/*)s 370(is)h 21(included)h 21(verbatim,)h 20(and)h 21(so)h 21(long)h 21(as)h 21(all)h 305(*/)h 83 241(/*)s 370(modifications)h 19(are)h 21(recorded)h 21(in)h 21(the)h 21(change)h 21(log)h 21(below.)h 64(*/)h 83 291(/*)s 21(Changes)h 152(:)h 21(Please)h 21(log)h 21(any)h 21(changes)h 20(to)h 22(this)h 21(software)h 20(either)h 20(in)h 22(the)h 21(*/)h 83 340(/*)s 370(originating)h 20(FunnelWeb)h 20(source)h 20(file,)h 21(or,)h 21(if)h 21(you)h 22(must,)h 64(*/)h 83 390(/*)s 370(in)h 21(the)h 22(C)h 21(source)h 21(files)h 21(produced)h 20(from)h 21(the)h 21(FunnelWeb)h 107(*/)h 83 440(/*)s 370(file.)h 1067(*/)h 83 490(/*)s 21(----)h 980(*/)h 83 540(/*)s 21(??-Apr-93:)h 20(RNW:)h 21(Created)h 20(this)h 21(package.)h 718(*/)h 83 589(/*)s 21(29-Sep-93:)h 20(RNW:)h 21(Released)h 20(this)h 21(package.)h 696(*/)h 83 639(/*)s 21(----)h 1023(*/)h 83 689(/************)s -1(*****)h -1(****)h -1(*****)h -1(*****)h -1(*****)h -1(*****)h -1(*****)h -1(****)h -1(*****)h -1(*****)h -1(*****)h -1(*****)h -1(***/)h 551 1225(EX)s 15(RAISE)h 943 1561(setjmp)s 359(longjmp)h 1312 1760(jmpbuf)s 518 1885(jmpbuf)s 1700 2059(jmpbuf)s 346 2183(setjmp)s 96(longjmp)h cmr10.300 sf 0 1025(This)s 15(pac)h -1(k)h -2(age)h 15(pro)h -1(vides)h 15(an)h 213(facilit)h -1(y)h 14(for)h 15(C)h 15(that)h 15(is)h 15(v)h -1(ery)h 15(simila)h -1(r)h 14(to)h 15(the)h 15(exceptions)h 16(facilit)h -1(y)h 14(in)h 14(the)h 16(Ada)h 0 1075(programm)s -1(ing)h 14(language.)h 25(An)h 17(exception)h 17(is)h 17(a)h 16(con)h -1(trol-\015o)h -1(w)h 16(ev)h -1(en)h -1(t)h 17(that)h 16(causes)h 18(con)h -1(trol)h 17(to)h 16(b)h 1(e)h 17(transferred)h 19(up)h 16(the)h 0 1125(stac)s -1(k)h 17(\(with)h 17(the)h 18(stac)h -1(k)h 17(un)h -1(winding)h 16(as)h 17(it)h 16(go)h 1(es\))h 18(un)h -1(til)h 16(a)h 170(for)h 16(the)h 18(particular)h 16(exception)h 18(in)h -1(v)h -1(ok)h -1(ed)h 16(is)h 17(found.)h 0 1175(The)s 15(exception)h 15(facilit)h -1(y)h 12(is)h 14(totally)h 13(under)h 15(the)h 15(clien)h -1(t's)h 14(con)h -1(trol.)h 19(The)h 14(clien)h -1(t)h 14(de\014nes)h 16(a)h 14(set)h 15(of)h 14(exceptions,)h 15(and)h 0 1225(an)s 15(exception)h 17(ev)h -1(en)h -1(t)h 16(b)h -1(y)h 16(calling)h 183(.)h 14(Other)h 17(functions)h 16(de\014ned)h 17(b)h -1(y)h 15(the)h 16(clien)h -1(t)h 16(can)h 16(catc)h -1(h)h 16(the)h 16(exceptions)h 17(b)h -1(y)h 0 1274(name.)s 17(The)h 14(exception)h 15(facilit)h -1(y)h 12(is)h 14(useful)h 14(for)h 13(error)h 15(handling)h 13(and)h 13(pac)h -1(k)h -2(age)h 14(in)h -1(terface)h 14(de\014nition.)h 0 1511(The)s 16(motiv)h -3(atio)h -1(n)h 13(for)h 15(creating)h 16(this)h 15(pac)h -1(k)h -2(age)h 15(w)h -1(as)h 15(to)h 15(pro)h -1(vide)h 14(a)h 15(simpler,)h 14(safer,)h 15(and)h 15(more)h 14(sophisticated)h 16(non-lo)h 1(cal)h 0 1561(jump)s 9(facilit)h -1(y)h 9(than)h 11(is)h 11(pro)h -1(vided)h 11(b)h -1(y)h 10(the)h 12(standard)h 11(ANSI)h 153(\(ANSI)h 11(7.6.1.1\))h 9(and)h 174(\(7.6.2.1)h -1(\))h 9(primitiv)h -1(es.)h 0 1611(In)s 12(particular,)h 12(the)h 13(biggest)h 12(problem)h 11(with)h 12(the)h 13(ANSI)h 12(functions)h 12(is)h 13(that)h 12(they)h 13(require)h 13(that)h 12(the)h 13(thro)h -1(w)h -1(er)h 13(and)h 12(catc)h -1(her)h 0 1660(of)s 18(the)h 19(con)h -1(trol)h 19(ev)h -1(en)h -1(t)h 19(b)h 1(e)h 19(su\016cien)h -1(tly)h 19(co)h 1(ordinated)h 19(to)h 18(share)h 20(a)h 18(single)h 18(global)h 17(v)h -2(ariable)h 18(con)h -1(taining)h 17(the)h 20(catc)h -1(her's)h 0 1710(con)s -1(text.)h 26(The)h 17(requiremen)h -1(t)h 17(for)h 16(this)h 16(link)h 15(is)h 17(unacceptable)h 17(b)h 1(ecause)h 18(it)h 16(precludes)h 18(the)h 17(use)h 18(of)h 15(non-lo)h 1(cal)h 16(jumps)h 15(as)h 0 1760(an)s 13(elemen)h -1(t)h 13(of)h 12(the)h 14(in)h -1(terface)h 14(of)h 12(pac)h -1(k)h -2(ages)h 13(ha)h -1(ving)h 12(an)h 13(abstract)h 14(clien)h -1(t)h 14(\(unless)h 146(s)h 12(are)h 14(passed)h 14(as)h 13(parameters)h 13(-)h 0 1810(yuk!\).)s 18(This)h 13(lac)h -1(k)h 14(of)h 13(abstraction)h 14(results)h 15(in)h 14(the)h 14(follo)h -1(wing)h 11(disadv)h -2(an)h -1(tages:)h 0 1885(*)s 17(A)h 17(global)h 16(v)h -2(ariable)h 16(of)h 16(t)h -1(yp)h 1(e)h 166(m)h -1(ust)h 16(b)h 1(e)h 17(agreed)h 18(up)h 1(on)h 17(b)h 1(et)h -1(w)h -1(een)h 19(thro)h -1(w)h -1(er)h 18(and)h 17(catc)h -1(her)h 18(for)h 17(eac)h -1(h)h 18(p)h 1(oten)h -1(tial)h 0 1934(thro)s -1(w.)h 25(The)h 16(result)h 17(is)h 16(a)h 16(proliferation)h 15(of)h 15(global)h 15(con)h -1(text)h 17(v)h -2(ariables,)h 15(whose)h 17(v)h -2(alidit)h -1(y)h 14(at)h 16(an)h -1(y)h 15(particular)h 16(instan)h -1(t)h 16(is)h 0 1984(often)s 14(unclear.)h 0 2059(*)s 14(If)h 13(the)h 14(programm)h -1(er)h 13(wishes)h 14(to)h 14(set)h 15(up)h 14(a)h 13(nest)h 15(of)h 13(handlers)h 15(for)h 13(a)h 14(particular)h 13(condition,)h 13(the)h 14(global)h 157(bu\013er)h 0 2109(for)s 14(the)h 14(condition)h 13(m)h -1(ust)h 13(b)h 1(e)h 15(explicitly)h 12(and)h 14(carefully)h 14(sa)h -1(v)h -1(ed)h 14(and)h 13(restored)h 16(b)h -1(y)h 14(eac)h -1(h)h 14(function)h 14(in)h 13(the)h 15(nest.)h 0 2183(*)s 15(The)h 16(in)h -1(terface)h 16(to)h 162(and)h 183(is)h 16(a)h 15(bit)h 15(ra)h -1(w,)h 15(requiring)h 16(\014ddling)h 14(with)h 15(in)h -1(teger)h 16(v)h -2(alues)h 16(and)h 15(em)h -1(b)h 1(edding)h 0 2233(calls)s 13(in)h 14(conditional)h 12(statemen)h -1(ts.)h 0 2308(A)s 14(b)h 1(etter)h 15(solution)h 14(to)h 13(the)h 15(problem)h 12(of)h 14(non-lo)h 1(cal)h 12(jumps)h 13(is)h 14(a)h 13(system)h 14(of)h 13(exceptions.)h 965 2770(5)s 14 2 598 1225 r 5 @eop 6 @bop0 cmbx10.300 sf [<7FFFFC7FFFFC7E01F87803F87003F0E007E0E007E0C00FC0C01FC0C01F80003F00007F 00007E0000FC0000FC0001F80003F80603F00607E0060FE0060FC00E1F800E1F801C3F00 1C7F003C7E00FCFFFFFCFFFFFC> 24 28 -3 27 29] 90 dc cmr7.300 sf [ 24 20 -1 19 25] 78 dc [ 24 20 -1 19 22] 69 dc [ 24 20 -1 19 25] 86 dc [ 24 20 -1 19 24] 82 dc cmsl10.300 sf [<0FFFFFE000F801E000F000E000F0004000F0004000F0004000F0004001E0004001E040 4001E0400001E0400001E0C00001E1C00003FF800003C1800003C0800003C0800003C080 0003C080800780008007800080078001000780010007800300078006000F000E000F003E 00FFFFFC00> 32 28 -2 27 28] 69 dc [<1FE3FC07C1E003818001C10001C20000E40000EC00007800007000003800007800009C 00011E00020E000407000C07003C0780FE1FF0> 24 18 -1 17 22] 120 dc [<000F800039C00061C000E3C001C18001C00001C00001C0000380000380000380003FF8 000380000380000700000700000700000700000700000700000E00000E00000E00000E00 000E00000E00001C00001E0000FFC000> 24 29 -1 28 13] 102 dc [<000020000000300000007000000070000000F0000000F0000001F00000037800000278 000006780000047800000C780000087C0000183C0000103C0000203C0000203C0000403C 0000403E0000FFFE0000801E0001001E0001001E0002001E0002000F0004000F0004000F 001E001F00FF80FFF0> 32 29 -1 28 31] 65 dc [<3F00000F00000E00000E00000E00000E00000E00000E00001C00001C00001C00001C78 001D86001E03003C03803801803801803801C03801C03801C07003807003807003807003 00700700700E00F00C00CC300083C000> 24 29 -4 28 23] 98 dc [<07E00001E00001C00001C00001C00001C00001C00001C0000380000380000380000387 F80381E003818007020007040007080007100007700007F8000F38000E3C000E1C000E1E 000E0E000E0F001C07001C0F80FF9FE0> 24 29 -1 28 22] 107 dc cmbx10.432 sf [<00000E0000001E0000003E0000007E000000FE000000FE000001FE000003FE0000077E 00000E7E00000E7E00001C7E0000387E0000707E0000E07E0000E07E0001C07E0003807E 0007007E000E007E000E007E001C007E0038007E0070007E00E0007E00FFFFFFF8FFFFFF F8FFFFFFF80000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE 00007FFFF8007FFFF8007FFFF8> 32 39 -2 38 34] 52 dc [ 40 42 -3 41 38] 104 dc [ 40 41 -3 40 45] 69 dc [ 40 27 -1 26 36] 120 dc [<01FF000FFFE03E03F87803FC7801FCFE01FEFE01FEFE01FEFE01FE7C01FE3803FC0003 FC0007F0000FE0000F80001F00001E00003C00003C000078000078000070000070000070 0000700000700000700000000000000000000000000000000000000000700001FC0003FE 0003FE0003FE0003FE0003FE0001FC00007000> 24 42 -4 41 32] 63 dc [<0C0003000F803F000FFFFE000FFFFE000FFFFC000FFFF8000FFFE0000FFFC0000FFE00 000E0000000E0000000E0000000E0000000E0000000E0000000E7FC0000FFFF8000F80FE 000E007F000C003F8000003F8000001FC000001FC000001FE000001FE018001FE07E001F E0FE001FE0FE001FE0FE001FE0FE001FE0FE001FC078003FC078003F803C007F001F01FE 000FFFFC0003FFF00000FF8000> 32 39 -3 38 34] 53 dc [<007F806003FFF0E00FFFFFE01F807FE03F001FE07E0007E07E0003E07C0003E0FC0001 E0FC0001E0FC0000E0FE0000E0FE0000E0FF000000FFC000007FFE00007FFFE0003FFFFC 003FFFFF001FFFFF8007FFFFC003FFFFE000FFFFF00007FFF000007FF000000FF8000007 F8000003F8E00003F8E00001F8E00001F8E00001F8F00001F8F00001F0F80003F0FC0003 E0FF0007E0FFE01FC0FFFFFF00E0FFFE00C01FF000> 32 41 -4 40 38] 83 dc cmti10.300 sf [<1E03270747074707870E870E0E0E0E0E1C1C1C1C1C1C1C1C38383838183818381C7007 F00070007000E0E0C0E1C0818047003C00> 16 26 -4 17 20] 121 dc [<3C1E0780266318C04683A0E04703C0E08E0380E08E0380E00E0380E00E0380E01C0701 C01C0701C01C0701C01C070380380E0388380E0388380E0708380E0710701C0320300C01 C0> 32 18 -4 17 34] 109 dc [<0003F020001E0C60003002E000E003C001C001C0038001C0070000C00E0000801E0000 801C0000803C0000803C000000780000007800000078000000F0000000F0000000F001FF C0F0001E00F0001C00F0001C00F0001C00F0001C00700038007000380038003800180078 000C0090000707100001F80000> 32 30 -6 28 32] 71 dc [<1E0300270700470700470700870E00870E000E0E000E0E001C1C001C1C001C1C001C1C 003838803838801838801839001C5900078E00> 24 18 -4 17 22] 117 dc [<3F00070007000E000E000E000E001C001C001C001C0039C03E60383038307038703870 387038E070E070E070E060E0E0C0C0C1C0618063003C00> 16 29 -5 28 19] 98 dc [<0006000E0006000000000000000000000000000000F001180218021804380438003800 38007000700070007000E000E000E000E001C001C001C001C003800380C300E700CE0078 00> 16 36 1 27 13] 106 dc [<1E06270E470E4706870287020E020E021C041C041C041C0818083808181018200C4007 80> 16 18 -4 17 19] 118 dc [<0001FC000703000C03001C07001C0300180000380000380000380000380000700007FF FC00701C00701C00701C00E03800E03800E03800E03800E07001C07001C07001C07001C0 E201C0E201C0E20380E4038064038038038000030000070000060000C60000E40000CC00 00700000> 24 37 1 28 23] 12 dc [<0003C0000670000C70001C60001C00001C0000380000380000380000380000380003FF 8000700000700000700000700000700000E00000E00000E00000E00000E00001C00001C0 0001C00001C00001C000038000038000038000030000030000070000C60000E60000CC00 00780000> 24 37 1 28 13] 102 dc [<1E01832703874703874703838707018707010E07010E07011C0E021C0E021C0E021C0E 04180C04181C04181C081C1C100C263007C3C0> 24 18 -4 17 28] 119 dc [<183878380808101020404080> 8 12 -3 3 13] 44 dc [<0FC00001C00001C0000380000380000380000380000700000700000700000700000E0F 000E11000E23800E43801C83001C80001D00001E00003F800039C00038E00038E00070E2 0070E20070E20070E400E06400603800> 24 29 -3 28 19] 107 dc [<00F3018F030F06070E0E0C0E1C0E1C0E381C381C381C381C383830383038187818F00F 700070007000E000E0C0C0E1C0C3007E00> 16 26 -3 17 19] 103 dc [<3078F060> 8 4 -4 3 13] 46 dc cmtt10.300 sf [<7FFF00FFFF80FFFF80000000000000000000000000000000FFFF80FFFF807FFF00> 24 11 -2 17 22] 61 dc [<01C00001C00001C00001C00001C00001C00001C00001C000FFFF80FFFF80FFFF8001C0 0001C00001C00001C00001C00001C00001C00001C000> 24 19 -2 21 22] 43 dc cmr10.300 sf [<7FFC70386038407040F040E041C003C0038007000F040E041C043C0C380870087038FF F8> 16 18 -1 17 18] 122 dc [ 48 1 0 11 42] 124 dc 6 @bop1 cmbx10.300 sf 866 552(Z)s cmsy10.300 sf 907 552(\021)s 62 602(f)s 83 1100(g)s cmr7.300 sf 0 1150(This)s 12(macro)h 10(is)h 12(NEVER)h 11(in)h -1(v)h -1(ok)h -1(ed.)h cmsl10.300 sf 0 552(Example)s 12(of)h 14(an)h 13(Ada)h 14(exception)h 15(handling)h 12(blo)h 1(c)h -1(k)h cmbx10.432 sf 0 42(1.4)s 24(What)h 23(is)h 22(an)h 24(Exception?)h 0 1947(1.5)s 24(Exceptions)h 22(as)h 23(Activ)h -2(e)h 21(Statuses)h cmti10.300 sf 1094 178(r)s -2(aises)h 266 1548(dynamic)s -2(al)h 2(ly)h 0 2208(Gr)s -2(adual)h 2(ly)h 21(these)h 20(obje)h -2(ctives)h 21(have)h 21(b)h -2(e)h -2(en)h 21(sacri\014c)h -2(e)h -2(d)h 20(in)h 21(favour)h 21(of)h 20(p)h -2(ower,)h 21(supp)h -2(ose)h -2(d)h 2(ly)h 22(achieve)h -2(d)h 21(by)h 21(a)h 21(plethor)h -2(a)h 20(of)h 0 2258(fe)s -2(atur)h -2(es)h 16(and)h 17(notational)h 18(c)h -2(onventions,)h 17(many)h 18(of)h 16(them)h 17(unnc)h -2(essary)h 17(and)h 18(some)h 17(of)h 16(them,)h 17(like)h 16(exc)h -2(eption)h 17(hand)h 2(ling,)h 0 2308(even)s 15(danger)h -2(ous.)h 1475 2433(actively)s 934 2482(p)s -2(assively)h cmtt10.300 sf 719 129(goto)s 904 178(goto)s 849(raise)h 196 228(raise)s 20(sloth)h 15(exception;)h 524 278(sloth)s 15(exception)h 83 652(declare)s 148 702(n)s 22(:)h 22(integer)h 20(:=)h 21(2*x+y;)h 83 751(begin)s 148 801(sloth_action\(n\))s -1(;)h 148 851(walrus_action\(n)s -1(*n\);)h 83 901(exception)s 148 951(when)s 21(sloth_exceptio)h -1(n)h 85(=>)h 22(PUT\("The)h 20(sloth)h 86(exception)h 20(went)h 21(off."\);)h 148 1000(when)s 21(aardvark_excep)h -1(tion)h 19(=>)h 22(PUT\("The)h 20(aardvark)h 20(exception)h 20(went)h 21(off."\);)h 83 1050(end)s 731 1225(declare)s 89(exception)h 482 1274(exception)s 87(end)h 0 1324(sloth)s 15(exception)h 97(aardvark)h 14(exception)h 0 1374(sloth)s 15(action)h 63(walrus)h 15(action)h 842 1698(raise)s cmr10.300 sf 0 129(An)s 16(exception)h 16(is)h 16(essen)h -1(tially)h 16(a)h 15(non-lo)h 1(cal)h 118(to)h 15(the)h 17(nearest)h 17(dynamicall)h -1(y)h 14(enclosing)h 15(target)h 17(lab)h 1(el)h 15(in)h 15(the)h 17(stac)h -1(k)h 0 178(of)s 14(susp)h 1(ended)h 17(functions.)h 21(T)h -3(o)h 14(execute)h 17(an)h 14(exception)h 104(,)h 13(one)h 132(the)h 16(exception,)h 15(for)h 15(example)h 13(with)h 15(a)h 0 228(statemen)s -1(t)h 492(.)h 24(Con)h -1(trol)h 16(is)h 17(then)h 17(imm)h -1(ediately)h 15(transferred)h 18(to)h 16(the)h 18(nearest)h 18(dynamicall)h -1(y)h 0 278(enclosing)s 14(handler)h 14(\(lab)h 1(el\))h 13(for)h 337(.)h 0 353(In)s 14(fact)h 13(handlers)h 15(are)h 14(not)h 13(simply)h 12(lab)h 1(els,)h 13(but)h 14(blo)h 1(c)h -1(k-structured)h 15(constructs)h 16(that)h 14(de\014ne)h 14(an)h 14(execution)h 14(zone)h 15(within)h 0 403(whic)s -1(h)h 14(the)h 15(set)h 15(of)h 13(exceptions)h 16(that)h 14(they)h 15(handle)h 14(will)h 12(b)h 1(e)h 15(caugh)h -1(t.)h 19(F)h -3(or)h 14(example,)h 12(the)h 15(follo)h -1(wi)h -1(ng)h 12(exception)h 15(handling)h 0 452(anon)s -1(ymous)h 12(blo)h 1(c)h -1(k)h 14(mig)h -1(h)h -1(t)h 12(app)h 1(ear)h 15(in)h 13(a)h 14(program)h 12(written)h 14(in)h 14(the)h 14(Ada)h 14(programm)h -1(ing)h 11(language:)h 821 552([5])s 0 1225(In)s 12(the)h 13(ab)h 1(o)h -1(v)h -1(e)h 12(example,)h 10(the)h 13(co)h 1(de)h 13(b)h 1(et)h -1(w)h -1(een)h 178(and)h 220(is)h 12(the)h 13(co)h 1(de)h 13(within)h 11(whic)h -1(h)h 12(exceptions)h 14(will)h 10(b)h 1(e)h 0 1274(caugh)s -1(t.)h 17(The)h 11(co)h 1(de)h 12(b)h 1(et)h -1(w)h -1(een)h 219(and)h 87(con)h -1(tains)h 11(t)h -1(w)h -1(o)h 10(exception)h 12(handlers)h 11(that)h 11(will)h 10(catc)h -1(h)h 11(the)h 12(exceptions)h 337 1324(and)s 419(should)h 16(they)h 16(b)h 1(e)h 17(raised)h 17(b)h -1(y)h 16(the)h 17(execution)h 17(of)h 16(the)h 17(declarations)h 16(or)h 269 1374(or)s 293(.)h 17(An)h -1(y)h 14(other)h 15(exception)h 15(that)h 14(is)h 14(raised)h 14(within)h 13(the)h 15(con)h -1(trolled)h 14(zone)h 14(will)h 13(simply)h 0 1424(propagate)s 14(further)h 15(up)h 14(the)h 14(call)h 13(c)h -1(hain)h 14(to)h 13(the)h 15(nearest)h 15(handler)h 14(that)h 14(can)h 14(handle)h 14(it.)h 0 1499(A)s 11(most)h 10(imp)h 1(ortan)h -1(t)h 10(asp)h 1(ect)h 12(of)h 11(the)h 11(exceptions)h 13(pro)h -1(vided)h 11(b)h -1(y)h 11(Ada)h 11(and)h 11(this)h 11(pac)h -1(k)h -2(age)h 11(is)h 11(that)h 11(an)h 11(exception)h 12(propagates)h 0 1548(to)s 14(the)h 15(nearest)h 244(enclosing)h 14(exception)h 15(handler.)h 19(This)h 14(means)h 13(that,)h 14(apart)h 14(from)h 12(the)h 15(shared)h 15(kno)h -1(wledge)h 0 1598(of)s 14(the)h 15(de\014nition)h 15(of)h 14(the)h 15(exception,)h 15(there)h 16(is)h 15(not)h 15(necessarily)h 16(an)h -1(y)h 14(static)h 15(relationship)h 14(b)h 1(et)h -1(w)h -1(een)h 16(the)h 15(function)h 15(that)h 0 1648(raises)s 16(an)h 15(exception)h 16(and)h 15(the)h 16(function)h 15(that)h 15(catc)h -1(hes)h 17(it.)h 22(This)h 15(mak)h -1(es)h 14(exceptions)h 17(b)h 1(oth)h 15(dangerous)h 16(and)h 15(p)h 1(o)h -1(w)h -1(erful.)h 0 1698(Dangerous)s 15(b)h 1(ecause)h 16(a)h 15(programm)h -1(er)h 14(can)h 15(co)h 1(de)h 15(a)h 138(statemen)h -1(t)h 15(with)h 15(no)h 14(kno)h -1(wledge)h 15(of)h 14(the)h 15(function)h 15(catc)h -1(hing)h 0 1748(the)s 12(exception.)h 18(P)h -1(o)h -1(w)h -1(erful,)h 11(b)h 1(ecause)h 13(this)h 11(v)h -1(ery)h 11(abstraction)h 12(allo)h -1(ws)h 10(pac)h -1(k)h -2(ages)h 11(to)h 11(raise)h 12(exceptions)h 12(that)h 12(can)h 11(b)h 1(e)h 12(caugh)h -1(t)h 0 1797(b)s -1(y)h 14(abstract)h 14(clien)h -1(ts.)h 0 2034(Ov)s -1(er)h 11(the)h 10(y)h -1(ears,)h 11(exceptions)h 11(ha)h -1(v)h -1(e)h 10(receiv)h -1(ed)h 11(a)h 9(lot)h 10(of)h 9(bad)h 10(press)h 11(and)h 10(ha)h -1(v)h -1(e)h 9(generally)h 10(b)h 1(een)h 11(considered)h 11(to)h 10(b)h 1(e)h 10(dangerous)h 0 2084(things.)s 29(F)h -3(or)h 17(example,)h 16(T)h -3(on)h -1(y)h 17(Hoare,)h 18(in)h 17(his)h 18(T)h -3(uring)h 16(Aw)h -1(ard)h 18(lecture)h 18(of)h 17(1980,)h 17(when)h 18(co)h -1(v)h -1(ering)h 18(the)h 18(programm)h -1(i)h -1(ng)h 0 2134(language)s 13(Ada,)h 13(remark)h -1(ed:)h 306 2308(|)s 14(Charles)h 14(An)h -1(ton)h -1(y)h 14(Ric)h -1(hard)h 13(Hoare,)h 14(T)h -3(uring)h 13(Aw)h -1(ard)h 14(Sp)h 1(eec)h -1(h,)h 15(1980.)h 0 2383(Certainly)s 19(exceptions)h 20(can)h 19(b)h 1(e)h 20(dangerous)h 19(things.)h 34(Ho)h -1(w)h -1(ev)h -1(er,)h 20(I)h 19(b)h 1(eliev)h -1(e)h 20(that,)h 20(on)h 19(balance,)h 19(exceptions)h 21(enhance)h 0 2433(reliabilit)s -1(y)h 9(rather)h 11(than)h 10(deteriorating)h 11(it.)h 16(The)h 11(reason)h 11(for)h 10(this)h 11(b)h 1(elief)h 10(is)h 11(that)h 10(exceptions)h 158(indicate)h 10(problems,)h 0 2482(whereas)s 15(their)h 14(alternativ)h -1(e)h 14(in)h 14(this)h 13(capacit)h -1(y)h -3(,)h 13(statuses,)h 185(indicate)h 14(problems.)h 0 2557(T)s -3(o)h 13(see)h 14(this,)h 14(consider)h 14(the)h 14(simple)h 12(example)h 12(case)h 15(of)h 13(a)h 13(function)h 13(that)h 13(is)h 14(supp)h 1(osed)h 15(to)h 13(write)h 14(its)h 13(argumen)h -1(t)h 13(c)h -1(haracter)h 0 2607(to)s 16(its)h 17(argumen)h -1(t)h 15(device.)h 26(This)h 16(is)h 17(a)h 16(straigh)h -1(tforw)h -1(ard)h 15(op)h 1(eration,)h 17(unless)h 17(the)h 17(device)h 17(fails)h 15(in)h 16(some)h 16(w)h -1(a)h -1(y)h -3(,)h 15(in)h 16(whic)h -1(h)h 965 2770(6)s 14 2 439 228 r 14 2 637 278 r 14 2 113 1324 r 14 2 599 1324 r 14 2 113 1374 r 14 2 455 1374 r 6 @eop 7 @bop0 cmti10.300 sf [<038207C20FEC08381008001000200040008001000200040008081008383067F043E081 C0> 16 18 -3 17 17] 122 dc cmsl10.300 sf [ 32 18 -4 17 30] 119 dc cmtt10.300 sf [<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0600000000060F0F060> 8 25 -9 24 22] 33 dc [<183C3E1E0E0E0E1E1C3C78F060> 8 13 -7 24 22] 39 dc [ 24 32 -2 28 22] 92 dc 7 @bop1 cmbx10.300 sf 789 191(Z)s 881 614(Z)s 1237 1038(Z)s 869 1636(Z)s cmsy10.300 sf 831 191(\021)s 62 241(f)s 83 390(g)s 923 614(\021)s 62 664(f)s 83 814(g)s 1280 1038(\021)s 62 1088(f)s 83 1187(g)s 911 1636(\021)s 62 1685(f)s 83 1835(g)s cmti10.300 sf 1262 1959(by)s 15(default)h 1005 2283(by)s 17(default)h 1217 2333(le)s -2(gitimizes)h cmr7.300 sf 0 440(This)s 12(macro)h 10(is)h 12(NEVER)h 11(in)h -1(v)h -1(ok)h -1(ed.)h 0 863(This)s 12(macro)h 10(is)h 12(NEVER)h 11(in)h -1(v)h -1(ok)h -1(ed.)h 0 1237(This)s 12(macro)h 10(is)h 12(NEVER)h 11(in)h -1(v)h -1(ok)h -1(ed.)h 0 1885(This)s 12(macro)h 10(is)h 12(NEVER)h 11(in)h -1(v)h -1(ok)h -1(ed.)h cmsl10.300 sf 0 191(Example)s 12(of)h 14(a)h 13(function)h 14(returning)h 14(a)h 14(status)h 0 614(Example)s 12(of)h 14(call)h 13(to)h 14(function)h 13(returning)h 15(a)h 13(status)h 0 1038(Example)s 12(of)h 14(call)h 13(without)h 13(c)h -1(hec)h -1(king)h 14(to)h 14(a)h 14(function)h 13(returning)h 15(a)h 13(status)h 0 1636(Example)s 12(of)h 14(a)h 13(function)h 14(that)h 14(uses)h 15(an)h 14(exception)h cmtt10.300 sf 83 291(EXPORT)s 21(bool)h 21(writdev)h 20(P_\(\(dev_t,ch)h -1(ar\)\);)h 83 340(/*)s 21(Returns)h 21(TRUE)h 21(upon)h 21(success,)h 20(FALSE)h 21(if)h 21(the)h 21(write)h 21(failed.)h 20(*/)h 83 714(if)s 21(\(!writdev\(sloth)h -1(dev,)h -1('x'\)\))h 127 764(bomb\("Sloth)s 19(device)h 21(failed)h 20(-)h 22(aborting.\\n")h -1(\);)h 83 1137(writdev\(sloth)s -1(dev,')h -1(x'\);)h 343 1536(writdev)s 83 1735(EXPORT)s 21(void)h 21(writdev)h 20(P_\(\(dev_t,ch)h -1(ar\)\);)h 83 1785(/*)s 21(Raises)h 21(writedev_ex)h 19(exception)h 20(if)h 22(the)h 21(write)h 21(fails.)h 20(*/)h 983 2109(main\(\))s cmr10.300 sf 0 42(case)s 16(this)h 15(fact)h 15(m)h -1(ust)h 14(b)h 1(e)h 16(indicated)h 15(to)h 15(the)h 15(caller.)h 22(The)h 15(traditional)h 14(w)h -1(a)h -1(y)h 14(of)h 14(de\014ning)h 15(suc)h -1(h)h 16(a)h 15(function)h 15(is)h 15(to)h 14(ha)h -1(v)h -1(e)h 15(it)h 0 91(return)s 15(a)h 14(status)h 14(indicating)h 13(whether)h 15(the)h 15(call)h 13(succeede)h 1(d.)h 744 191([6])s 0 515(This)s 14(results)h 15(in)h 13(calling)h 13(co)h 1(de)h 14(that)h 14(should)h 14(lo)h 1(ok)h 13(something)h 13(lik)h -1(e)h 13(this:)h 836 614([7])s 0 938(but)s 14(often)h 14(lo)h 1(oks)h 13(lik)h -1(e)h 13(this:)h 1192 1038([8])s 0 1312(Co)s 1(de)h 17(suc)h -1(h)h 18(as)h 17(this)h 17(is)h 17(extremely)h 16(dangerous)h 18(b)h 1(ecause)h 18(a)h 17(program)h 15(written)h 18(in)h 16(this)h 17(w)h -1(a)h -1(y)h 16(migh)h -1(t)h 15(op)h 1(erate)h 18(correctly)h 0 1362(for)s 16(y)h -1(ears,)h 17(but)h 17(then)h 17(suddenly)h 17(start)h 17(b)h 1(eha)h -1(ving)h 16(in)h 16(o)h 1(dd)h 17(w)h -1(a)h -1(ys)h 16(when)h 17(undetected)h 19(errors)h 17(o)h 1(ccur.)h 27(Unfortunately)h -3(,)h 16(it)h 0 1411(is)s 16(extremely)h 16(easy)h 16(to)h 16(write)h 17(co)h 1(de)h 16(suc)h -1(h)h 17(as)h 16(this,)h 17(as)h 16(is)h 16(easy)h 16(to)h 16(forget)h 16(that)h 16(a)h 16(particular)h 16(function)h 16(ev)h -1(en)h 17(returns)h 17(a)h 0 1461(status!)s 19(Co)h 1(de)h 14(suc)h -1(h)h 15(as)h 14(this)h 14(is)h 13(quite)h 14(commo)h -1(n.)h 0 1536(No)s -1(w)h 14(consider)h 14(ho)h -1(w)h 180(lo)h 1(oks)h 14(if)h 13(it)h 13(is)h 14(de\014ned)h 15(using)h 13(an)h 14(exception)h 15(to)h 13(tak)h -1(e)h 14(care)h 15(of)h 13(the)h 15(error)h 15(case:)h 824 1636([9])s 0 1959(By)s 14(casting)h 14(the)h 15(error)h 14(condition)h 14(in)h 13(terms)h 14(of)h 13(an)h 14(exception,)h 14(the)h 14(function)h 203(ensures)h 16(that)h 14(something)h 12(will)h 0 2009(happ)s 1(en)h 15(if)h 14(an)h 15(error)h 15(arises.)h 21(In)h 15(fact,)h 14(one)h 15(of)h 14(t)h -1(w)h -1(o)h 15(things)h 14(m)h -1(ust)h 14(happ)h 1(en)h 15(if)h 14(the)h 15(exception)h 16(is)h 14(ev)h -1(er)h 16(raised:)h 20(either)h 15(the)h 0 2059(programm)s -1(er)h 16(co)h 1(des)h 18(a)h 17(catc)h -1(her)h 18(for)h 17(the)h 18(exception)h 18(and)h 17(deals)h 17(with)h 17(it)h 16(\(in)h 17(whic)h -1(h)h 17(case,)h 19(it)h 16(will)h 16(probably)h 16(b)h 1(e)h 18(dealt)h 0 2109(with)s 14(prop)h 1(erly\))h 16(or)h 14(the)h 15(exception)h 16(propagates)h 15(up)h 15(out)h 14(of)h 160(where)h 16(it)h 14(will)h 13(cause)h 16(the)h 15(exceptions)h 16(pac)h -1(k)h -2(age)h 14(to)h 0 2159(initiate)s 15(a)h 15(con)h -1(trolled)h 16(program)h 14(b)h 1(om)h -1(b)h 15(describing)h 16(the)h 16(unhandled)h 16(exception.)h 25(Both)h 16(of)h 15(these)h 17(alternativ)h -1(es)h 16(ensure)h 0 2208(that)s 14(the)h 14(condition)h 14(is)h 13(explicitly)h 13(handled)h 14(whic)h -1(h)h 14(is)h 14(the)h 14(imp)h 1(ortan)h -1(t)h 12(thing.)h 0 2283(By)s 16(using)h 15(exceptions,)h 17(the)h 17(programm)h -1(er)h 14(can)h 16(ensure)h 17(that)h 209(an)h -1(y)h 15(error)h 16(condition)h 15(that)h 16(arises)h 17(will)h 14(cause)h 0 2333(a)s 14(program)h 14(b)h 1(om)h -1(b.)h 19(This)h 14(is)h 15(suc)h -1(h)h 16(a)h 14(strong)h 15(safet)h -1(y)h 15(net)h 15(that)h 15(it)h 15(actually)h 214(the)h 15(no-error)h 16(c)h -1(hec)h -1(king)h 15(st)h -1(yle)h 15(of)h 0 2383(programm)s -1(ing)h 12(so)h 14(criticized)h 15(earlier.)h 19(If)h 14(y)h -1(ou)h 14(are)h 14(in)h 14(a)h 14(h)h -1(urry)h 15(to)h 14(write)h 14(a)h 14(program)h 13(and)h 14(do)h 14(not)h 14(wish)h 14(to)h 14(b)h 1(other)h 15(with)h 0 2433(error)s 18(c)h -1(hec)h -1(king,)h 18(the)h 18(use)h 18(of)h 17(functions)h 17(that)h 17(raise)h 18(exceptions)h 18(up)h 1(on)h 18(errors)h 18(ensures)h 20(that)h 17(if)h 16(the)h 18(co)h 1(de)h 18(terminates)h 0 2482(normall)s -1(y)h -3(,)h 15(then)h 17(it)h 17(has)h 16(terminated)h 17(error-free)h 18(|)h 16(ev)h -1(en)h 17(though)h 17(the)h 17(programm)h -1(er)h 16(did)h 16(not)h 17(co)h 1(de)h 17(an)h -1(y)h 17(c)h -1(hec)h -1(king)h 17(of)h 0 2532(return)s 15(conditions.)h 0 2607(Another)s 14(adv)h -2(an)h -1(tage)h 12(of)h 12(exceptions)h 14(is)h 12(that)h 13(they)h 13(allo)h -1(w)h 12(whole)h 12(classes)h 14(of)h 12(errors)h 14(that)h 13(migh)h -1(t)h 11(arise)h 13(in)h 12(a)h 13(span)h 13(of)h 12(co)h 1(de)h 0 2657(to)s 14(b)h 1(e)h 14(handled)h 14(at)h 14(one)h 14(p)h 1(oin)h -1(t.)h 17(F)h -3(or)h 14(example:)h 965 2770(7)s 7 @eop 8 @bop0 cmbx10.432 sf [<0007F000003FFC0000FFFF0001FC0F0007F01F800FE03F800FC03F801FC03F803F803F 803F801F007F8000007F0000007F0000007F000000FF000000FF0FC000FF3FF800FF70FE 00FFE03F00FFC03F80FF801FC0FF801FC0FF801FC0FF001FE0FF001FE0FF001FE0FF001F E07F001FE07F001FE07F001FE07F001FE03F801FC03F801FC01F803F800FC03F8007E0FF 0003FFFC0000FFF000003FC000> 32 39 -3 38 34] 54 dc [ 48 27 -1 26 50] 119 dc [ 48 41 -3 40 53] 85 dc [<7FFFFFFFFFC07FFFFFFFFFC07FFFFFFFFFC07F803FC03FC07E003FC007C078003FC003 C078003FC003C070003FC001C0F0003FC001E0F0003FC001E0E0003FC000E0E0003FC000 E0E0003FC000E0E0003FC000E0E0003FC000E000003FC0000000003FC0000000003FC000 0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000 0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000 0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000 0000003FC00000007FFFFFE000007FFFFFE000007FFFFFE000> 48 40 -2 39 48] 84 dc [ 40 41 -3 40 47] 80 dc [ 32 42 -2 41 36] 107 dc cmsl10.300 sf [<7FF0FFE0> 16 2 -1 9 14] 45 dc cmti10.300 sf [<000F8400304C00403C0080180100180300180300180600100600100600000700000700 0003E00003FC0001FF00007F800007C00001C00001C00000C00000C02000C02000C06001 80600180600300600200F00400CC180083E000> 24 30 -3 28 23] 83 dc [<060F0F06000000000000000000003078F060> 8 18 -4 17 13] 58 dc [<1FFFFFC01C0701C0300E00C0200E0080600E0080400E0080401C0080801C0080801C00 80001C000000380000003800000038000000380000007000000070000000700000007000 0000E0000000E0000000E0000000E0000001C0000001C0000001C0000001C0000003C000 007FFE0000> 32 28 -7 27 30] 84 dc [<01FFFFE0003C00E0003800600038004000380040003800400070004000700040007020 400070200000E0400000E0400000E0C00000FFC00001C0800001C0800001C0800001C080 0003810100038001000380020003800200070004000700040007000C00070018000E0078 00FFFFF000> 32 28 -3 27 28] 69 dc [<01FFFC00003C070000380380003801C0003801C0003801C0007003C0007003C0007003 C00070038000E0078000E0070000E00E0000E0380001FFE00001C0000001C0000001C000 0003800000038000000380000003800000070000000700000007000000070000000F0000 00FFE00000> 32 28 -3 27 28] 80 dc [<00020006000C001C007C039C0038003800380038007000700070007000E000E000E000 E001C001C001C001C003800380038003800780FFF0> 16 28 -4 27 21] 49 dc [<01FFFE00003C0780003801C0003801C0003800E0003800E0007000F000700070007000 70007000F000E000F000E000F000E000F000E000F001C001E001C001E001C001E001C001 C0038003C003800380038007800380070007000E0007001C0007003800070070000E01C0 00FFFF0000> 32 28 -3 27 31] 68 dc cmtt10.300 sf [<03E30007FF001FFF003E1F003C0F00780F00780700700700F00000E00000E00000E000 00E00000E03F80E07FC0E03F80F00700700700780F00780F003C0F003E1F001FFF0007FF 0003E700> 24 25 -2 24 22] 71 dc [ 16 32 -8 28 22] 91 dc [ 16 32 -1 28 22] 93 dc [<001F80007F8001FF8001E00001C00001C00001C00001C00001C00001C00001C00001C0 0001C00003C0007F8000FF0000FF00007F800003C00001C00001C00001C00001C00001C0 0001C00001C00001C00001C00001E00001FF80007F80001F80> 24 32 -2 28 22] 123 dc [ 24 32 -2 28 22] 125 dc 8 @bop1 cmbx10.300 sf 772 42(Z)s 595 2345(Z)s cmsy10.300 sf 813 42(\021)s 62 91(f)s 215 1137(g)s 636 2345(\021)s 62 2395(f)s 83 2495(g)s cmbx10.432 sf 0 1885(1.6)s 24(Ho)h -2(w)h 23(to)h 23(Use)h 22(This)h 22(P)h -2(ac)h -2(k)h -4(age)h cmr7.300 sf 0 1187(This)s 12(macro)h 10(is)h 12(NEVER)h 11(in)h -1(v)h -1(ok)h -1(ed.)h 0 2545(This)s 12(macro)h 10(is)h 12(NEVER)h 11(in)h -1(v)h -1(ok)h -1(ed.)h cmsl10.300 sf 0 42(Example)s 12(of)h 14(single-p)h 1(oin)h -1(t)h 13(error)h 14(handling)h 0 2345(Example)s 12(exception)h 15(de\014nition)h cmti10.300 sf 0 1486(Summary:)s 1814 1536(actively)s 1102 1586(something)s 1450 1636(active)s 13(statuses)h 0 2046(STEP)s 17(1:)h 22(De\014ne)h 18(the)h 16(exc)h -2(eption.)h 486 2619(exc)s -2(eption)h 19(identi\014er)h 621(exc)h -2(eption)h 19(description)h cmtt10.300 sf 83 141(EX_BEGIN)s 148 191(f_file_t)s 21(file1,)h 20(file2;)h 148 241(char)s 21(line[1000];)h 148 291(f_open\(file1,re)s -1(ad,")h -1(sloth)h -1(.dat")h -1(\);)h 148 340(f_open\(file2,wr)s -1(ite,)h -1("walr)h -1(us.da)h -1(t"\);)h 148 390(while)s 21(\(!f_eof\(file1)h -1(\)\))h 192 440({)s 214 490(f_readline)s 20(\(file1,lin)h -1(e,100)h -1(0\);)h 214 540(f_writeline\()s -1(file)h -1(2,lin)h -1(e,100)h -1(0\);)h 192 589(})s 148 639(fclose\(file1\);)s 148 689(fclose\(file2\);)s 83 739(EX_FORGET)s 148 789(EX_WHEN\(f_open_)s -1(ex)h 20(\))h 21(goto)h 21(f_handle;)h 148 839(EX_WHEN\(f_read_)s -1(ex)h 20(\))h 21(goto)h 21(f_handle;)h 148 888(EX_WHEN\(f_write)s -1(_ex\))h 19(goto)h 21(f_handle;)h 148 938(EX_WHEN\(f_close)s -1(_ex\))h 148 988(f_handle:)s 214 1038(f_delete\(fil)s -1(e2\);)h 214 1088(printf\("Erro)s -1(r)h 20(performing)h 20(copy."\);)h 83 1137(EX_END)s 473 2246(EX)s 16(LOCAL)h 83 2445(EX_LOCAL\(buf_)s -1(full,)h -1("buf)h -1(_full)h -1(:)h 20(Buffer)h 21(is)h 21(full)h 21(exception."\))h -1(;)h 0 2669(EX)s 15(LOCAL)h 1334(buf)h 15(full)h cmr10.300 sf 707 42([10])s 0 1262(In)s 13(the)h 14(ab)h 1(o)h -1(v)h -1(e)h 12(co)h 1(de,)h 14(a)h 12(single)h 13(exception)h 14(handler)h 13(handles)h 13(all)h 12(the)h 13(error)h 14(conditions)h 13(that)h 13(migh)h -1(t)h 11(arise)h 13(during)h 13(all)h 11(the)h 0 1312(\014le)s 13(op)h 1(erations.)h 18(The)h 14(resultan)h -1(t)h 14(co)h 1(de)h 14(is)h 13(far)h 13(cleaner)h 14(than)h 13(the)h 14(co)h 1(de)h 14(that)h 14(w)h -1(ould)h 12(b)h 1(e)h 14(necessary)h 15(if)h 13(the)h 14(status)h 14(of)h 12(eac)h -1(h)h 0 1362(call)s 14(had)h 15(to)h 15(b)h 1(e)h 16(c)h -1(hec)h -1(k)h -1(ed)h 17(indep)h 1(enden)h -1(tly)h -3(.)h 22(Using)h 15(exceptions,)h 16(the)h 16(normal)h 13(and)h 15(the)h 16(exceptional)h 15(cases)h 16(can)h 16(eac)h -1(h)h 15(b)h 1(e)h 0 1411(expressed)s 16(clearly)h -3(.)h 215 1486(There)s 21(is)h 19(no)h 20(doubt)h 19(that,)h 21(when)h 20(misused,)h 20(exceptions)h 21(can)h 20(b)h 1(e)h 20(an)h 19(extremely)h 20(dangerous)h 20(language)h 0 1536(construct.)s 19(Ho)h -1(w)h -1(ev)h -1(er,)h 14(they)h 13(also)h 13(ha)h -1(v)h -1(e)h 13(the)h 14(outstanding)h 13(qualit)h -1(y)h 11(of)h 13(enabling)h 12(functions)h 13(to)h 14(b)h 1(e)h 13(written)h 14(that)h 0 1586(indicate)s 12(errors,)h 12(th)h -1(us)h 12(ensuring)h 13(either)h 12(that)h 12(the)h 12(clien)h -1(t)h 11(co)h 1(de)h 13(do)h 1(es)h 205(ab)h 1(out)h 11(the)h 13(error,)h 12(or)h 12(that)h 11(the)h 13(program)h 0 1636(will)s 11(b)h 1(om)h -1(b)h 10(with)h 12(an)h 12(unhandled)h 12(exception)h 13(error.)h 18(In)h 13(this)h 12(capacit)h -1(y)h 12(exceptions)h 13(act)h 12(as)h 272(.)h 17(In)h 13(addition,)h 0 1685(exceptions)s 13(allo)h -1(w)h 11(error)h 13(handling)h 11(to)h 12(b)h 1(e)h 13(separated)h 13(from)h 11(ordinary)h 11(execution.)h 18(These)h 14(t)h -1(w)h -1(o)h 12(prop)h 1(erties)h 13(of)h 12(exceptions)h 0 1735(mean)s 13(that,)h 13(in)h 14(m)h -1(y)h 12(opinion,)h 12(they)h 14(impro)h -1(v)h -1(e)h 12(reliabilit)h -1(y)h 12(on)h 14(balance,)h 13(and)h 14(are)h 14(a)h 14(w)h -1(orth)h -1(y)h 14(programm)h -1(i)h -1(ng)h 12(to)h 1(ol.)h 0 1972(Using)s 14(this)h 14(pac)h -1(k)h -2(age)h 13(is)h 14(easy)h 14(-)h 14(just)h 14(follo)h -1(w)h 12(the)h 14(follo)h -1(wing)h 12(steps!)h 589 2046(Before)s 16(raising)h 15(or)h 16(catc)h -1(hing)h 16(an)h 15(exception,)h 16(y)h -1(ou)h 16(ha)h -1(v)h -1(e)h 15(to)h 16(de\014ne)h 16(it)h 16(and)h 15(mak)h -1(e)h 14(it)h 0 2096(visible)s 15(to)h 15(ev)h -1(ery)h 16(en)h -1(tit)h -1(y)h 15(that)h 16(needs)h 17(to)h 15(refer)h 16(to)h 16(the)h 16(exception.)h 23(T)h -3(o)h 15(de\014ne)h 16(it,)h 15(y)h -1(ou)h 15(need)h 16(to)h 16(think)h 15(of)h 14(an)h 16(iden)h -1(ti\014er)h 0 2146(that)s 14(will)h 13(b)h 1(e)h 15(used)h 15(to)h 14(represen)h -1(t)h 17(the)h 14(exception,)h 15(and)h 14(y)h -1(ou)h 14(need)h 15(to)h 14(think)h 14(of)h 14(a)h 14(short)h 14(\(one-line\))h 15(description)h 14(for)h 14(the)h 0 2196(exception.)s 25(Ha)h -1(ving)h 14(done)h 16(this,)h 16(if)h 15(y)h -1(ou)h 16(w)h -1(an)h -1(t)h 15(the)h 17(exception)h 16(to)h 16(b)h 1(e)h 16(visible)h 15(only)h 15(within)h 15(the)h 17(curren)h -1(t)h 17(program)h 14(\014le,)h 0 2246(insert)s 15(a)h 13(call)h 13(to)h 14(the)h 15(macro)h 194(in)h 14(the)h 14(v)h -2(ariable)h 13(section.)h 19(F)h -3(or)h 13(example:)h 529 2345([11])s 0 2619(The)s 18(\014rst)h 17(argumen)h -1(t)h 16(is)h 17(the)h 383(and)h 17(the)h 17(second)h 19(argumen)h -1(t)h 16(is)h 17(the)h 401(.)h 28(The)h 189 2669(macro)s 19(translates)h 21(in)h -1(to)h 20(a)h 20(string)h 20(constan)h -1(t)h 21(declaration)h 20(ha)h -1(ving)h 20(the)h 21(name)h 207(and)h 21(the)h 21(v)h -2(alue)h 965 2770(8)s 14 2 520 2246 r 14 2 47 2669 r 14 2 1572 2669 r 8 @eop 9 @bop0 cmti10.300 sf [<003C0000C3000101800201800201C00441C00441C00841C00841C00841C01083801083 801107000E0600000C0000180000300000C0000100000600000800001001001002002002 004006007E0C00C7F80083F80080E000> 24 29 -4 27 21] 50 dc [<01FFF800003C0E00003807000038038000380380003803800070078000700780007007 8000700F0000E00E0000E01C0000E0700000FFC00001C0C00001C0600001C0700001C070 00038070000380700003807000038070000700F0000700F0400700F0400700F0800F0078 80FFE0790000001E00> 32 29 -3 27 30] 82 dc [<003E0000C1800101800200C00400C00440C00841C00841C00841C00883800703800007 00000E0001F800003800000C00000C00000E00000E00000E00000E00700E00E01C00801C 0080380080300040600021C0001F0000> 24 29 -4 27 21] 51 dc [<0003F020001E0C60003002E000E003C001C001C0038001C0070000C00E0000801E0000 801C0000803C0000803C000000780000007800000078000000F0000000F0000000F00000 00F0000000F0000400F0000400F0000400F0000800700008007000100038002000180040 000C0180000706000001F80000> 32 30 -6 28 30] 67 dc cmsl10.300 sf [<0FF0FE03C03801C03001C02001C06001C04001E08000E08000E10000E10000E2000072 00007400007C00007800007000003000002000002000004000004000708000F10000F100 00E60000780000> 24 26 0 17 22] 121 dc 9 @bop1 cmbx10.300 sf 625 465(Z)s 648 988(Z)s 493 1885(Z)s cmsy10.300 sf 666 465(\021)s 62 515(f)s 83 614(g)s 691 988(\021)s 62 1038(f)s 83 1237(g)s 534 1885(\021)s 62 1934(f)s 83 2482(g)s cmti10.300 sf 0 739(STEP)s 14(2:)h 18(R)h -2(aise)h 14(the)h 13(exc)h -2(eption.)h 0 1636(STEP)s 11(3:)h 17(Catch)h 11(the)h 11(exc)h -2(eption.)h 1783 1685(exc)s -2(eption)h 0 1735(blo)s -2(ck)h cmr7.300 sf 0 664(This)s 12(macro)h 10(is)h 12(NEVER)h 11(in)h -1(v)h -1(ok)h -1(ed.)h 0 1287(This)s 12(macro)h 10(is)h 12(NEVER)h 11(in)h -1(v)h -1(ok)h -1(ed.)h 0 2532(This)s 12(macro)h 10(is)h 12(NEVER)h 11(in)h -1(v)h -1(ok)h -1(ed.)h cmsl10.300 sf 0 465(Example)s 12(exception)h 15(declaration)h 0 988(Example)s 12(of)h 14(raising)h 13(an)h 13(exception)h 0 1885(Exception)s 14(blo)h 1(c)h -1(k)h 14(syn)h -1(tax)h cmtt10.300 sf 0 42("buf)s 15(full:)h 42(Buff...")h 1664 266(EX)s 16(LOCAL)h 97 315(EX)s 15(EXPORT)h 384(EX)h 15(EXCEPT)h 654(EX)h 15(EXCEPT)h 83 565(EX_EXCEPT\(buf)s -1(_full)h -1(\);)h 583 789(.c)s 258(EX)h 15(LOCAL)h 70(EX)h 15(EXPORT)h 192(.c)h 467 839(EX)s 15(EXCEPT)h 342(EX)h 15(RAISE)h 138(EX)h 15(RAISE)h 83 1088(/*)s 21(If)h 22(the)h 21(buffer)h 21(is)h 21(full,)h 21(raise)h 20(the)h 22(full)h 21(buffer)h 20(exception.)h 20(*/)h 83 1137(if)s 21(\(bufsiz)h 21(>)h 21(BUF_MAX\))h 148 1187(EX_RAISE\(buf_fu)s -1(l\);)h 380 1362(EX)s 16(RAISE)h 919 1461(buf)s 15(ful)h 586 1735(EX)s 171(EX)h 15(BEGIN)h 25(EX)h 15(FORGET)h 25(EX)h 15(WHEN)h 95(EX)h 15(END)h 83 1984(EX_BEGIN)s 148 2034()h 83 2084(EX_FORGET)s 148 2134(EX_WHEN\(\))h 214 2183()h 148 2233(EX_WHEN\(\))h 214 2283()h 148 2333(EX_WHEN\(\))h 214 2383()h 83 2433(EX_END)s 478 2607(EX)s 16(BEGIN)h 71(EX)h 15(END)h 1035({})h cmr10.300 sf 431 42(.)s 32(It)h 19(is)h 19(imp)h 1(ortan)h -1(t)h 17(that)h 19(the)h 19(exception)h 20(iden)h -1(tifer)h 19(b)h 1(e)h 19(unique)h 19(within)h 19(its)h 18(scop)h 1(e)h 21(as)h 19(it)h 18(is)h 0 91(implem)s -1(en)h -1(ted)h 16(b)h -1(y)h 17(an)h 17(ordinary)h 17(constan)h -1(t.)h 28(It)h 17(is)h 18(also)h 16(v)h -1(ery)h 18(imp)h 1(ortan)h -1(t)h 15(that)h 17(the)h 18(description)h 18(of)h 17(the)h 17(exception)h 18(b)h 1(e)h 0 141(unique)s 9(within)h 9(the)h 10(set)h 10(of)h 9(exceptions)h 10(in)h 9(the)h 10(program.)h 15(If)h 9(eac)h -1(h)h 10(exception)h 10(has)h 9(a)h 9(unique)h 10(description,)h 10(then)h 10(unhandled)h 0 191(exceptions)s 15(\(see)h 15(later\))h 14(can)h 14(b)h 1(e)h 15(easily)h 13(iden)h -1(ti\014ed.)h 0 266(If)s 13(y)h -1(ou)h 14(w)h -1(an)h -1(t)h 13(the)h 15(exception)h 14(to)h 14(b)h 1(e)h 14(visible)h 13(within)h 13(all)h 13(clien)h -1(ts)h 14(of)h 13(the)h 15(mo)h 1(dule)h 12(declaring)h 14(it,)h 13(replace)h 196(ab)h 1(o)h -1(v)h -1(e)h 0 315(with)s 222(and)h 16(insert)h 17(a)h 16(call)h 15(to)h 222(in)h 16(the)h 17(header)h 17(\014le)h 16(for)h 16(the)h 17(mo)h 1(dule.)h 229(requires)h 18(just)h 0 365(the)s 14(v)h -2(ariable)h 13(name.)h 559 465([12])s 551 739(Ha)s -1(ving)h 12(completed)h 11(step)h 14(1,)h 12(y)h -1(ou)h 11(can)h 13(no)h -1(w)h 12(raise)h 12(the)h 13(exception)h 13(in)h 12(an)h -1(y)h 12(mo)h 1(dule)h 11(that)h 0 789(can)s 17(see)h 18(the)h 17(exception)h 18(\(i.e.)h 26(the)h 78(\014le)h 17(with)h 17(the)h 202(or)h 208(,)h 15(and)h 17(an)h -1(y)h 76(\014le)h 17(that)h 17(includes)h 17(the)h 0 839(header)s 13(\014le)h 12(con)h -1(taining)h 11(the)h 204(\))h 11(simply)h 10(b)h 1(e)h 12(calling)h 180(.)h 11(Note:)h 197(is)h 12(syn)h -1(tactically)h 12(equiv)h -2(alen)h -1(t)h 0 888(to)s 14(a)h 13(comp)h 1(ound)h 13(statemen)h -1(t.)h 582 988([13])s 0 1362(The)s 10(e\013ect)h 12(of)h 10(a)h 9(call)h 10(to)h 188(is)h 10(that)h 10(con)h -1(trol)h 9(will)h 9(lea)h -1(v)h -1(e)h 10(the)h 10(curren)h -1(t)h 12(function,)h 10(and)h 10(the)h 10(stac)h -1(k)h 11(will)h 8(un)h -1(wind)h 10(un)h -1(til)h 9(a)h 0 1411(function)s 11(is)h 12(encoun)h -1(tered)h 14(whose)h 12(con)h -1(text)h 12(con)h -1(tains)h 12(an)h 11(activ)h -1(e)h 12(exception)h 13(handler)h 12(construct)h 13(that)h 12(sp)h 1(eci\014es)h 13(a)h 12(catc)h -1(her)h 0 1461(for)s 12(the)h 13(exception)h 13(that)h 12(has)h 12(b)h 1(een)h 13(raised)h 13(\(in)h 12(this)h 12(case)h 160(.)h 17(If)h 12(no)h 12(suc)h -1(h)h 13(handler)h 12(exists,)h 13(the)h 12(exception)h 13(pac)h -1(k)h -2(age)h 0 1511(will)s 13(b)h 1(om)h -1(b)h 12(the)h 15(program,)h 12(prin)h -1(ting)h 13(out)h 14(an)h 14(error)h 15(message)h 14(stating)h 13(that)h 15(an)h 13(exception)h 15(has)h 14(not)h 14(b)h 1(een)h 16(handled,)h 13(and)h 0 1561(giving)s 12(the)h 15(description)h 14(of)h 14(the)h 14(exception.)h 549 1636(Catc)s -1(hing)h 9(exceptions)h 11(is)h 9(a)h 10(little)h 9(tric)h -1(k)h -1(er)h 10(than)h 9(raising)h 9(them.)h 16(T)h -3(o)h 9(catc)h -1(h)h 10(an)h 10(exception,)h 0 1685(y)s -1(ou)h 14(need)h 15(to)h 15(sp)h 1(ecify)h 15(so)h 14(in)h 14(adv)h -2(ance)h 15(b)h -1(y)h 14(enclosing)h 14(the)h 15(co)h 1(de)h 16(that)h 14(migh)h -1(t)h 12(raise)h 15(the)h 15(exception)h 15(within)h 14(an)h 101 1735(construct)s 16(pro)h -1(vided)h 15(b)h -1(y)h 14(the)h 88(macros)h 183(,)h 204(,)h 173(and)h 140(.)h 13(Here)h 16(is)h 14(an)h 14(abstract)h 0 1785(example:)s 427 1885([14])s 0 2607(The)s 18(en)h -1(tire)h 18(con)h -1(text)h 18(\(from)h 202(to)h 143(\))h 17(is)h 17(syn)h -1(tactically)h 17(equiv)h -2(alen)h -1(t)h 17(to)h 17(a)h 18(comp)h 1(ound)h 16(statemen)h -1(t)h 18(\()h 44(\).)h 0 2657(Its)s 16(seman)h -1(tics)h 14(are)h 16(that)h 15(the)h 16(co)h 1(de)h 15(that)h 16(mig)h -1(h)h -1(t)h 14(raise)h 15(an)h 15(exception)h 16(is)h 15(executed,)h 16(and,)h 15(if)h 14(no)h 15(exceptions)h 17(are)h 15(raised,)h 965 2770(9)s 14 2 91 42 r 14 2 1711 266 r 14 2 144 315 r 14 2 719 315 r 14 2 1564 315 r 14 2 932 789 r 14 2 1171 789 r 14 2 514 839 r 14 2 1047 839 r 14 2 1354 839 r 14 2 427 1362 r 14 2 988 1461 r 14 2 633 1735 r 14 2 848 1735 r 14 2 1042 1735 r 14 2 1258 1735 r 14 2 1500 1735 r 14 2 525 2607 r 14 2 766 2607 r 9 @eop 10 @bop0 10 @bop1 cmr10.300 sf 0 42(terminates.)s 17(If)h 11(an)h 11(exception)h 13(is)h 11(raised,)h 12(the)h 12(co)h 1(de)h 12(ab)h 1(orts)h 12(to)h 11(the)h 12(corresp)h 1(onding)h 13(handler,)h 11(or)h 12(is)h 11(propagated)h 12(up)h -1(w)h -1(ards)h 0 91(if)s 16(no)h 17(matc)h -1(hing)h 15(handler)h 18(is)h 17(presen)h -1(t.)h 29(F)h -3(or)h 16(a)h 17(more)h 16(detailed)h 17(description)h 18(of)h 17(the)h 17(seman)h -1(tics,)h 17(see)h 19(the)h 17(sp)h 1(eci\014cation)h 0 141(section.)s 954 2770(10)s 10 @eop 11 @bop0 cmsl10.300 sf [<07FF87FE00FE01F0007C01C0003C0180003E0100001E0200001E0400001F0800000F18 00000F90000007A0000007C0000003C0000003E0000003E0000003F0000004F0000008F0 000010F8000030780000207C0000403C0000803E0001001E0003001F0006000F001F001F 80FFC0FFF0> 32 28 -1 27 31] 88 dc [<0FFFFFC000F803C000F001C000F0008000F0008000F0008000F0008001E0008001E040 8001E0400001E0400001E0C00001E1C00003FF800003C1800003C0800003C0800003C080 0003C080000780000007800000078000000780000007800000078000000F0000000F8000 00FFF80000> 32 28 -2 27 27] 70 dc [<0FFF9FFE00F803E000F003C000F003C000F003C000F003C000F003C001E0078001E007 8001E0078001E0078001E0078001E0078003FFFF0003C00F0003C00F0003C00F0003C00F 0003C00F0007801E0007801E0007801E0007801E0007801E0007801E000F003C000F803E 00FFF3FFC0> 32 28 -2 27 31] 72 dc [<0FFFF80000F80E0000F0078000F003C000F001C000F001E000F001E001E003C001E003 C001E0038001E0070001E00E0001E03C0003FFE00003C0700003C0380003C03C0003C01C 0003C01E0007803C0007803C0007803C0007803C0007803C0007803C080F003C100F801C 10FFF01C20000007C0> 32 29 -2 27 31] 82 dc [<0FFFFC0000F8078000F001C000F000E000F0007000F0007000F0007801E0003801E000 3801E0003801E0003801E0003C01E0003803C0003803C0007803C0007803C0007803C000 7003C000F0078000E0078000E0078001C0078003800780078007800E000F001C000F0070 00FFFFC000> 32 28 -2 27 32] 68 dc cmbx10.518 sf [<003FF00001FFFE0007FFFF801FC07FE03F003FF07C001FF87F000FFCFF8007FEFFC007 FEFFC003FFFFC003FFFFC003FFFFC003FF7F8003FF3F0003FF000003FF000003FF000007 FE000007FE000007FC00000FF800001FF800001FF000003FE000007F8000007F000000FE 000001FC000003F0000007E000000FC007001F8007003E0007007C000F00F8000E01F000 0E01E0001E03FFFFFE07FFFFFE0FFFFFFE1FFFFFFE3FFFFFFE7FFFFFFCFFFFFFFCFFFFFF FCFFFFFFFC> 32 46 -4 45 41] 50 dc [<001FF0038000FFFF078003FFFFCF8007F00FFF801FC001FF801F80007F803F00003F80 7F00001F807E00000F807E00000F80FE00000780FE00000780FF00000380FF00000380FF 80000380FFC0000000FFE0000000FFFC0000007FFFE000007FFFFE00003FFFFFC0003FFF FFF0001FFFFFFC000FFFFFFE0007FFFFFF0001FFFFFF00007FFFFF80001FFFFFC00000FF FFC0000007FFC0000000FFE00000007FE00000003FE00000001FE0E000001FE0E000000F E0E000000FE0E000000FE0F000000FE0F000000FC0F800000FC0F800001F80FC00001F80 FF00003F00FFC0007E00FFFC01FC00F9FFFFF800F03FFFE000E007FF0000> 40 49 -5 48 46] 83 dc [<00380000380000380000380000380000780000780000780000F80000F80001F80003F8 0007F8001FF800FFFFFEFFFFFEFFFFFE07F80007F80007F80007F80007F80007F80007F8 0007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80707F80707F8 0707F80707F80707F80707F80707FC0F03FC0E03FE1E01FFFC007FF8000FE0> 24 46 -2 45 32] 116 dc [<007FF8000003FFFF00000FFFFFC0001FE01FF0001FF007F8001FF007FC001FF003FC00 1FF001FE000FE001FE0007C001FE00010001FE00000001FE00000001FE000001FFFE0000 3FFFFE0001FFF1FE0007FE01FE001FF001FE003FE001FE007FC001FE007F8001FE00FF80 01FE00FF0001FE00FF0001FE00FF0001FE00FF8003FE00FF8007FE007FC00FFE003FF03E FF001FFFF87FF807FFF03FF800FF800FF8> 40 32 -2 31 40] 97 dc [<0007FF00007FFFE001FFFFF803FC03FC07F807FC0FF007FC1FE007FC3FC007FC3FC003 F87FC001F07F800040FF800000FF800000FF800000FF800000FF800000FF800000FF8000 00FF800000FF800000FF8000007FC000007FC000003FC0000E3FE0000E1FE0001E0FF000 3C07F8007803FF01F001FFFFE0007FFF800007FC00> 32 32 -3 31 37] 99 dc [ 48 49 -2 48 56] 80 dc [<03F007F8000FF000FFF03FFF007FFE00FFF07FFF80FFFF00FFF1F03FC3E07F800FF3C0 1FE7803FC007F7801FEF003FC007F7000FFE001FE007FE000FFC001FE007FC000FF8001F E007FC000FF8001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F800 0FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001F E007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F800 0FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001F E007F8000FF0001FE007F8000FF0001FE0FFFFC1FFFF83FFFFFFFFC1FFFF83FFFFFFFFC1 FFFF83FFFF> 64 32 -3 31 71] 109 dc [<00FF870007FFEF001FFFFF003F007F007C001F007C000F00F8000F00F8000700FC0007 00FC000700FF000000FFF800007FFFC0007FFFF0003FFFFC001FFFFE0007FFFF0001FFFF 80001FFF800000FFC000001FC0E0000FC0E0000FC0F00007C0F00007C0F80007C0FC000F 80FE001F80FF803F00FFFFFE00F3FFF800E07FC000> 32 32 -3 31 33] 115 dc [<0007FE0000003FFFC00000FFFFF00003FC03FC0007F000FE000FE0007F001FC0003F80 3FC0003FC03FC0003FC07F80001FE07F80001FE07F80001FE0FF80001FF0FF80001FF0FF 80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF07F80001FE07F80 001FE07F80001FE03FC0003FC03FC0003FC01FE0007F800FE0007F0007F801FE0003FE07 FC0001FFFFF800003FFFC0000007FE0000> 40 32 -2 31 41] 111 dc [<0000FF000007FFC0001FFFF0007FC7F000FF0FF801FF0FF801FE0FF803FE0FF803FC0F F803FC07F003FC01C003FC000003FC000003FC000003FC000003FC000003FC000003FC00 00FFFFF800FFFFF800FFFFF80003FC000003FC000003FC000003FC000003FC000003FC00 0003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00 0003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00 0003FC000003FC00007FFFF0007FFFF0007FFFF000> 32 50 -2 49 25] 102 dc [<01F800000000FFF800000000FFF800000000FFF8000000000FF80000000007F8000000 0007F80000000007F80000000007F80000000007F80000000007F80000000007F8000000 0007F80000000007F80000000007F80000000007F80000000007F80000000007F8000000 0007F807F8000007F83FFF000007F87FFF800007F9F03FC00007FBC01FE00007FF801FE0 0007FF000FF00007FE000FF00007FC000FF00007FC000FF00007F8000FF00007F8000FF0 0007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF0 0007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF0 0007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF000FFFFC1FFFF 80FFFFC1FFFF80FFFFC1FFFF80> 48 50 -3 49 46] 104 dc [<01F8000000FFF8000000FFF8000000FFF80000000FF800000007F800000007F8000000 07F800000007F800000007F800000007F800000007F800000007F800000007F800000007 F800000007F800000007F800000007F800000007F8007FFC07F8007FFC07F8007FFC07F8 001FC007F8001F0007F8003E0007F800780007F801F00007F803E00007F807800007F81F 000007F83E000007F87C000007F9FE000007FBFF000007FFFF800007FF7FC00007FE3FE0 0007F81FE00007F01FF00007F00FF80007F007FC0007F003FE0007F001FF0007F000FF00 07F000FF8007F0007FC007F0003FE007F0003FF0FFFF80FFFFFFFF80FFFFFFFF80FFFF> 40 50 -2 49 44] 107 dc [<001FF007E000FFFE3FF003FFFFFFF807F83FF1F80FE00FE1F81FE00FF1F81FC007F060 3FC007F8003FC007F8003FC007F8003FC007F8003FC007F8003FC007F8003FC007F8001F C007F0001FE00FF0000FE00FE00007F83FC00007FFFF80000EFFFE00000E1FF000000E00 0000001E000000001E000000001F000000001F800000001FFFFFC0000FFFFFF8000FFFFF FE0007FFFFFF8007FFFFFFC007FFFFFFE01FFFFFFFE03F00007FE07E00000FF0FE000007 F0FC000003F0FC000003F0FC000003F0FE000007F07E000007E07F00000FE03FC0003FC0 1FF801FF8007FFFFFE0000FFFFF000001FFF8000> 40 47 -2 31 41] 103 dc cmbx10.432 sf [ 24 41 -2 40 26] 73 dc cmr7.300 sf [<1F0060C06060F070F030603000700070006000C001C00180020004000810101020207F E0FFE0> 16 19 -2 18 17] 50 dc cmtt10.300 sf [<0387000387000387000387000387000387007FFFC0FFFFE0FFFFE0070E00070E00070E 000E1C000E1C000E1C000E1C00FFFFE0FFFFE07FFFC01C38001C38001C38001C38001C38 001C3800> 24 25 -1 24 22] 35 dc cmr10.300 sf [<00030003000700060006000E000C001C0018001800380030003000700060006000E000 C000C001C001800380030003000700060006000E000C000C001C00180018003800300070 0060006000E000C000C000> 16 41 -2 30 21] 47 dc 11 @bop1 cmsy10.300 sf 426 903(\021)s 62 953(f)s 83 1102(g)s 442 1862(\021)s 62 1912(f)s 83 2111(g)s cmsl10.300 sf 0 903(Sym)s -1(b)h 1(ol)h 27(EX)h 15(F)h -5(AST)h 0 1862(Sym)s -1(b)h 1(ol)h 27(EX)h 15(THRD)h cmbx10.518 sf 0 50(2)s 28(Static)h 27(P)h -2(arameters)h 25(of)h 28(this)h 26(P)h -2(ac)h -2(k)h -5(age)h cmbx10.432 sf 0 293(2.1)s 24(Inline)h 21(Switc)h -2(h)h 21(P)h -2(aramete)h -1(r)h 0 1575(2.2)s 24(Threading)h 23(P)h -2(aramete)h -1(r)h cmr7.300 sf 0 1152(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(32.)h 0 2161(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(32.)h cmtt10.300 sf 757 654(EX)s 16(FAST)h 74(FALSE)h 954 704(EX)s 15(FAST)h 74(TRUE)h 395 803(FALSE)s 1278(TRUE)h 83 1002(#define)s 20(_EX_FAST)h 21(FALSE)h 83 1052(/*)s 21(Set)h 22(_EX_FAST)h 20(to)h 21(TRUE)h 21(to)h 21(turn)h 21(on)h 22(inlining)h 20(and)h 21(turn)h 21(off)h 21(checking.)h 20(*/)h 765 1227(link)s 291 1663(EX)s 16(THRD)h 1408(TRUE)h 1249 1712(TRUE)s 83 1961(#define)s 20(_EX_THRD)h 21(FALSE)h 83 2011(/*)s 21(To)h 22(configure)h 20(this)h 21(package)h 20(to)h 21(work)h 21(under)h 21(a)h 22(multi-threa)h -1(ded)h 20(environment)h -1(,)h 20(*/)h 83 2061(/*)s 21(set)h 22(_EX_THRD)h 20(to)h 21(TRUE)h 21(and)h 21(modify)h 21(the)h 21(k_var)h 21(calls)h 20(later)h 21(on)h 22(in)h 21(the)h 21(file.)h 21(*/)h cmr10.300 sf 0 137(This)s 14(pac)h -1(k)h -2(age)h 13(has)h 14(a)h 14(few)h 14(static)h 14(\(compile-tim)h -1(e\))h 12(parameters)h 14(whic)h -1(h)h 14(can)h 14(b)h 1(e)h 14(used)h 15(to)h 14(mo)h 1(dify)h 11(its)h 14(b)h 1(eha)h -1(vior.)h 0 380(Exceptions)s 20(are)h 20(tric)h -1(ky)h 19(constructs,)h 22(particularly)h 18(in)h 19(a)h 19(programm)h -1(i)h -1(ng)h 17(language)h 18(lik)h -1(e)h 19(C,)h 18(and)h 19(it)h 19(mak)h -1(es)h 18(sense)h 21(to)h 0 430(incorp)s 1(orate)h 13(lots)h 12(of)h 11(c)h -1(hec)h -1(king)h 13(in)h -1(to)h 12(a)h 12(pac)h -1(k)h -2(age)h 11(suc)h -1(h)h 13(as)h 13(this)h 12(one.)h 18(A)h -1(t)h 12(the)h 13(same)h 11(time,)h 11(exceptions)h 13(are)h 13(a)h 12(fundamen)h -1(tal)h 0 479(language)s 13(construct)h 16(that)h 15(are)h 15(lik)h -1(ely)h 13(to)h 14(b)h 1(e)h 15(used)h 15(extensiv)h -1(ely)h -3(,)h 14(and)h 14(it)h 14(should)h 15(b)h 1(e)h 15(p)h 1(ossible)h 14(to)h 14(con\014gure)h 16(them)h 13(to)h 14(b)h 1(e)h 0 529(as)s 14(e\016cien)h -1(t)h 14(as)h 14(p)h 1(ossible.)h 0 604(T)s -3(o)h 17(satisfy)h 18(these)h 20(t)h -1(win)h 17(needs,)h 20(this)h 19(pac)h -1(k)h -2(age)h 17(pro)h -1(vides)h 19(a)h 17(b)h 1(o)h 1(olean)h 18(parameter)h 18(whic)h -1(h)h 18(can)h 18(b)h 1(e)h 19(used)h 19(to)h 18(select)h 19(t)h -1(w)h -1(o)h 0 654(di\013eren)s -1(t)h 20(kinds)h 19(of)h 19(impl)h -1(em)h -1(en)h -1(tation.)h 32(Set)h 201(to)h 147(if)h 18(y)h -1(ou)h 19(w)h -1(an)h -1(t)h 18(the)h 20(exp)h 1(orted)h 20(macros)h 19(to)h 19(generate)h 0 704(function)s 18(calls)h 19(and)h 18(to)h 19(p)h 1(erform)h 18(lots)h 18(of)h 18(c)h -1(hec)h -1(ks.)h 34(Set)h 200(to)h 125(if)h 17(y)h -1(ou)h 19(w)h -1(an)h -1(t)h 18(the)h 19(exp)h 1(orted)h 20(macros)h 18(to)h 0 753(generate)s 16(inline)h 15(co)h 1(de)h 16(that)h 15(runs)h 15(as)h 16(fast)h 15(as)h 15(p)h 1(ossible)h 15(with)h 15(no)h 15(c)h -1(hec)h -1(king)h 15(at)h 15(all.)h 21(It)h 15(is)h 15(strongly)h 15(recommended)h 14(that)h 0 803(this)s 14(sym)h -1(b)h 1(ol)h 12(b)h 1(e)h 15(set)h 14(to)h 137(unless)h 15(p)h 1(erformance)h 13(requiremen)h -1(ts)h 15(absolutely)h 13(demand)h 13(that)h 14(it)h 13(b)h 1(e)h 15(set)h 15(to)h 101(.)h 347 903([15])s 0 1227(Note:)s 25(Some)h 16(other)h 18(pac)h -1(k)h -2(ages)h 17(\(suc)h -1(h)h 18(as)h 17(the)h 122(pac)h -1(k)h -2(age\))h 17(allo)h -1(w)h 15(parameters)h 17(lik)h -1(e)h 17(this)h 17(to)h 17(b)h 1(e)h 17(set)h 18(b)h -1(y)h 17(the)h 18(clien)h -1(t)h 0 1276(pac)s -1(k)h -2(age,)h 12(th)h -1(us)h 13(enabling)h 12(di\013eren)h -1(t)h 13(clien)h -1(t)h 13(mo)h 1(dules)h 11(to)h 13(sp)h 1(ecify)h 13(di\013eren)h -1(t)h 13(safet)h -1(y/e\016ciency)h 14(trade-o\013s.)h 18(Ho)h -1(w)h -1(ev)h -1(er,)h 13(this)h 0 1326(lev)s -1(el)h 13(of)h 13(parameterization)h 12(gran)h -1(ularit)h -1(y)h 13(could)h 13(not)h 13(b)h 1(e)h 14(ac)h -1(hiev)h -1(ed)h 14(in)h 13(this)h 14(pac)h -1(k)h -2(age)h 13(as)h 13(some)h 13(of)h 13(the)h 14(c)h -1(hec)h -1(king)h 14(is)h 13(magic)h 0 1376(n)s -1(um)h -1(b)h 1(er)h 13(c)h -1(hec)h -1(king)h 14(whic)h -1(h)h 14(m)h -1(ust)h 12(b)h 1(e)h 15(emplo)h -1(y)h -1(ed)h 12(globally)h 11(or)h 14(not)h 13(at)h 14(all.)h 17(The)h 14(problem)h 12(is)h 14(that)h 14(a)h 13(mo)h 1(dule)h 12(with)h 14(c)h -1(hec)h -1(ks)h 0 1426(on)s 14(migh)h -2(t)h 12(complain)h 12(ab)h 1(out)h 14(incorrect)h 15(magic)h 12(n)h -1(um)h -1(b)h 1(ers)h 13(that)h 14(w)h -1(ere)h 15(not)h 14(set)h 15(b)h -1(y)h 13(another)h 15(mo)h 1(dule)h 12(with)h 14(c)h -1(hec)h -1(ks)h 15(o\013.)h 0 1663(The)s 10(parameter)h 182(tells)h 10(the)h 10(pac)h -1(k)h -2(age)h 9(whether)h 12(it)h 9(is)h 10(op)h 1(erating)h 10(within)h 9(a)h 9(m)h -1(ulti-threaded)h 9(en)h -1(vironmen)h -1(t)h 9(\()h 88(\))h 0 1712(\(th)s -1(us)h 15(prohibiting)h 13(single-instance)h 15(global)h 13(v)h -2(ariables\).)h 19(If)h 14(y)h -1(ou)h 14(set)h 15(this)h 15(to)h 102(,)h 13(y)h -1(ou)h 14(will)h 13(also)h 14(need)h 15(to)h 14(mo)h 1(dify)h 12(the)h 0 1762(macros)s 13(for)h 14(global)h 12(v)h -2(ariables)h 13(in)h 13(the)h 15(next)h 14(section.)h 364 1862([16])s 954 2770(11)s 14 2 744 654 r 14 2 804 654 r 14 2 941 704 r 14 2 1001 704 r 13 2 151 903 r 13 2 225 903 r 14 2 278 1663 r 14 2 338 1663 r 13 2 151 1862 r 13 2 225 1862 r 11 @eop 12 @bop0 cmsl10.300 sf [<0FF80007FC00F8000FC000BC000F8000BC00178000BC00178000BC00278000BC002780 011E004F00011E004F00011E008F00011E008F00011E010F00010F010F00020F021E0002 0F021E00020F041E00020F041E000207881E000207901E000407903C000407A03C000407 A03C000407C03C000403C03C000403803C000C038078001E03007C00FF8307FF80> 40 28 -2 27 38] 77 dc [ 24 18 -4 17 22] 118 dc cmbx10.432 sf [<0007F0003FFC00FE3E01FC7F03F87F03F87F07F07F07F03E07F00007F00007F00007F0 0007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F00007F00007F00007F00007F0 0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0 0007F00007F00007F0007FFF807FFF807FFF80> 24 42 -2 41 21] 102 dc [<00007FE003000003FFFC0F00001FFFFF1F00007FF00FFF0000FF8001FF0003FE0000FF 0007FC00007F000FF800003F000FF000001F001FE000001F003FE000000F003FC000000F 007FC0000007007FC0000007007FC000000700FF8000000000FF8000000000FF80000000 00FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80000000 00FF8001FFFFF8FF8001FFFFF87FC001FFFFF87FC00000FF007FC00000FF003FC00000FF 003FE00000FF001FE00000FF000FF00000FF000FF80000FF0007FC0000FF0003FE0001FF 0000FF8001FF00007FF007FF00001FFFFFBF000003FFFE0F0000007FF00300> 48 41 -4 40 54] 71 dc [ 56 41 -1 40 52] 86 dc 12 @bop1 cmsy10.300 sf 569 652(\021)s 62 702(f)s 83 1548(g)s cmsl10.300 sf 0 652(Macros)s 14(for)h 14(global)h 12(v)h -2(ariables)h cmbx10.432 sf 0 42(2.3)s 24(Macros)h 24(for)h 23(Global)h 22(V)h -6(ariables)h cmr7.300 sf 0 1598(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(32.)h cmtt10.300 sf 837 129(ex)s 15(curr)h 46(ex)h 15(id)h 130(ex)h 16(info)h 83 751(#if)s 21(!_EX_THRD)h 83 801(/*)s 21(Non-threaded)h 20(system)h 20(macros)h 21(simply)h 20(point)h 21(to)h 22(variables.)h 19(*/)h 83 851(#define)s 20(_EX_CURR)h 21(_ex_curr)h 83 901(#define)s 42(EX_ID)h 65(\(\(p_ex_t\))h 19(_ex_id\))h 83 951(#define)s 20(_EX_ID)h 65(_ex_id)h 83 1000(#define)s 42(EX_INFO)h 21(_ex_info)h 83 1050(#else)s 83 1100(/*)s 21(Threaded)h 21(system)h 20(macros)h 21(translate)h 20(to)h 21(kernel)h 21(calls.)h 216(*/)h 83 1150(/*)s 21(To)h 22(make)h 21(this)h 21(package)h 20(work)h 21(in)h 21(a)h 22(multi-threade)h -1(d)h 20(environment,)h 19(*/)h 83 1200(/*)s 21(set)h 22(_EX_THRD)h 20(to)h 21(TRUE)h 21(and)h 21(modify)h 21(these)h 21(definition)h -1(s.)h 194(*/)h 83 1249(/*)s 21(Note:)h 21(The)h 21(kernel)h 21(should)h 20(initialize)h 20(_EX_CURR)h 20(to)h 22(NULL.)h 151(*/)h 83 1299(#define)s 20(_EX_CURR)h 238(\(*)h 22(\(\(_ex_cx_t)h 20(*\))h 21(k_var\(51\)\)\))h 83 1349(#define)s 42(EX_ID)h 65(\(\(p_ex_t\))h 19(\(*)h 22(\(\(p_ex_t)h 64(*\))h 21(k_var\(52\)\)\)\))h 83 1399(#define)s 20(_EX_ID)h 282(\(*)h 22(\(\(p_ex_t)h 64(*\))h 21(k_var\(52\)\)\))h 83 1449(#define)s 42(EX_INFO)h 238(\(*)h 22(\(\(ptrint)h 64(*\))h 21(k_var\(53\)\)\))h 83 1499(#endif)s 172 1723(ptrint)s 376 1797(ex)s 16(curr)h 1243(EX)h 16(ID)h 0 1847(EX)s 15(INFO)h 1569(EX)h 15(ID)h 1135 1897(EX)s 15(ID)h 494(EX)h 15(ID)h 224 1947(EX)s 15(ID)h 1648 2071(EX)s 16(CURR)h 48 2121(NULL)s cmr10.300 sf 0 129(This)s 18(pac)h -1(k)h -2(age)h 17(uses)h 19(three)h 20(global)h 16(v)h -2(ariables)h 17(|)h 180(,)h 137(,)h 18(and)h 198(|)h 17(whic)h -1(h)h 18(ro)h 1(ot)h 18(the)h 18(exception)h 0 178(con)s -1(text)h 10(stac)h -1(k,)h 11(and)h 9(store)h 11(informa)h -1(tion)h 7(ab)h 1(out)h 10(the)h 10(most)h 8(recen)h -1(tly)h 11(raised)h 10(exception.)h 17(Unfortunately)h -3(,)h 10(global)h 8(v)h -2(ariables)h 0 228(suc)s -1(h)h 15(as)h 15(these)h 16(cause)h 16(problems)h 14(on)h 14(m)h -1(ulti-threaded)h 14(systems)h 14(whic)h -1(h)h 15(require)h 16(that)h 14(separate)h 16(instances)h 16(of)h 14(all)h 14(global)h 0 278(v)s -2(ariables)h 13(b)h 1(e)h 15(main)h -2(tained)h 12(for)h 14(eac)h -1(h)h 14(thread.)h 0 353(The)s 15(solution)h 14(to)h 15(this)h 14(problem)h 14(is)h 14(to)h 15(de\014ne)h 16(the)h 15(global)h 13(v)h -2(ariables)h 14(as)h 15(usual,)h 14(but)h 15(to)h 14(refer)h 16(to)h 15(them)h 14(only)h 13(through)h 15(a)h 0 403(set)s 17(of)h 15(lv)h -2(alue-yielding)h 13(macros.)h 23(These)h 18(macros)h 15(can)h 16(then)h 16(b)h 1(e)h 17(con\014gured)h 16(to)h 16(p)h 1(oin)h -1(t)h 15(either)h 17(directly)h 16(to)h 16(a)h 16(single)h 15(set)h 0 452(of)s 17(global)h 15(v)h -2(ariables)h 17(\(non-threaded)h 18(system\),)h 18(or)h 17(to)h 18(thread-instance)h 18(v)h -2(ariables)h 17(\(threaded)h 19(system\).)h 28(This)h 17(is)h 17(the)h 0 502(approac)s -1(h)h 16(that)h 17(has)h 17(b)h 1(een)h 17(tak)h -1(en)h 17(in)h 16(this)h 16(pac)h -1(k)h -2(age.)h 25(Accordingly)h 17(the)h 17(macros)h 15(ha)h -1(v)h -1(e)h 17(b)h 1(een)h 17(de\014ned)h 18(in)h 16(this)h 16(pac)h -1(k)h -2(age)h 0 552(static)s 14(parameter)h 14(section.)h 19(Both)h 14(un)h -1(threaded)h 15(and)h 14(threaded)h 15(v)h -1(ersions)h 14(app)h 1(ear)h 14(b)h 1(elo)h -1(w.)h 491 652([17])s 0 1673(\(The)s 13(51,)h 12(52)h 12(and)h 13(so)h 13(on)h 12(are)h 13(just)h 13(example)h 11(v)h -2(ariable)h 12(n)h -1(um)h -1(b)h 1(ers.)h 17(By)h 13(the)h 14(w)h -1(a)h -1(y)h -3(,)h 11(eac)h -1(h)h 13(of)h 12(the)h 13(three)h 14(global)h 11(v)h -2(ariables)h 12(will)h 0 1723(\014t)s 14(in)h -1(to)h 13(a)h 146(.\).)h 0 1797(The)s 13(global)h 12(v)h -2(ariable)h 187(is)h 12(not)h 13(supp)h 1(osed)h 15(to)h 12(b)h 1(e)h 14(used)h 14(b)h -1(y)h 13(the)h 13(clien)h -1(t)h 13(so)h 13(its)h 13(sym)h -1(b)h 1(ol)h 11(starts)h 14(with)h 29(.)h 133(and)h 160 1847(are)s 14(in)h -1(tended)h 15(to)h 13(b)h 1(e)h 15(visible)h 13(to)h 13(the)h 15(clien)h -1(t.)h 18(Ho)h -1(w)h -1(ev)h -1(er,)h 14(the)h 14(clien)h -1(t)h 14(is)h 13(not)h 14(allo)h -1(w)h -1(ed)h 12(to)h 14(write)h 14(to)h 130(and)h 14(so)h 0 1897(t)s -1(w)h -1(o)h 15(forms)h 15(ha)h -1(v)h -1(e)h 16(b)h 1(een)h 17(pro)h -1(vided,)h 15(one)h 16(hidden)h 16(read/write)h 17(form)h 14(\()h 119(\))h 16(and)h 15(one)h 16(read-only)h 16(form)h 14(\()h 103(\).)h 16(The)h 0 1947(t)s -1(yp)h 1(e)h 13(cast)h 14(in)h 128(is)h 12(there)h 14(solely)h 13(to)h 12(con)h -1(v)h -1(ert)h 14(the)h 13(v)h -2(alue)h 12(from)h 11(an)h 13(lv)h -2(alue)h 12(to)h 12(an)h 13(rv)h -2(alue)h 12(\(ANSI)h 13(6.3.4)h 11(\(fo)h 1(otnote)h 13(44\)\))h 0 1997(so)s 14(that)h 14(the)h 14(clien)h -1(t)h 14(can't)h 14(write)h 14(to)h 14(it.)h 0 2071(If)s 13(these)h 15(macros)h 12(are)h 14(c)h -1(hanged)h 14(to)h 13(p)h 1(oin)h -1(t)h 13(to)h 13(thread)h 14(instance)h 15(v)h -2(ariables,)h 12(b)h 1(e)h 14(sure)h 14(to)h 14(initiali)h -1(ze)h 13(the)h 189(v)h -2(ariable)h 0 2121(to)s 109(\(b)h 1(efore)h 12(p)h 1(erforming)h 10(an)h -1(y)h 10(exception)h 12(actions\))h 11(if)h 11(y)h -1(ou)h 10(w)h -1(an)h -1(t)h 11(unhandled)h 11(exceptions)h 12(to)h 11(b)h 1(e)h 12(correctly)h 12(detected.)h 0 2171(The)s 14(other)h 15(t)h -1(w)h -1(o)h 13(v)h -2(ariables)h 13(don't)h 14(need)h 15(to)h 13(b)h 1(e)h 15(initiali)h -1(zed.)h 0 2246(Because)s 17(these)h 16(macros)h 14(can)h 15(translate)h 15(to)h 15(function)h 14(calls,)h 15(an)h 14(attempt)h 14(has)h 15(b)h 1(een)h 16(made)h 14(in)h 14(the)h 16(rest)h 16(of)h 14(the)h 15(pac)h -1(k)h -2(age)h 0 2296(to)s 13(minim)h -2(ize)h 12(reference)h 1(s)h 15(to)h 13(them)h 13(\(e.g.)h 17(assign)h 13(their)h 14(v)h -2(alues)h 13(to)h 13(temp)h 1(orary)h 13(v)h -2(ariables)h 12(and)h 13(manipulate)h 12(them)h 12(rather)h 0 2345(than)s 14(using)h 13(the)h 15(macro)h 13(itself)h 13(m)h -1(ultipl)h -1(e)h 13(times\).)h 954 2770(12)s 14 2 824 129 r 14 2 884 129 r 14 2 1017 129 r 14 2 1077 129 r 14 2 1250 129 r 14 2 1310 129 r 14 2 363 1797 r 14 2 423 1797 r 14 2 1725 1797 r 14 2 1814 1797 r 14 2 47 1847 r 14 2 1763 1847 r 14 2 1122 1897 r 14 2 1182 1897 r 14 2 1779 1897 r 14 2 271 1947 r 14 2 1635 2071 r 14 2 1695 2071 r 12 @eop 13 @bop0 cmbx10.518 sf [<000FFC0000007FFF800001F01FE00003C00FF00007800FF8000FE007FC001FF007FE00 1FF807FE001FF807FE001FF807FE001FF807FE001FF807FE000FF007FE0007E007FC0001 800FFC0000000FF80000000FF80000001FF00000003FE00000007F8000001FFE0000001F FC0000001FFF800000001FF00000000FF800000007FE00000003FF00000003FF00000001 FF80000001FF800E0001FFC03F8001FFC07FC001FFC0FFE001FFC0FFE001FFC0FFE001FF C0FFE001FFC0FFE001FF80FFE003FF807FC003FF007F0007FE003F000FFC001FE01FF800 07FFFFE00001FFFF8000001FFC0000> 40 46 -3 45 41] 51 dc [<01F80FF000FFF87FFE00FFF9FFFF80FFFFE07FE00FFF001FF007FE000FF807FC0007F8 07F80007FC07F80003FE07F80003FE07F80003FE07F80001FF07F80001FF07F80001FF07 F80001FF07F80001FF07F80001FF07F80001FF07F80001FF07F80001FF07F80003FF07F8 0003FE07F80003FE07F80003FC07FC0007FC07FC000FF807FE000FF007FF801FE007FFE0 7FC007F9FFFF8007F87FFE0007F81FE00007F800000007F800000007F800000007F80000 0007F800000007F800000007F800000007F800000007F800000007F800000007F8000000 FFFFC00000FFFFC00000FFFFC00000> 40 46 -2 31 46] 112 dc [<00001FFC00000001FFFF00000007FFFFC000001FF807E000007FC007F00000FF000FF0 0001FF000FF00001FE000FF00003FC001FF80003FC000FF00003FC000FF00003FC0007E0 0003FC0001800003FC0000000003FC0000000003FC0000000003FC0000000003FC00FFF8 00FFFFFFFFF800FFFFFFFFF800FFFFFFFFF80003FC0007F80003FC0007F80003FC0007F8 0003FC0007F80003FC0007F80003FC0007F80003FC0007F80003FC0007F80003FC0007F8 0003FC0007F80003FC0007F80003FC0007F80003FC0007F80003FC0007F80003FC0007F8 0003FC0007F80003FC0007F80003FC0007F80003FC0007F80003FC0007F80003FC0007F8 0003FC0007F80003FC0007F80003FC0007F80003FC0007F80003FC0007F8007FFFE0FFFF C07FFFE0FFFFC07FFFE0FFFFC0> 48 50 -1 49 46] 12 dc [<03F007F80000FFF03FFF0000FFF07FFF8000FFF1F03FC0000FF3C01FE00007F7801FE0 0007F7000FF00007FE000FF00007FC000FF00007FC000FF00007F8000FF00007F8000FF0 0007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF0 0007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF0 0007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF000FFFFC1FFFF 80FFFFC1FFFF80FFFFC1FFFF80> 48 32 -3 31 46] 110 dc cmr10.300 sf [ 24 28 -2 27 26] 76 dc 13 @bop1 cmsy10.300 sf 377 511(\021)s 62 560(f)s 83 1158(g)s 469 1644(\021)s 62 1694(f)s 83 1843(g)s cmbx10.518 sf 0 50(3)s 28(Sp)h 2(eci\014cation)h cmbx10.432 sf 0 1357(3.1)s 24(Sp)h 2(eci\014cati)h -1(on)h 22(Includes)h 0 2042(3.2)s 24(Exception)h 22(T)h -2(yp)h 2(e)h cmr7.300 sf 0 1208(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(1.)h 0 1893(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(18.)h cmtt10.300 sf 1181 137(.h)s 83 660(#ifndef)s 20(_EX_DONE)h 83 710(#define)s 20(_EX_DONE)h 21(1)h 83 1108(#endif)s 1164 1445(style.h)s 476 1494(setjmp.h)s 1167(setjmp)h 81 1544(longjmp)s 83 1743(#include)s 20("style.h")h 83 1793(#include)s 20()h 1649 2279(p)s 16(ex)h 15(t)h 786 2329(ex)s 15(t)h cmsl10.300 sf 0 511(Sp)s 1(eci\014cation)h 14(\014le)h 83 610(Con\014guration)s 13(header)h 15(notice)h 83 760(Sp)s 1(eci\014cation)h 14(includes)h 83 809(Exception)s 14(t)h -1(yp)h 1(e)h 83 859(Hidden)s 14(de\014nitions)h 83 909(Macro)s 14(EX)h 15(RAISE)h 83 959(Macros)s 15(for)h 13(constructing)h 15(exception)h 15(blo)h 1(c)h -1(ks)h 83 1009(F)s -3(unction)h 14(sp)h 1(ec)h 15(ex)h 15(str)h 83 1059(Hidden)s 14(function)h 14(sp)h 1(ecs)h 0 1644(Sp)s 1(eci\014cation)h 14(includes)h cmr10.300 sf 0 137(Because)s 21(this)h 20(pac)h -1(k)h -2(age)h 19(exp)h 1(orts)h 20(lots)h 19(of)h 19(macros,)h 19(its)h 19(sp)h 1(eci\014cation)h 20(\()h 44(\))h 19(\014le)h 20(con)h -1(tains)h 19(lots)h 19(of)h 19(stu\013)h 20(that)h 19(should)h 0 187(really)s 18(b)h 1(e)h 19(in)h 18(the)h 19(implem)h -1(en)h -1(tation)h 16(\014le)h 19(out)h 19(of)h 17(sigh)h -1(t)h 19(of)h 18(the)h 19(clien)h -1(t.)h 32(Luc)h -1(kily)h -3(,)h 18(F)h -3(unnelW)h -3(eb)h 18(allo)h -1(ws)h 17(most)h 18(of)h 18(these)h 0 237(implem)s -1(en)h -1(tatio)h -1(n)h 18(details)h 20(to)h 19(b)h 1(e)h 21(lo)h 1(cated)h 20(in)h 19(the)h 21(impl)h -1(em)h -1(en)h -1(tation)h 18(section)h 20(of)h 19(this)h 20(F)h -3(unnelW)h -3(eb)h 20(\014le,)h 20(lea)h -1(ving)h 19(this)h 0 286(section)s 19(to)h 17(describ)h 1(e,)h 20(as)h 18(cleanly)h 18(as)h 18(p)h 1(ossible,)h 18(only)h 17(those)h 19(comp)h 1(onen)h -1(ts)h 17(in)h 17(the)h 19(sp)h 1(eci\014cation)h 18(\014le)h 18(in)h -1(tended)h 19(to)h 17(b)h 1(e)h 0 336(presen)s -1(ted)h 16(to)h 14(the)h 14(clien)h -1(t.)h 0 411(In)s 14(a)h 13(n)h -1(utshell,)h 14(the)h 14(pac)h -1(k)h -2(age)h 14(exp)h 1(orts)h 15(an)h 14(exception)h 14(t)h -1(yp)h 1(e,)h 14(and)h 14(macros)h 13(to)h 14(raise)h 14(and)h 13(catc)h -1(h)h 15(exceptions.)h 298 511([18])s 590 610([4])s 473 760([19])s 359 809([20])s 416 859([32])s 415 909([22])s 829 959([23])s 454 1009([30])s 484 1059([33])s 0 1445(The)s 17(sp)h 1(eci\014cation)h 17(\014le)h 17(requires)h 18(just)h 16(the)h 17(follo)h -1(wing)h 14(includes.)h 27(The)h 186(include)h 17(\014le)h 16(con)h -1(tains)h 17(basic)h 16(C)h 17(st)h -1(yle)h 0 1494(stu\013.)s 18(The)h 12(ANSI)h 12(standard)h 199(include)h 12(\014le)h 12(\(ANSI)h 12(Standard)h 12(Section)h 12(7.6\))h 11(is)h 12(required)h 12(b)h 1(ecause)h 14(the)h 0 1544(and)s 180(functions/macros)h 13(are)h 14(used)h 15(to)h 14(implem)h -1(en)h -1(t)h 12(the)h 14(pac)h -1(k)h -2(age.)h 390 1644([19])s 0 2130(Under)s 17(this)h 16(pac)h -1(k)h -2(age,)h 16(eac)h -1(h)h 16(exception)h 17(is)h 16(represented)h 18(b)h -1(y)h 16(an)h 16(explicit)h 15(ob)h 2(ject)h 17(that)h 16(resides)h 18(in)h 15(memory)h -4(.)h 23(Ho)h -1(w)h -1(ev)h -1(er,)h 0 2179(the)s 12(pac)h -1(k)h -2(age)h 12(do)h 1(es)h 12(not)h 12(exp)h 1(ort)h 12(this)h 12(ob)h 2(ject)h 12(t)h -1(yp)h 1(e.)h 18(Lik)h -1(e)h 11(man)h -1(y)h 10(C)h 12(pac)h -1(k)h -2(ages)h 11(that)h 12(exp)h 1(ort)h 12(abstract)h 13(t)h -1(yp)h 1(es,)h 13(this)h 11(pac)h -1(k)h -2(age)h 0 2229(exp)s 1(orts)h 21(only)h 19(a)h 19(p)h 1(oin)h -1(ter-to-ob)h 2(ject)h 21(t)h -1(yp)h 1(e,)h 21(the)h 21(in)h -1(ten)h -1(t)h 19(b)h 1(eing)h 20(that)h 20(the)h 21(clien)h -1(t)h 19(should)h 20(only)h 19(ev)h -1(er)h 21(manipul)h -1(ate)h 18(the)h 0 2279(abstract)s 15(ob)h 2(jects)h 16(through)h 14(p)h 1(oin)h -1(ters.)h 20(Th)h -1(us,)h 14(this)h 14(pac)h -1(k)h -2(age)h 14(exp)h 1(orts)h 16(a)h 14(p)h 1(oin)h -1(ter-to-exception)h 14(t)h -1(yp)h 1(e)h 134(,)h 14(but)h 14(do)h 1(es)h 0 2329(not)s 14(exp)h 1(ort)h 14(a)h 14(corresp)h 1(onding)h 15(exception)h 14(t)h -1(yp)h 1(e)h 96(.)h 0 2403(Most)s 13(pac)h -1(k)h -2(ages)h 13(that)h 14(exp)h 1(ort)h 13(abstract)h 14(ob)h 2(jects)h 15(b)h -1(y)h 12(p)h 1(oin)h -1(ter)h 14(t)h -1(yp)h 1(e)h 13(also)h 13(exp)h 1(ort)h 13(functions)h 14(to)h 12(dynamically)h 11(create)h 14(and)h 0 2453(destro)s -1(y)h 15(the)h 15(abstract)h 15(ob)h 2(jects.)h 21(Ho)h -1(w)h -1(ev)h -1(er,)h 14(in)h 14(the)h 15(case)h 16(of)h 13(exceptions)h 16(there)h 15(is)h 15(no)h 14(need)h 15(for)h 14(this.)h 20(In)h 14(fact)h 14(there)h 16(is)h 14(a)h 0 2503(p)s 1(ositiv)h -1(e)h 13(need)h 15(to)h 14(create)h 15(exceptions)h 15(at)h 13(compile)h 12(time)h 13(and)h 13(bind)h 14(them)h 13(statically)h 12(\(Dynamic)h 12(creation)h 14(w)h -1(ould)h 13(mean)h 0 2553(that)s 15(an)h 15(exception)h 15(w)h -1(ould)h 14(ha)h -1(v)h -1(e)h 15(to)h 15(b)h 1(e)h 15(created)h 16(b)h 1(efore)h 16(b)h 1(eing)h 15(raised,)h 15(whic)h -1(h)h 15(w)h -1(ould)h 14(b)h 1(e)h 15(a)h -1(wkw)h -1(ard)h 14(to)h 15(co)h 1(ordinate)h 15(at)h 0 2603(run)s 12(time\).)h 16(So,)h 12(instead)h 12(of)h 11(exp)h 1(orting)h 12(a)h 12(function)h 11(to)h 12(create)h 13(an)h 12(exception,)h 12(this)h 12(pac)h -1(k)h -2(age)h 12(exp)h 1(orts)h 13(macros)h 11(that)h 12(allo)h -1(w)h 0 2653(the)s 17(clien)h -1(t)h 17(to)h 16(statically)h 16(create)h 18(\(i.e.)h 25(at)h 16(compile)h 15(time\))h 16(a)h 16(new)h 17(\(hidden\))h 17(exception)h 17(ob)h 2(ject)h 17(and,)h 17(sim)h -1(ultaneously)h -4(,)h 954 2770(13)s 13 2 272 909 r 13 2 390 1009 r 14 2 1674 2279 r 14 2 1734 2279 r 14 2 833 2329 r 13 @eop 14 @bop0 cmbx10.432 sf [<7FFFF81FFFF07FFFF81FFFF07FFFF81FFFF001FF0000780000FF8000F000007FC001E0 00007FC001C000003FE003C000001FF0078000000FF80F0000000FF80E00000007FC1E00 000003FE3C00000003FE7800000001FF7000000000FFF0000000007FE0000000007FC000 0000003FE0000000001FF0000000001FF0000000001FF8000000001FFC000000003FFE00 0000007BFE00000000F1FF00000000E0FF80000001E0FFC0000003C07FC0000007803FE0 000007001FF000000F001FF000001E000FF800003C0007FC0000380003FE0000780003FE 0000F00001FF0000E00000FF80FFFF801FFFFEFFFF801FFFFEFFFF801FFFFE> 48 41 -2 40 52] 88 dc cmsl10.300 sf [<0FFFFC0000F80F0000F0038000F003C000F001C000F001C000F001C001E003C001E003 C001E003C001E0038001E0070001E00E0003C03C0003FFE00003C0000003C0000003C000 0003C000000780000007800000078000000780000007800000078000000F0000000F8000 00FFF00000> 32 28 -2 27 28] 80 dc [<0007F00000381C0000E00E0001C0030003800380070001C00E0001C01E0001E01C0000 E03C0000E0380000E0780000F0780000F0780000F0F00001E0F00001E0F00001E0F00001 E0F00003C0F00003C0F00003C0700007807000070078000F0038001E003C001C001C0038 000E00E0000383800000FE0000> 32 30 -4 28 32] 79 dc [<0FFFC000F80000F00000F00000F00000F00000F00001E00001E00001E00001E00001E0 0001E00003C00003C00003C00003C00003C00003C0040780040780040780040780080780 080780180F00380F00F0FFFFF0> 24 28 -2 27 26] 76 dc [<000400080030006000C0008001800300060006000C000C001800180038003000300070 007000600060006000E000E000E000E000E000E000E000E0006000600060006000200030 003000180008000C0004000200> 16 42 -4 30 16] 40 dc [<0100008000400060002000300010001800180018001C000C000C000C000C000C000C00 0C000C001C001C001C0018001800380038003000300070006000E000C001C00180030003 0006000C001800300060008000> 16 42 0 30 16] 41 dc cmr10.300 sf [<60F0F0600000000000000000000060F0F0701010101020204080> 8 26 -4 17 12] 59 dc 14 @bop1 cmbx10.300 sf 643 1187(Z)s cmsy10.300 sf 356 191(\021)s 62 241(f)s 83 490(g)s 684 1187(\021)s 62 1237(f)s 83 1536(g)s 411 2096(\021)s 62 2146(f)s 83 2445(g)s cmbx10.432 sf 0 1735(3.3)s 24(Macro)h 24(EX)h 24(RAISE)h cmr7.300 sf 0 540(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(18.)h 0 1586(This)s 12(macro)h 10(is)h 12(NEVER)h 11(in)h -1(v)h -1(ok)h -1(ed.)h 0 2495(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(18.)h cmsl10.300 sf 0 191(Exception)s 14(t)h -1(yp)h 1(e)h 83 291(T)s -1(yp)h 1(e)h 14(p)h 15(ex)h 16(t)h 715 340(Implem)s -1(en)h -1(tation)h 12(of)h 13(EX)h 15(EX)h -1(CEPT)h 715 390(Implem)s -1(en)h -1(tation)h 12(of)h 13(EX)h 15(EXPOR)h -3(T)h 715 440(Implem)s -1(en)h -1(tation)h 12(of)h 13(EX)h 15(LOCAL)h 0 1187(Example)s 12(exception)h 15(declarations)h 0 2096(Macro)s 14(EX)h 15(RAISE)h 584 2246(F)s -3(ast)h 14(implem)h -1(en)h -1(tatio)h -1(n)h 12(of)h 14(EX)h 15(RAISE\(P)h 15(EX\))h 584 2345(Safe)s 14(implem)h -1(en)h -1(tatio)h -1(n)h 12(of)h 14(EX)h 15(RAISE\(P)h 15(EX\))h cmtt10.300 sf 610 42(p)s 16(ex)h 15(t)h 83 340(#define)s 20(EX_EXCEPT\(NAME)h -1(\))h 83 390(#define)s 20(EX_EXPORT\(NAME)h -1(,DESC)h -1(\))h 83 440(#define)s 20(EX_LOCAL\(NAME,)h -1(DESC\))h 225 614(EX)s 15(EXPORT)h 92(EX)h 15(LOCAL)h 1229 664(DESC)s 378 764(main\(\))s 801(NAME)h 0 863(EX)s 15(EXPORT)h 93(EX)h 16(LOCAL)h 468(EX)h 15(EXPORT)h 1347 913(EX)s 15(LOCAL)h 244(EX)h 15(EXPORT)h 280 1013(EX)s 16(EXCEPT)h 83 1287(In)s 21(sloth.h:)h 148 1337(EX_EXCEPT\(sloth)s -1(_exc)h -1(eptio)h -1(n\);)h 83 1436(In)s 21(sloth.c:)h 148 1486(EX_EXPORT\(sloth)s -1(_exc)h -1(eptio)h -1(n,"Sl)h -1(oth)h 20(exception"\))h -1(;)h 201 1822(EX)s 15(RAISE)h 83 2196(#if)s 21(_EX_FAST)h 83 2246(#define)s 20(EX_RAISE\(P_EX\))h 83 2296(#else)s 83 2345(#define)s 20(EX_RAISE\(P_EX\))h 83 2395(#endif)s cmr10.300 sf 0 42(de\014ne)s 13(a)h 12(constan)h -1(t)h 12(p)h 1(oin)h -1(ter)h 12(\(of)h 12(t)h -1(yp)h 1(e)h 131(\))h 12(that)h 12(p)h 1(oin)h -1(ts)h 12(to)h 12(the)h 12(new)h 13(exception)h 13(ob)h 2(ject,)h 12(and)h 12(to)h 12(whic)h -1(h)h 12(an)h 12(iden)h -1(ti\014er)h 0 91(of)s 13(the)h 15(clien)h -1(t)h 14(programm)h -1(er's)h 12(c)h -1(ho)h 1(osing)h 14(can)h 14(b)h 1(e)h 14(b)h 1(ound.)h 18(Here)h 16(are)h 14(the)h 14(macros)h 13(that)h 14(do)h 14(this.)h 276 191([20])s 301 291([40])s 1313 340([41])s 1316 390([42])s 1281 440([43])s 0 614(The)s 14(macros)h 215(and)h 194(eac)h -1(h)h 14(create)h 15(a)h 13(brand)h 13(new)h 14(exception)h 14(ob)h 2(ject.)h 18(They)h 14(can)h 13(b)h 1(e)h 14(called)h 13(only)h 12(at)h 0 664(places)s 15(in)h 13(a)h 14(mo)h 1(dule)h 12(where)h 15(v)h -2(ariables)h 13(can)h 15(b)h 1(e)h 14(declared.)h 19(The)h 15(argumen)h -1(t)h 114(m)h -1(ust)h 13(b)h 1(e)h 14(a)h 14(one-line)h 13(constan)h -1(t)h 15(string)h 0 714(that)s 14(describ)h 1(es)h 16(the)h 15(exception;)h 14(it)h 14(will)h 12(b)h 1(e)h 15(written)h 15(out)h 14(if)h 13(the)h 14(exception)h 15(is)h 14(in)h -1(v)h -1(olv)h -1(ed)h 13(in)h 13(some)h 14(kind)h 13(of)h 14(error)h 14(\(e.g.)h 19(if)h 0 764(it)s 15(propagates)h 15(out)h 15(of)h 161(and)h 15(has)h 15(to)h 15(b)h 1(e)h 15(describ)h 1(ed)h 17(to)h 15(the)h 16(user\).)h 23(The)h 118(argumen)h -1(t)h 14(m)h -1(ust)h 14(b)h 1(e)h 16(a)h 15(program)h 0 814(iden)s -1(ti\014er)h 19(whic)h -1(h)h 19(will)h 17(b)h 1(e)h 20(the)h 19(name)h 18(of)h 18(the)h 19(p)h 1(oin)h -1(ter)h 19(constan)h -1(t)h 20(that)h 19(will)h 17(p)h 1(oin)h -1(t)h 18(to)h 19(the)h 19(new)h 20(exception.)h 33(Macros)h 204 863(and)s 195(are)h 14(iden)h -1(tical)h 13(except)h 15(that)h 218(mak)h -1(es)h 12(the)h 15(constan)h -1(t)h 14(p)h 1(oin)h -1(ter)h 14(globally)h 11(visible)h 13(in)h 0 913(the)s 15(program)h 14(\(i.e.)h 20(it)h 15(is)h 15(presen)h -1(t)h 16(in)h 14(the)h 16(sym)h -1(b)h 1(ol)h 13(table)h 15(at)h 14(link)h 14(time\),)h 14(whereas)h 199(do)h 1(es)h 16(not.)h 20(If)h 0 963(has)s 17(b)h 1(een)h 18(used,)h 18(the)h 17(constan)h -1(t)h 18(p)h 1(oin)h -1(ter)h 17(to)h 16(the)h 18(exception)h 17(can)h 17(b)h 1(e)h 17(made)h 16(visible)h 16(in)h 17(other)h 17(mo)h 1(dules)h 16(b)h -1(y)h 16(adding)h 16(an)h 0 1013(instance)s 15(of)h 13(the)h 218(macro)h 13(in)h 13(the)h 15(header)h 15(\014le)h 14(of)h 13(the)h 14(mo)h 1(dule)h 13(con)h -1(taining)h 13(the)h 14(exception)h 15(de\014nition.)h 0 1088(Here)s 15(is)h 14(an)h 14(example)h 12(of)h 13(a)h 14(global)h 12(exception)h 15(declaration:)h 577 1187([21])s 0 1822(The)s 10(macro)h 185(raises)h 10(its)h 10(argumen)h -1(t)h 8(exception.)h 17(The)h 10(argumen)h -1(t)h 8(exception)h 10(m)h -1(ust)h 9(b)h 1(e)h 10(an)h 9(expression)h 10(ev)h -2(aluating)h 0 1872(to)s 13(a)h 12(p)h 1(oin)h -1(ter)h 13(to)h 13(the)h 14(exception)h 13(to)h 13(b)h 1(e)h 14(raised.)h 18(See)h 13(a)h 13(later)h 13(section)h 14(for)h 12(the)h 14(precise)h 14(seman)h -1(tics)h 13(of)h 12(an)h 12(exception)h 14(raise.)h 0 1947(This)s 14(macro)h 12(is)h 14(syn)h -1(tactically)h 13(equiv)h -2(alen)h -1(t)h 13(to)h 14(a)h 14(comp)h 1(ound)h 12(statemen)h -1(t.)h 18(It)h 14(is)h 14(guaran)h -1(teed)h 14(that)h 14(its)h 14(argumen)h -1(t)h 13(will)h 12(b)h 1(e)h 0 1997(ev)s -2(aluated)h 14(exactly)h 14(once.)h 332 2096([22])s 1356 2246([45])s 1354 2345([44])s 954 2770(14)s 14 2 635 42 r 14 2 695 42 r 13 2 215 291 r 13 2 270 291 r 13 2 1123 340 r 13 2 1123 390 r 13 2 1123 440 r 14 2 272 614 r 14 2 555 614 r 14 2 47 863 r 14 2 331 863 r 14 2 969 863 r 14 2 1394 913 r 14 2 1807 913 r 14 2 327 1013 r 21 2 427 1735 r 14 2 248 1822 r 13 2 189 2096 r 13 2 1080 2246 r 13 2 1267 2246 r 13 2 1078 2345 r 13 2 1265 2345 r 14 @eop 15 @bop0 cmti10.300 sf [<01FFFE00003C0780003803C0003801C0003801C0003801C0007001C0007003C0007003 C00070078000E0070000E00E0000E03C0000FFF80001C01C0001C00E0001C00F0001C00F 0003800F0003800F0003800F0003800F0007001E0007001C0007003C00070078000E01E0 00FFFF8000> 32 28 -3 27 29] 66 dc cmbx10.432 sf [ 48 41 -3 40 49] 66 dc [ 48 41 -3 40 53] 68 dc cmsl10.300 sf [<0FFFFC0000F8070000F0038000F003C000F001C000F001E000F001E001E001C001E003 C001E003C001E0078001E00F0001E03C0003FFF80003C01E0003C00F0003C0078003C007 8003C007800780078007800780078007800780078007800F0007801E000F003C000F0078 00FFFFE000> 32 28 -2 27 29] 66 dc [<0007F010001C0C300070026000C001E0038000E0070000E00E0000600E0000601C0000 403C00004038000040780000007800000078000000F0000000F0000000F0000000F000FF F0F0000F80F0000780F0000F0070000F0070000F0038000F0038000F001C001F000C001E 000600660003818200007E0000> 32 30 -4 28 33] 71 dc [<0FF807FE00F800F000FC006000BC004000BE0040009E0040009E0040010F0080010F00 8001078080010780800103C0800103C0800201E1000201E1000200F1000200F1000200F9 000200790004007E0004003E0004003E0004001E0004001E0004000E000C000C001E0004 00FF800400> 32 28 -2 27 31] 78 dc [ 48 29 -5 27 43] 87 dc cmtt10.300 sf [ 8 32 -9 28 22] 124 dc 15 @bop1 cmbx10.300 sf 537 1499(Z)s cmsy10.300 sf 824 328(\021)s 62 378(f)s 83 1274(g)s 578 1499(\021)s 62 1548(f)s 83 1847(g)s cmti10.300 sf 506 2022(at)s 15(most)h 0 2607(Basic)s 18(semantics:)h 0 2657(normal)s 16(c)h -2(o)h -2(de)h cmbx10.432 sf 0 42(3.4)s 24(Exception)h 22(Blo)h 2(c)h -2(k)h 22(Construct)h 0 2246(3.5)s 24(De\014niti)h -1(on)h 22(of)h 23(Sem)h -1(an)h -2(tic)h -1(s)h cmr7.300 sf 0 1324(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(18.)h 0 1897(This)s 12(macro)h 10(is)h 12(NEVER)h 11(in)h -1(v)h -1(ok)h -1(ed.)h cmsl10.300 sf 0 328(Macros)s 14(for)h 14(constructing)h 15(exception)h 15(blo)h 1(c)h -1(ks)h 83 527(F)s -3(ast)h 14(impl)h -1(emen)h -1(tati)h -1(on)h 12(of)h 13(EX)h 16(BEGIN)h 584 577(F)s -3(ast)h 14(implem)h -1(en)h -1(tatio)h -1(n)h 12(of)h 14(EX)h 15(F)h -1(OR)h -1(GET)h 584 627(F)s -3(ast)h 14(implem)h -1(en)h -1(tatio)h -1(n)h 12(of)h 14(EX)h 15(WHEN\(P)h 15(EX\))h 584 677(F)s -3(ast)h 14(implem)h -1(en)h -1(tatio)h -1(n)h 12(of)h 14(EX)h 15(OTHERS)h 584 726(F)s -3(ast)h 14(implem)h -1(en)h -1(tatio)h -1(n)h 12(of)h 14(EX)h 15(END)h 584 776(F)s -3(ast)h 14(implem)h -1(en)h -1(tatio)h -1(n)h 12(of)h 14(EX)h 15(POP)h 83 926(Safe)s 14(implem)h -1(en)h -1(tati)h -1(on)h 12(of)h 13(EX)h 16(BEGIN)h 584 976(Safe)s 14(implem)h -1(en)h -1(tatio)h -1(n)h 12(of)h 14(EX)h 15(F)h -1(OR)h -1(GET)h 584 1025(Safe)s 14(implem)h -1(en)h -1(tatio)h -1(n)h 12(of)h 14(EX)h 15(WHEN\(P)h 16(EX\))h 584 1075(Safe)s 14(implem)h -1(en)h -1(tatio)h -1(n)h 12(of)h 14(EX)h 15(OTHERS)h 584 1125(Safe)s 14(implem)h -1(en)h -1(tatio)h -1(n)h 12(of)h 14(EX)h 15(END)h 584 1175(Safe)s 14(implem)h -1(en)h -1(tatio)h -1(n)h 12(of)h 14(EX)h 15(POP)h 0 1499(Syn)s -1(tax)h 14(of)h 13(exception)h 14(blo)h 1(c)h -1(k)h cmtt10.300 sf 83 428(#if)s 21(_EX_FAST)h 83 477(#define)s 20(EX_BEGIN)h 86(\\)h 83 577(#define)s 20(EX_FORGET)h 83 627(#define)s 20(EX_WHEN\(P_EX\))h 83 677(#define)s 20(EX_OTHERS)h 83 726(#define)s 20(EX_END)h 83 776(#define)s 20(EX_POP)h 83 826(#else)s 83 876(#define)s 20(EX_BEGIN)h 86(\\)h 83 976(#define)s 20(EX_FORGET)h 83 1025(#define)s 20(EX_WHEN\(P_EX\))h 83 1075(#define)s 20(EX_OTHERS)h 83 1125(#define)s 20(EX_END)h 83 1175(#define)s 20(EX_POP)h 83 1225(#endif)s 83 1598(compound_stat)s -1(ement)h 19(=)h 22(other_forms)h -1(_of_c)h -1(ompou)h -1(nd_st)h -1(atem)h -1(ent)h 20(|)h 21(exception_bloc)h -1(k)h 497 1648(|)s 22(EX_POP)h 83 1698(exception_blo)s -1(ck)h 20(=)h 21("EX_BEGIN")h 20(c_code)h 21("EX_FORGET")h 19({)h 22(handler)h 20(})h 22("EX_END")h 83 1748(handler)s 195(=)h 21("EX_WHEN\(")h 20(expression)h 20("\)")h 21(c_code)h 83 1797(handler)s 195(=)h 21("EX_OTHERS")h 705 1972(EX)s 15(WHEN)h 493(p)h 16(ex)h 15(t)h 210 2096(EX)s 15(POP)h 1399 2607(EX)s 15(BEGIN)h 101(EX)h 15(FORGET)h cmr10.300 sf 0 129(The)s 12(only)h 10(w)h -1(a)h -1(y)h 11(to)h 11(catc)h -1(h)h 12(one)h 11(or)h 11(more)h 11(exceptions)h 12(is)h 11(to)h 11(declare)h 12(a)h 11(construct)h 13(that)h 12(encloses)h 12(the)h 12(co)h 1(de)h 12(that)h 12(could)h 11(raise)h 0 178(the)s 13(exceptions,)h 14(along)h 12(with)h 12(the)h 13(handler)h 13(co)h 1(de.)h 19(This)h 12(construct)h 15(is)h 12(called)h 13(an)h 12(exception)h 14(blo)h 1(c)h -1(k)h 12(and)h 13(is)h 12(implem)h -1(en)h -1(ted)h 0 228(using)s 14(a)h 13(small)h 12(set)h 15(of)h 13(prepro)h 1(cess)h 1(or)h 15(macros.)h 18(Here)h 15(they)h 14(are:)h 746 328([23])s 732 527([52])s 1275 577([53])s 1361 627([54])s 1270 677([55])s 1186 726([56])s 1183 776([57])s 730 926([46])s 1273 976([47])s 1360 1025([48])s 1268 1075([49])s 1184 1125([50])s 1181 1175([51])s 0 1399(These)s 15(macros)h 13(m)h -1(ust)h 13(b)h 1(e)h 15(used)h 14(in)h 14(accordance)h 15(with)h 14(the)h 14(follo)h -1(wing)h 11(syn)h -1(tax:)h 471 1499([24])s 0 1972(The)s 14(argumen)h -1(t)h 13(to)h 13(eac)h -1(h)h 14(instan)h -1(tiation)h 13(of)h 173(m)h -1(ust)h 13(b)h 1(e)h 14(an)h 13(rv)h -2(alue)h 14(of)h 13(t)h -1(yp)h 1(e)h 133(.)h 18(It)h 13(is)h 14(guaran)h -1(teed)h 14(that)h 14(this)h 0 2022(argumen)s -1(t)h 13(will)h 12(b)h 1(e)h 15(ev)h -2(aluated)h 163(once.)h 0 2096(The)s 14(macro)h 151(should)h 14(b)h 1(e)h 15(in)h -1(v)h -1(ok)h -1(ed)h 13(only)h 13(from)h 12(within)h 13(the)h 15(normal)h 11(co)h 1(de)h 15(of)h 13(an)h 14(exception)h 15(blo)h 1(c)h -1(k.)h 0 2333(This)s 16(section)h 17(con)h -1(tains)h 16(a)h 17(detailed)h 16(English)h 16(description)h 17(of)h 15(the)h 17(seman)h -1(tics)h 16(of)h 16(the)h 17(exception)h 17(constructs)h 18(pro)h -1(vided)h 0 2383(b)s -1(y)h 17(this)h 18(pac)h -1(k)h -2(age.)h 29(Normally)h 15(this)h 18(sort)h 18(of)h 17(information)h 15(w)h -1(ould)h 17(b)h 1(e)h 18(laced)h 18(throughout)h 18(the)h 18(pac)h -1(k)h -2(age)h 18(sp)h 1(eci\014cation.)h 0 2433(Ho)s -1(w)h -1(ev)h -1(er,)h 16(in)h 14(this)h 16(pac)h -1(k)h -2(age,)h 14(there)h 17(are)h 16(so)h 15(man)h -1(y)h 13(sp)h 1(ecial)h 16(cases)h 17(that)h 15(it)h 15(w)h -1(as)h 15(though)h -1(t)h 15(b)h 1(est)h 16(to)h 16(collect)h 15(all)h 14(the)h 16(tric)h -1(ky)h 0 2482(stu\013)s 15(in)h 14(one)h 14(place.)h 19(The)h 15(reader)h 16(is)h 14(advised)h 14(to)h 14(study)h 15(this)h 14(section)h 15(thoroughly)h -3(,)h 13(as)h 14(a)h 14(lac)h -1(k)h 14(of)h 13(kno)h -1(wledge)h 14(ab)h 1(out)h 14(the)h 0 2532(precise)s 15(seman)h -1(tics)h 14(of)h 13(the)h 15(exception)h 14(construct)h 16(can)h 14(b)h 1(e)h 14(v)h -1(ery)h 15(dangerous.)h 333 2607(When)s 17(con)h -1(trol)h 18(hits)h 17(an)h 17(exception)h 18(blo)h 1(c)h -1(k,)h 18(the)h 18(co)h 1(de)h 18(b)h 1(et)h -1(w)h -1(een)h 205(and)h 224(\(the)h 220 2657(\))s 16(is)h 16(executed.)h 24(If,)h 15(during)h 16(the)h 16(execution)h 16(of)h 15(the)h 16(normal)h 13(co)h 1(de,)h 17(no)h 15(exceptions)h 17(propagate)h 15(up)h 16(to)h 15(this)h 954 2770(15)s 13 2 578 527 r 13 2 1080 577 r 13 2 1080 627 r 13 2 1272 627 r 13 2 1080 677 r 13 2 1080 726 r 13 2 1080 776 r 13 2 576 926 r 13 2 1078 976 r 13 2 1078 1025 r 13 2 1270 1025 r 13 2 1078 1075 r 13 2 1078 1125 r 13 2 1078 1175 r 14 2 752 1972 r 14 2 1370 1972 r 14 2 1430 1972 r 14 2 257 2096 r 14 2 1446 2607 r 14 2 1716 2607 r 15 @eop 16 @bop0 cmti10.300 sf [<0000180000001800000038000000380000007800000078000000B8000001B800000138 000002380000023C0000041C0000041C0000081C0000181C0000101C0000201C0000201C 00007FFC0000401C0000801C0001801C0001001C0002001C0002001C0004000E000C000E 001C001E00FF00FFC0> 32 29 -2 28 31] 65 dc [ 16 3 -3 9 15] 45 dc [<03C4062C0C3C181C3838303870387038E070E070E070E070E0E0C0E0C0E061E063C03D C001C001C0038003800380038007803FF0> 16 26 -5 17 19] 113 dc [<01FC03FE001C0070003C0060002E0040002E0040002E00400047008000470080004700 80004380800083810000838100008181000081C1000101C2000101C2000100E2000100E2 000200E4000200740002007400020074000400380004003800040038000C0018001C0010 00FF801000> 32 28 -3 27 31] 78 dc cmr10.300 sf [ 32 28 0 27 31] 89 dc [<08081010202040404040808080808080B0B0F8F878783030> 16 12 -6 28 21] 92 dc [<6060F0F0F8F8686808080808080810101010202040408080> 16 12 -1 28 21] 34 dc [<1FFF00F800780078007800780078007800780078007800780078007800780078007800 780078007800787078F878F878F878F0F040E021C01F00> 16 29 -1 27 21] 74 dc 16 @bop1 cmbx10.300 sf 1099 1436(Z)s 751 2557(Z)s cmsy10.300 sf 1140 1436(\021)s 62 1486(f)s 83 1934(g)s 793 2557(\021)s 62 2607(f)s cmr7.300 sf 0 1984(This)s 12(macro)h 10(is)h 12(NEVER)h 11(in)h -1(v)h -1(ok)h -1(ed.)h cmsl10.300 sf 0 1436(Example)s 12(of)h 14(a)h 13(correct)h 16(direct)h 15(exit)h 13(from)h 13(an)h 13(exception)h 15(blo)h 1(c)h -1(k)h 0 2557(Example)s 12(of)h 14(goto)h 13(in)h 13(exception)h 15(handler)h cmtt10.300 sf 857 340(main\(\))s 0 515(EX)s 15(FORGET)h 1328 714(setjmp)s 97(longjmp)h 1602 764(auto)s 0 863(EX)s 15(FORGET)h 666 1137(goto)s 687(return)h 146 1187(longjmp)s 315(exit)h 453 1337(EX)s 16(POP)h 83 1536(EX_BEGIN)s 148 1586(add_char\(buffer)s -1(,'x')h -1(\);)h 148 1636(if)s 22(\(is_full\(buf)h -1(fer\))h -1(\))h 20({EX_POP;)h 20(return)h 21(TRUE;})h 83 1685(EX_FORGET)s 148 1735(EX_WHEN\(buf_ful)s -1(\))h 214 1785(return)s 20(TRUE;)h 83 1835(EX_END)s 83 1885(return)s 21(FALSE;)h 0 2059(EX)s 15(POP)h 362 2233(return)s 21(TRUE)h 985(EX)h 15(POP)h 421 2283(return)s 21(TRUE)h 83 2657(EX_BEGIN)s cmti10.300 sf 843 191(hand)s 2(ler)h 15(c)h -2(o)h -2(de)h 0 465(State)s 23(of)h 22(the)h 23(function:)h 1385 515(A)s -1(l)h 2(l)h 18(ac)h -2(c)h -2(essible)h 19(obje)h -2(cts)h 19(have)h 19(val-)h 0 565(ues)s 14(as)h 13(of)h 13(the)h 14(time)h 12(longjmp)h 14(was)h 13(c)h -2(al)h 2(le)h -2(d,)h 13(exc)h -2(ept)h 13(that)h 14(the)h 13(values)h 14(of)h 13(obje)h -2(cts)h 13(of)h 13(automatic)h 14(stor)h -2(age)h 13(dur)h -2(ation)h 13(that)h 13(ar)h -2(e)h 0 614(lo)s -2(c)h -2(al)h 15(to)h 16(the)h 15(function)h 17(c)h -2(ontaining)h 16(the)h 16(invo)h -2(c)h -2(ation)h 16(of)h 15(the)h 16(c)h -2(orr)h -2(esp)h -2(onding)h 16(setjmp)h 15(macr)h -2(o)h 16(that)h 16(do)h 16(not)h 16(have)h 16(volatile-)h 0 664(quali\014e)s -2(d)h 12(typ)h -2(e)h 12(and)h 12(have)h 12(b)h -2(e)h -2(en)h 12(change)h -2(d)h 12(b)h -2(etwe)h -2(en)h 12(the)h 11(setjmp)h 12(invo)h -2(c)h -2(ation)h 12(and)h 12(longjmp)h 12(c)h -2(al)h 2(l)h 11(ar)h -2(e)h 11(indeterminate.)h 0 938(Dir)s -2(e)h -2(ct)h 20(exits)h 20(fr)h -2(om)h 20(normal)h 20(c)h -2(o)h -2(de:)h 0 2134(No)s 13(r)h -2(estrictions)h 12(on)h 14(exiting)h 13(hand)h 2(ler)h 14(c)h -2(o)h -2(de:)h 0 2408(Exc)s -2(eption)h 17(hand)h 2(ler)h 17(c)h -2(o)h -2(de)h 18(c)h -2(an)h 17(jump)h 17(to)h 16(other)h 17(exc)h -2(eption)h 17(hand)h 2(lers:)h cmr10.300 sf 0 42(construct)s 14(then,)h 13(up)h 1(on)h 13(completion)h 11(of)h 12(the)h 13(normal)h 10(co)h 1(de,)h 13(execution)h 14(of)h 11(the)h 14(en)h -1(tire)h 13(construct)h 14(terminates.)h 17(If,)h 12(during)h 0 91(the)s 12(execution)h 13(of)h 11(the)h 13(normal)h 9(co)h 1(de,)h 13(an)h 11(exception)h 13(is)h 12(raised)h 12(\(in)h 11(the)h 13(co)h 1(de)h 12(or)h 12(an)h -1(y)h 11(function)h 12(it)h 11(calls\))h 12(that)h 12(propagates)h 0 141(up)s 16(to)h 15(this)h 16(construct,)h 18(con)h -1(trol)h 15(exits)h 16(the)h 16(normal)h 14(co)h 1(de)h 17(at)h 15(that)h 16(p)h 1(oin)h -1(t)h 15(and)h 16(is)h 15(transferred)h 18(to)h 15(the)h 17(co)h 1(de)h 16(asso)h 1(ciated)h 0 191(with)s 13(the)h 15(handler)h 13(for)h 14(the)h 14(exception)h 14(raised)h 14(\(the)h 242(\).)h 18(If)h 13(there)h 15(is)h 14(no)h 13(handler)h 14(for)h 13(the)h 15(exception)h 14(raised,)h 0 241(the)s 18(exception)h 19(is)h 17(propagated)h 18(to)h 18(the)h 18(next)h 18(dynamically)h 15(enclosing)h 18(handler)h 18(in)h 17(the)h 18(dynamic)h 16(c)h -1(hain.)h 30(If)h 17(there)h 19(is)h 0 291(a)s 18(handler)h 19(for)h 18(the)h 20(target)h 19(exception,)h 20(the)h 19(co)h 1(de)h 19(asso)h 1(ciated)h 20(with)h 18(that)h 19(handler)h 19(is)h 18(executed)h 21(and)h 18(the)h 19(construct)h 0 340(terminates.)s 24(If)h 16(an)h 16(exception)h 16(propagates)h 17(out)h 16(of)h 147(,)h 15(the)h 16(exception)h 17(pac)h -1(k)h -2(age)h 16(b)h 1(om)h -1(bs)h 15(the)h 16(program)h 15(with)h 15(an)h 0 390(error)s 15(message)h 13(explaining)h 13(what)h 14(has)h 14(happ)h 1(ened)h 15(and)h 13(prin)h -1(ting)h 13(out)h 14(the)h 15(description)h 14(of)h 14(the)h 14(o\013ending)h 14(exception.)h 443 465(Y)s -3(ou)h 22(ma)h -1(y)h 20(b)h 1(e)h 23(w)h -1(ondering)h 22(wh)h -1(y)h 22(the)h 23(middle)h 20(k)h -1(eyw)h -1(ord)h 23(in)h 21(the)h 23(exception)h 23(construct)h 24(is)h 191 515(.)s 17(The)h 18(reason)h 19(is)h 18(that)h 19(the)h 19(ANSI)h 18(standard)h 19(\(ANSI)h 18(7.6.2.1\))h 16(states:)h 1844 664(These)s 0 714(are)s 16(strong)h 16(w)h -1(ords!)h 23(Because)h 18(this)h 15(exception)h 17(pac)h -1(k)h -2(age)h 15(is)h 15(implem)h -1(en)h -1(ted)h 15(using)h 161(and)h 170(,)h 14(these)h 17(w)h -1(ords)h 0 764(mean)s 16(that)h 18(follo)h -1(wing)h 15(the)h 18(raising)h 17(of)h 17(an)h 17(exception,)h 19(y)h -1(ou)h 17(cannot)h 18(rely)h 17(on)h 18(the)h 18(v)h -2(alue)h 17(of)h 17(an)h -1(y)h 105(ma)h -1(tic)h 16(v)h -2(ariable)h 0 814(that)s 16(w)h -1(as)h 15(mo)h 1(di\014ed)h 14(within)h 15(the)h 16(normal)h 14(co)h 1(de)h 16(of)h 15(an)h 16(exception)h 16(construct)h 17(b)h 1(efore)h 17(the)h 16(exception)h 16(w)h -1(as)h 16(raised.)h 24(The)h 204 863(syn)s -1(tax)h 14(has)h 14(b)h 1(een)h 15(designed)h 14(to)h 14(act)h 14(as)h 14(a)h 14(con)h -1(tin)h -1(ual)h 13(reminder)h 13(of)h 13(this)h 14(danger.)h 604 938(Because)s 22(the)h 21(exception)h 21(pac)h -1(k)h -2(age)h 19(main)h -1(tai)h -1(ns)h 19(an)h 20(explicit)h 19(stac)h -1(k)h 21(of)h 19(exception)h 0 988(handling)s 15(con)h -1(texts,)h 17(there)h 18(are)h 17(some)h 15(restrictions)h 18(ab)h 1(out)h 16(ho)h -1(w)h 15(con)h -1(trol)h 16(can)h 17(lea)h -1(v)h -1(e)h 16(suc)h -1(h)h 17(constructs.)h 27(\\Acceptable")h 0 1038(w)s -1(a)h -1(ys)h 14(of)h 13(lea)h -1(ving)h 13(the)h 15(main)h 12(co)h 1(de)h 15(of)h 14(an)h 14(exception)h 15(blo)h 1(c)h -1(k)h 14(are)h 14(1\))h 14(reac)h -1(hing)h 14(the)h 15(end)h 15(of)h 14(the)h 14(blo)h 1(c)h -1(k,)h 14(and)h 14(2\))h 14(raising)h 13(an)h 0 1088(exception)s 12(\(handled)h 12(or)h 12(unhandled\).)h 17(Ho)h -1(w)h -1(ev)h -1(er,)h 13(con)h -1(trol)h 11(can)h 12(also)h 11(exit)h 12(the)h 12(construct)h 13(in)h 12(four)h 11(other)h 12(\\unacceptable")h 0 1137(w)s -1(a)h -1(ys.)h 28(These)h 19(are)h 17(1\))h 18(b)h -1(y)h 17(executing)h 18(a)h 121(out)h 18(of)h 16(the)h 18(blo)h 1(c)h -1(k,)h 18(2\))h 17(b)h -1(y)h 17(executing)h 18(a)h 149(,)h 17(3\))h 17(b)h -1(y)h 17(executing)h 18(an)h 0 1187(explicit)s 167(,)h 11(4\))h 13(b)h -1(y)h 13(executing)h 114(or)h 13(some)h 13(other)h 14(program)h 11(terminating)h 12(function)h 12(\(actually)h 13(this)h 13(case)h 14(do)h 1(es)h 0 1237(not)s 12(matter)h 11(as)h 13(m)h -1(uc)h -1(h)h 11(as)h 12(the)h 13(program)h 10(ends)h 13(an)h -1(yw)h -1(a)h -1(y\).)h 16(T)h -3(o)h 12(ensure)h 14(that)h 12(the)h 12(exception)h 13(pac)h -1(k)h -2(age)h 12(correctly)h 13(main)h -1(tains)h 0 1287(its)s 12(stac)h -1(k)h 12(of)h 11(liv)h -1(e)h 10(exception)h 13(blo)h 1(c)h -1(ks,)h 11(eac)h -1(h)h 13(instance)h 12(of)h 11(an)h -1(y)h 11(of)h 11(the)h 12(four)h 12(unacceptable)h 12(w)h -1(a)h -1(ys)h 12(of)h 11(exiting)h 11(a)h 11(blo)h 1(c)h -1(k)h 11(should)h 0 1337(b)s 1(e)h 15(prededed)h 15(b)h -1(y)h 14(a)h 13(call)h 14(to)h 139(.)h 12(Here)h 15(is)h 14(an)h 14(example)h 12(of)h 14(a)h 13(correct)h 16(explicit)h 13(exception)h 15(blo)h 1(c)h -1(k)h 14(termination.)h 1033 1436([25])s 138 2059(can)s 15(only)h 13(b)h 1(e)h 14(called)h 14(from)h 12(within)h 13(the)h 15(normal)h 11(co)h 1(de)h 15(of)h 13(an)h 14(exception)h 15(blo)h 1(c)h -1(k.)h 728 2134(By)s 13(the)h 13(time)h 10(con)h -1(trol)h 12(reac)h -1(hes)h 14(an)h -1(y)h 12(exception)h 13(handler)h 12(co)h 1(de,)h 13(the)h 12(curren)h -1(t)h 0 2183(exception)s 17(con)h -1(text)h 18(has)h 17(b)h 1(een)h 17(p)h 1(opp)h 1(ed,)h 18(so)h 17(there)h 18(are)h 17(no)h 16(constrain)h -1(ts)h 17(at)h 17(all)h 15(on)h 17(exits)h 17(from)h 15(handler)h 17(co)h 1(de.)h 27(In)h 16(the)h 0 2233(example)s 12(ab)h 1(o)h -1(v)h -1(e,)h 13(the)h 267(from)h 12(the)h 14(normal)h 12(co)h 1(de)h 14(m)h -1(ust)h 13(b)h 1(e)h 14(preceeded)h 16(b)h -1(y)h 13(a)h 13(call)h 13(to)h 139(,)h 12(but)h 14(no)h 13(suc)h -1(h)h 0 2283(call)s 14(is)h 15(required)h 16(for)h 14(the)h 271(in)h 14(the)h 16(handler)h 15(co)h 1(de.)h 22(In)h 15(fact,)h 15(suc)h -1(h)h 15(a)h 15(call)h 14(w)h -1(ould)h 14(b)h 1(e)h 16(erroneous.)h 22(As)h 16(so)h 1(on)h 0 2333(as)s 14(con)h -1(trol)h 14(hits)h 14(handler)h 14(co)h 1(de)h 14(it)h 14(is)h 14(guaran)h -1(teed)h 14(that)h 14(the)h 14(curren)h -1(t)h 16(con)h -1(text)h 14(has)h 14(b)h 1(een)h 15(p)h 1(opp)h 1(ed.)h 1157 2408(Just)s 17(place)h 16(a)h 15(lab)h 1(el)h 16(inside)h 15(one)h 16(handler)h 17(and)h 15(a)h 0 2457(goto)s 13(in)h 13(another.)h 19(This)h 13(is)h 14(useful)h 14(where)h 15(the)h 14(co)h 1(de)h 15(in)h 13(one)h 14(handler)h 14(is)h 13(suitable)h 14(for)h 13(man)h -1(y)h 12(exceptions.)h 19(F)h -3(or)h 14(example:)h 685 2557([26])s 954 2770(16)s 14 2 47 515 r 14 2 47 863 r 14 2 500 1337 r 14 2 47 2059 r 14 2 1635 2233 r 16 @eop 17 @bop0 cmti10.300 sf [<01FFE0003C0000380000380000380000380000700000700000700000700000E00000E0 0000E00000E00001C00001C00001C00001C0000380080380080380080380100700100700 300700600700E00E03C0FFFFC0> 24 28 -3 27 26] 76 dc [<0007F000001C1C0000700E0000E0070001C0038003800380070003800E0003C01E0003 C01C0003C03C0003C03C0003C0780003C0780003C0780003C0F0000780F0000780F00007 80F0000F00F0000F00F0000E00F0001E00F0003C0070003800700070007800E0003801C0 001C0380000E0E000003F80000> 32 30 -6 28 32] 79 dc [<01FFCFFE003C01E0003801C0003801C0003801C0003801C00070038000700380007003 800070038000E0070000E0070000E0070000FFFF0001C00E0001C00E0001C00E0001C00E 0003801C0003801C0003801C0003801C00070038000700380007003800070038000F0078 00FFE7FF00> 32 28 -3 27 31] 72 dc cmtt10.300 sf [<007C0000FC0000DC0001DC00039C00039C00071C000F1C000E1C001E1C003C1C00381C 00781C00F01C00FFFFE0FFFFE0FFFFE0001C00001C00001C00001C00001C0001FFC001FF C001FFC0> 24 25 -1 24 22] 52 dc 17 @bop1 cmbx10.300 sf 946 982(Z)s 755 1900(Z)s cmsy10.300 sf 83 589(g)s 987 982(\021)s 62 1032(f)s 83 1630(g)s 797 1900(\021)s 62 1950(f)s 83 2547(g)s cmti10.300 sf 0 835(L)s -2(o)h -2(c)h -2(al)h 15(variables:)h 0 1753(Exc)s -2(eption)h 14(blo)h -2(cks)h 14(c)h -2(an)h 14(b)h -2(e)h 14(neste)h -2(d:)h 0 2670(OTHERS)s 15(hand)h 2(ler:)h cmr7.300 sf 0 639(This)s 12(macro)h 10(is)h 12(NEVER)h 11(in)h -1(v)h -1(ok)h -1(ed.)h 0 1679(This)s 12(macro)h 10(is)h 12(NEVER)h 11(in)h -1(v)h -1(ok)h -1(ed.)h 0 2597(This)s 12(macro)h 10(is)h 12(NEVER)h 11(in)h -1(v)h -1(ok)h -1(ed.)h cmsl10.300 sf 0 982(Example)s 12(of)h 14(lo)h 1(cal)h 13(v)h -2(ariables)h 13(in)h 13(an)h 14(exception)h 15(blo)h 1(c)h -1(k)h 0 1900(Example)s 12(of)h 14(nested)h 15(exception)h 15(handlers)h cmr10.300 sf 0 712(Because)s 12(there)h 11(are)h 10(no)h 9(restrictions)h 11(on)h 9(ho)h -1(w)h 10(handlers)h 10(can)h 10(exit,)h 10(the)h 128(could)h 10(ha)h -1(v)h -1(e)h 9(p)h 1(oin)h -1(ted)h 10(outside)h 10(the)h 10(construct)h 0 762(to)s 1(o.)h 297 835(Eac)s -1(h)h 15(normal)h 13(co)h 1(de)h 15(and)h 14(handler)h 15(co)h 1(de)h 16(segmen)h -1(t)h 14(is)h 14(actually)h 14(framed)h 13(as)h 15(a)h 14(comp)h 1(ound)h 14(statemen)h -1(t.)h 0 885(This)s 14(means)h 13(that)h 14(y)h -1(ou)h 13(can)h 14(declare)h 15(lo)h 1(cal)h 13(v)h -2(ariables)h 13(if)h 13(desired.)h 19(F)h -3(or)h 14(example:)h 881 982([27])s 574 1753(F)s -3(unctions)h 13(can)h 12(con)h -1(tain)h 13(man)h -1(y)h 10(exception)h 14(blo)h 1(c)h -1(ks.)h 17(Exception)h 14(blo)h 1(c)h -1(ks)h 12(can)h 13(ev)h -1(en)h 13(b)h 1(e)h 0 1803(nested.)s 20(Ho)h -1(w)h -1(ev)h -1(er,)h 13(b)h 1(e)h 15(v)h -1(ery)h 14(sure)h 15(to)h 14(ob)h 1(ey)h 14(the)h 14(other)h 15(rules.)h 19(Here)h 15(is)h 13(an)h 14(example:)h 689 1900([28])s 357 2670(The)s 218(handler)h 14(catc)h -1(hes)h 15(all)h 13(exceptions.)h 954 2770(17)s cmtt10.300 sf 148 42(add_char\(buffer)s -1(,'x')h -1(\);)h 83 91(EX_FORGET)s 148 141(EX_WHEN\(misc_1\))s 19(goto)h 21(doit;)h 148 191(EX_WHEN\(misc_2\))s 19(goto)h 21(doit;)h 148 241(EX_WHEN\(misc_3\))s 19(goto)h 21(doit;)h 148 291(EX_WHEN\(misc_4\))s 19(goto)h 21(doit;)h 148 340(EX_WHEN\(misc_5\))s 192 390(doit:)s 257 440(printf\("Miscel)s -1(laneo)h -1(us)h 20(exception)h 20(happened.\\n)h -1("\);)h 257 490(return)s 21(FALSE;)h 83 540(EX_END)s 1113 712(gotos)s 83 1082(EX_BEGIN)s 148 1132(int)s 22(result;)h 148 1182(result=add_char)s -1(\(buf)h -1(fer,')h -1(x'\);)h 148 1232(if)s 22(\(result)h 20(>)h 22(10\))h 21({EX_POP;)h 20(return)h 21(TRUE;})h 83 1281(EX_FORGET)s 148 1331(EX_WHEN\(buf_ful)s -1(\))h 214 1381(string)s 20(walrus)h 21(=)h 21("An)h 22(example)h 20(string.\\n";)h 214 1431(printf\(walru)s -1(s\);)h 214 1481(return)s 20(TRUE;)h 83 1530(EX_END)s 83 1580(return)s 21(FALSE;)h 83 1999(EX_BEGIN)s 148 2049(add_char\(buffer)s -1(,'x')h -1(\);)h 148 2099(EX_BEGIN)s 214 2149(big_func\(\);)s 214 2199(EX_FORGET)s 279 2248(EX_WHEN\(buf_f)s -1(ul\))h 20(printf\("big)h -1(_func)h 19(raised)h 21(buf_ful.\\n")h -1(\);)h 148 2298(EX_END)s 83 2348(EX_FORGET)s 148 2398(EX_WHEN\(buf_ful)s -1(\))h 20(printf\("add_)h -1(char)h 19(raised)h 21(buf_ful.\\n"\))h -1(;)h 148 2448(EX_WHEN\(sloth\))s 63(printf\("eith)h -1(er)h 20(add_char)h 20(or)h 21(big_func)h 20(raised)h 21(sloth.\\n"\);)h 83 2497(EX_END)s 442 2670(EX)s 15(OTHERS)h 14 2 489 2670 r 17 @eop 18 @bop0 cmbx10.432 sf [<380000003E0000003FFFFFF03FFFFFF03FFFFFF07FFFFFE07FFFFFC07FFFFFC07FFFFF 8070000F0070001E0070003C00E0003800E0007800E000F0000001E0000003C0000003C0 000007800000078000000F0000001F0000001F0000001F0000003F0000003F0000003E00 00007E0000007E0000007E0000007E000000FE000000FE000000FE000000FE000000FE00 0000FE000000FE000000FE000000FE000000380000> 32 41 -4 40 34] 55 dc [ 40 41 -3 40 43] 70 dc 18 @bop1 cmbx10.300 sf 528 1034(Z)s cmsy10.300 sf 569 1034(\021)s 62 1084(f)s 83 1732(g)s 450 2573(\021)s 62 2622(f)s 743(g)h cmsl10.300 sf 0 1034(Example)s 12(of)h 14(use)h 14(of)h 14(EX)h 15(ID)h 0 2573(F)s -3(unction)h 14(sp)h 1(ec)h 15(ex)h 15(str)h cmbx10.432 sf 0 294(3.6)s 24(Exception)h 22(Informati)h -1(on)h 0 2301(3.7)s 24(F)h -6(unction)h 23(ex)h 24(str)h cmti10.300 sf 0 42(Hand)s 2(ler)h 17(pr)h -2(e)h -2(c)h -2(e)h -2(denc)h -2(e:)h 0 162(R)s -2(e-r)h -2(aising)h 14(an)h 16(exc)h -2(eption:)h cmr7.300 sf 0 1779(This)s 12(macro)h 10(is)h 12(NEVER)h 11(in)h -1(v)h -1(ok)h -1(ed.)h 0 2670(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(18.)h cmtt10.300 sf 1410 162(EX)s 16(RAISE\(EX)h 14(ID\);)h 1847 424(EX)s 15(ID)h 958 474(p)s 16(ex)h 15(t)h 188(EX)h 15(INFO)h 543 524(ptrint)s 373(style.h)h 622 644(EX)s 16(ID)h 1217 794(EX)s 15(ID)h 1132 943(goto)s 83 1134(EX_BEGIN)s 148 1184(add_char\(buffer)s -1(,'x')h -1(\);)h 83 1233(EX_FORGET)s 148 1283(EX_WHEN\(misc_1\))s 19(goto)h 21(doit;)h 148 1333(EX_WHEN\(misc_2\))s 19(goto)h 21(doit;)h 148 1383(EX_WHEN\(misc_3\))s 19(goto)h 21(doit;)h 148 1433(EX_WHEN\(misc_4\))s 19(goto)h 21(doit;)h 148 1482(EX_WHEN\(misc_5\))s 192 1532(doit:)s 257 1582(printf\("Miscel)s -1(laneo)h -1(us)h 20(exception)h 20(happened.\\n)h -1("\);)h 257 1632(EX_RAISE\(EX_ID)s -1(\);)h 83 1682(EX_END)s 0 1850(EX)s 15(ID)h 245 1970(EX)s 15(INFO)h 1731 2069(EX)s 15(INFO)h 208 2119(ptrint)s 244 2382(ex)s 15(str)h 1782 2432(EX)s 15(LOCAL)h 51 2482(EX)s 15(EXPORT)h 83 2622(EXPORT)s 21(string)h 20(ex_str)h 21(P_\(\(p_ex_t\))h -1(\);)h cmr10.300 sf 385 42(The)s 16(\014rst)h 17(handler)h 15(that)h 16(matc)h -1(hes)h 16(an)h 15(exception)h 17(catc)h -1(hes)h 17(the)h 16(exception.)h 25(If)h 15(more)h 15(than)h 16(one)h 0 91(handler)s 14(matc)h -1(hes)h 14(the)h 14(same)h 13(exception,)h 14(the)h 15(\014rst)h 14(handler)h 14(will)h 13(b)h 1(e)h 14(activ)h -2(ated.)h 456 162(T)s -3(o)h 13(re-raise)h 15(an)h 13(exception,)h 14(simply)h 12(co)h 1(de)h 15(the)h 14(statemen)h -1(t)h 352(.)h 0 375(When)s 19(an)h 18(exception)h 19(is)h 18(raised,)h 19(t)h -1(w)h -1(o)h 18(sym)h -1(b)h 1(ols)h 17(pro)h -1(vide)h 18(informati)h -1(on)h 16(ab)h 1(out)h 19(the)h 19(exception)h 19(b)h 1(eing)h 18(raised.)h 32(These)h 0 424(sym)s -1(b)h 1(ols)h 10(are)h 13(macros)h 11(and)h 12(do)h 11(not)h 12(necessarily)h 13(translate)h 13(to)h 12(v)h -2(ariable)h 10(names.)h 17(Ho)h -1(w)h -1(ev)h -1(er,)h 12(it)h 12(is)h 12(guaran)h -1(teed)h 12(that)h 0 474(will)s 10(b)h 1(e)h 11(an)h 11(rv)h -2(alue)h 11(\(ANSI)h 11(6.2.2.1)h 9(\(fo)h 1(otnote)h 11(31\)\))h 11(of)h 11(t)h -1(yp)h 1(e)h 130(,)h 11(and)h 11(that)h 169(will)h 9(b)h 1(eha)h -1(v)h -1(e)h 12(lik)h -1(e)h 10(an)h 11(mo)h 1(di\014able)h 0 524(lv)s -2(alue)h 14(\(ANSI)h 15(6.2.2.1\))h 13(of)h 14(t)h -1(yp)h 1(e)h 161(\(see)h 17(the)h 15(header)h 16(\014le)h 182(for)h 15(this)h 15(t)h -1(yp)h 1(e\).)h 22(The)h 15(declarations)h 15(of)h 15(these)h 0 574(macros)s 13(app)h 1(ear)h 14(in)h 14(the)h 14(static)h 15(parameters)h 13(section)h 15(of)h 13(this)h 14(do)h 1(cumen)h -1(t.)h 0 644(Whenev)s -1(er)h 17(an)h 16(exception)h 16(is)h 16(raised,)h 135(con)h -1(tains)h 16(the)h 16(ID)h 16(of)h 15(the)h 16(exception)h 17(b)h 1(eing)h 16(raised.)h 24(This)h 16(v)h -2(alue)h 15(p)h 1(ersists)h 0 694(un)s -1(til)h 18(the)h 19(next)h 20(exception)h 19(is)h 19(raised.)h 34(This)h 18(v)h -2(ariable)h 18(is)h 19(only)h 18(marginal)h -1(ly)h 16(useful)h 19(in)h 19(the)h 19(curren)h -1(t)h 21(v)h -1(ersion)h 19(of)h 18(this)h 0 744(pac)s -1(k)h -2(age,)h 15(as)h 15(eac)h -1(h)h 15(exception)h 16(handler)h 15(will)h 14(alw)h -1(a)h -1(ys)h 14(statically)h 14(\\kno)h -1(w")h 14(the)h 16(exception)h 16(that)h 15(it)h 15(has)h 15(caugh)h -1(t.)h 22(In)h 15(long)h 0 794(and)s 16(complex)h 14(handlers)h 17(though,)h 16(the)h 16(capacit)h -1(y)h 16(for)h 15(self-reference)h 19(that)h 134(pro)h -1(vides)h 16(enables)h 17(suc)h -1(h)h 17(handlers)h 16(to)h 0 844(b)s 1(e)h 16(co)h 1(ded)h 15(without)h 15(hard-wiring)h 14(the)h 15(exception)h 16(in)h 15(question)h 15(whenev)h -1(er)h 16(it)h 15(is)h 14(re-raised.)h 23(This)h 14(allo)h -1(ws)h 14(exceptions)h 16(to)h 0 893(b)s 1(e)h 16(more)h 14(easily)h 14(renamed.)h 21(The)h 16(macro)h 14(is)h 14(also)h 15(useful)h 15(b)h 1(ecause)h 17(it)h 14(allo)h -1(ws)h 14(exceptions)h 16(to)h 15(b)h 1(e)h 16(dynamicall)h -1(y)h 13(re-raised)h 0 943(from)s 12(co)h 1(de)h 15(to)h 14(whic)h -1(h)h 13(man)h -1(y)h 12(handlers)h 15(ha)h -1(v)h -1(e)h 13(b)h 1(een)h 15(p)h 1(oin)h -1(ted)h 14(to)h 14(with)h 102(s.)h 17(F)h -3(or)h 14(example:)h 462 1034([29])s 115 1850(has)s 12(b)h 1(een)h 13(con\014gured)h 12(as)h 12(an)h 12(rv)h -2(alue)h 11(so)h 12(that)h 12(it)h 11(cannot)h 12(b)h 1(e)h 13(written.)h 17(Th)h -1(us,)h 13(it)h 11(is)h 12(guaran)h -1(teed)h 12(alw)h -1(a)h -1(ys)h 11(to)h 11(con)h -1(tain)h 0 1899(the)s 14(ID)h 14(of)h 13(the)h 15(exception)h 14(most)h 13(recen)h -1(tly)h 15(raised.)h 0 1970(The)s 16(v)h -2(ariable)h 177(is)h 16(more)h 15(under)h 16(clien)h -1(t)h 16(con)h -1(trol.)h 24(It)h 15(exists)h 17(simply)h 14(to)h 15(act)h 17(as)h 15(an)h 16(abstract)h 17(c)h -1(hannel)h 16(for)h 15(co)h 1(de)h 0 2020(raising)s 12(exceptions)h 14(to)h 12(comm)h -2(unicate)h 11(with)h 13(co)h 1(de)h 13(catc)h -1(hing)h 13(exceptions.)h 19(There)h 14(are)h 13(no)h 12(rules)h 13(for)h 13(this)h 12(v)h -2(alue)h 12(|)h 12(it)h 13(can)h 0 2069(b)s 1(e)h 13(written)h 13(to,)h 12(or)h 13(read)h 13(from)h 11(an)h -1(y)h 12(piece)h 13(of)h 12(co)h 1(de)h 14(at)h 12(an)h -1(y)h 12(time;)h 11(mak)h -1(e)h 11(up)h 13(y)h -1(our)h 12(o)h -1(wn)h 13(rules.)h 18(The)h 13(t)h -1(yp)h 1(e)h 13(of)h 171(has)h 0 2119(b)s 1(een)h 13(set)h 13(to)h 154(so)h 12(as)h 12(to)h 12(allo)h -1(w)h 10(an)h -1(y)h 12(p)h 1(oin)h -1(ter)h 12(or)h 12(in)h -1(teger)h 12(to)h 12(b)h 1(e)h 12(con)h -1(v)h -1(ey)h -1(ed)h 13(through)h 12(the)h 12(v)h -2(ariable.)h 16(This)h 12(e\013ectiv)h -1(ely)h 0 2169(allo)s -1(ws)h 13(an)h -1(y)h 13(amoun)h -1(t)h 12(of)h 13(informatio)h -1(n)h 12(to)h 14(b)h 1(e)h 15(passed.)h 0 2382(The)s 12(function)h 148(accepts)h 14(a)h 11(p)h 1(oin)h -1(ter)h 12(to)h 12(an)h 11(exception)h 13(and)h 12(returns)h 13(a)h 11(p)h 1(oin)h -1(ter)h 12(to)h 12(a)h 12(constan)h -1(t)h 12(static)h 12(string)h 12(b)h 1(eing)h 0 2432(the)s 15(one)h 16(line)h 14(description)h 15(of)h 15(the)h 15(exception)h 16(that)h 15(w)h -1(as)h 14(pro)h -1(vided)h 15(when)h 15(the)h 16(exception)h 16(w)h -1(as)h 14(de\014ned)h 16(with)h 0 2482(or)s 205(.)h 371 2573([30])s 954 2770(18)s 14 2 1457 162 r 14 2 1648 162 r 14 2 1894 424 r 14 2 983 474 r 14 2 1043 474 r 14 2 1312 474 r 14 2 669 644 r 14 2 1264 794 r 13 2 400 1034 r 14 2 47 1850 r 14 2 292 1970 r 14 2 1778 2069 r 21 2 469 2301 r 14 2 291 2382 r 14 2 1829 2432 r 14 2 98 2482 r 13 2 307 2573 r 18 @eop 19 @bop0 cmbx10.432 sf [<003FC00001FFF00003FFFC000FC07E000F003F001F001F001E001F803E000F803E000F 803F000F803F800F803FC01F803FF01F003FFC3F001FFE7E001FFFF8000FFFE00007FFF8 0001FFFC0001FFFF0007FFFF801F8FFF803F03FFC07E01FFC07C007FE0FC001FE0F8000F E0F80007E0F80003E0F80003E0F80003E0FC0003C07C0007C07E0007803F000F801FC03F 000FFFFC0003FFF800007FC000> 32 39 -3 38 34] 56 dc 19 @bop1 cmbx10.432 sf 0 42(3.8)s 24(A)h 23(W)h -6(arning)h 23(Ab)h 2(out)h 24(Nam)h -1(es)h 0 477(3.9)s 24(Glossary)h cmtt10.300 sf 552 278(ex)s 311 328(ex)s 0 565(Abstract)s 20(client)h 0 639(Catch)s 0 764(Client)s 0 839(Exception)s 0 913(Exception)s 20(block)h 0 1038(Exception)s 20(description)h 0 1162(Exception)s 20(identifier)h 0 1287(Exception)s 20(handler)h 0 1411(Direct)s 21(exit)h 232 1461(return)s 210(longjmp)h 254(EX)h 16(POP)h 0 1536(Raise)s 618(EX)h 15(RAISE)h cmr10.300 sf 0 129(This)s 11(pac)h -1(k)h -2(age)h 12(exp)h 1(orts)h 12(a)h 11(n)h -1(um)h -1(b)h 1(er)h 11(of)h 11(compile-tim)h -2(e)h 10(and)h 12(link-tim)h -1(e)h 10(sym)h -1(b)h 1(ols)h 10(that)h 11(p)h 1(ollute)h 11(the)h 13(sym)h -1(b)h 1(ol)h 9(table)h 12(and)h 11(link)h 0 178(table.)s 18(This)h 12(p)h 1(ollution)h 11(is)h 13(necessary)h 15(b)h 1(ecause)h 14(this)h 13(pac)h -1(k)h -2(age)h 12(relies)h 14(signi\014can)h -1(tly)h 11(on)h 13(exp)h 1(orted)h 14(macros)h 12(that)h 12(referenc)h 1(e)h 0 228(exp)s 1(orted)h 17(v)h -2(ariables.)h 23(T)h -3(o)h 15(reduce)h 17(naming)h 13(con\015icts,)h 17(nearly)h 16(all)h 14(exp)h 1(orted)h 17(names)h 15(that)h 16(are)h 16(supp)h 1(osed)h 17(to)h 15(b)h 1(e)h 17(visible)h 0 278(to)s 18(the)h 19(clien)h -1(t)h 19(comm)h -1(ence)h 18(with)h 96(and)h 18(all)h 17(exp)h 1(orted)h 20(names)h 17(that)h 19(are)h 18(supp)h 1(osed)h 20(to)h 18(b)h 1(e)h 20(in)h -1(visible)h 17(to)h 18(the)h 19(clien)h -1(t)h 0 328(comm)s -1(ence)h 14(with)h 73(.)h 17(Please)h 15(b)h 1(e)h 15(careful)h 14(to)h 13(a)h -1(v)h -1(oid)h 13(names)h 13(with)h 14(these)h 15(pre\014xes.)h 341 565(|)s 13(A)h 14(clien)h -1(t)h 14(of)h 13(this)h 14(pac)h -1(k)h -2(age)h 14(ab)h 1(out)h 13(whic)h -1(h)h 14(no)h 14(informa)h -1(tion)h 12(is)h 14(kno)h -1(wn.)h 126 639(|)s 17(When)h 17(an)h 18(exception)h 18(is)h 17(raised,)h 18(it)h 17(propagates)h 17(up)h 18(the)h 18(run-time)h 16(con)h -1(text)h 18(stac)h -1(k)h 18(un)h -1(til)h 16(it)h 17(encoun)h -1(ters)h 19(a)h 0 689(corresp)s 1(onding)h 15(handler)h 14(at)h 14(whic)h -1(h)h 13(p)h 1(oin)h -1(t)h 14(it)h 13(is)h 14(said)h 14(to)h 13(ha)h -1(v)h -1(e)h 14(b)h 1(een)h 15(caugh)h -1(t.)h 145 764(|)s 13(An)h -1(y)h 14(co)h 1(de)h 14(that)h 14(uses)h 15(this)h 14(pac)h -1(k)h -2(age.)h 210 839(|)s 13(A)h 14(dynamic)h 12(non-lo)h 1(cal)h 13(con)h -1(trol-\015o)h -1(w)h 13(ev)h -1(en)h -1(t.)h 344 913(|)s 17(A)h 17(sp)h 1(ecial)h 18(kind)h 16(of)h 17(anon)h -1(ymous)h 16(blo)h 1(c)h -1(k)h 16(\(called)h 18(a)h 17(comp)h 1(ound)h 16(statemen)h -1(t)h 17(in)h 17(C\))h 17(con)h -1(taining)h 0 963(exception)s 15(handlers.)h 472 1038(|)s 14(A)h 15(single-line)h 13(string)h 15(brie\015y)h 15(describing)h 15(the)h 15(exception.)h 21(This)h 14(string)h 15(is)h 14(prin)h -1(ted)h 15(out)h 0 1088(whenev)s -1(er)h 15(an)h 14(exception)h 15(has)h 14(to)h 13(b)h 1(e)h 15(iden)h -1(ti\014ed)h 14(to)h 14(the)h 14(user.)h 446 1162(|)s 11(A)h 10(program)h 9(iden)h -1(ti\014er)h 11(that)h 11(is)h 10(b)h 1(ound)h 11(to)h 11(a)h 10(constan)h -1(t)h 11(whose)h 11(v)h -2(alue)h 10(is)h 11(a)h 10(p)h 1(oin)h -1(ter)h 11(p)h 1(oin)h -1(ting)h 0 1212(to)s 14(an)h 13(exception)h 15(ob)h 2(ject.)h 381 1287(|)s 10(An)h 10(exception/co)h 1(de)h 12(binding)h 10(that)h 10(app)h 1(ears)h 11(at)h 11(the)h 11(end)h 11(of)h 10(an)h 10(exception)h 11(blo)h 1(c)h -1(k)h 10(and)h 10(catc)h -1(hes)h 0 1337(the)s 14(sp)h 1(eci\014ed)h 16(exception)h 15(should)h 13(it)h 14(propagate)h 14(to)h 13(that)h 14(lev)h -1(el.)h 255 1411(|)s 15(The)h 16(termination)h 14(of)h 15(an)h 15(exception)h 16(blo)h 1(c)h -1(k)h 15(in)h 15(a)h 16(w)h -1(a)h -1(y)h 14(that)h 16(b)h -1(ypasses)h 17(the)h 16(exception)h 16(pac)h -1(k)h -2(age)h 15(\(for)h 0 1461(example,)s 12(b)h -1(y)h 158(or)h 14(explicit)h 168(\).)h 16(The)h 15(macro)h 151(should)h 13(b)h 1(e)h 15(called)h 14(b)h 1(efore)h 14(all)h 13(suc)h -1(h)h 15(exits.)h 125 1536(|)s 16(An)h 16(exception)h 17(is)h 16(raised)h 17(b)h -1(y)h 16(an)h 200(statemen)h -1(t.)h 25(Once)h 17(raised,)h 17(an)h 16(exception)h 17(un)h -1(winds)h 16(the)h 17(stac)h -1(k)h 0 1586(un)s -1(til)h 13(it)h 14(encoun)h -1(ters)h 15(a)h 14(handler)h 14(for)h 13(the)h 15(sp)h 1(eci\014c)h 15(exception.)h 954 2770(19)s 14 2 599 278 r 14 2 298 328 r 14 2 1029 1461 r 14 2 775 1536 r 19 @eop 20 @bop0 cmbx10.518 sf [<0000007800000000F800000001F800000003F800000007F800000007F80000000FF800 00001FF80000003FF80000007FF800000077F8000000F7F8000001E7F8000003C7F80000 0787F800000707F800000F07F800001E07F800003C07F800007807F800007007F80000F0 07F80001E007F80003C007F800078007F8000F0007F8000F0007F8001E0007F8003C0007 F800780007F800F00007F800FFFFFFFFF0FFFFFFFFF0FFFFFFFFF000000FF80000000FF8 0000000FF80000000FF80000000FF80000000FF80000000FF80000000FF80000000FF800 000FFFFFF0000FFFFFF0000FFFFFF0> 40 46 -2 45 41] 52 dc [ 32 49 -2 48 31] 73 dc [<01F800FFF800FFF800FFF8000FF80007F80007F80007F80007F80007F80007F80007F8 0007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F8 0007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F8 0007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800FFFF C0FFFFC0FFFFC0> 24 50 -3 49 23] 108 dc cmbx10.432 sf [<0000FFE000000007FFFC0000003FC07F8000007F001FC00001FC0007F00003F80003F8 0007F00001FC000FF00001FE001FE00000FF001FE00000FF003FC000007F803FC000007F 807FC000007FC07F8000003FC07F8000003FC07F8000003FC0FF8000003FE0FF8000003F E0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003F E0FF8000003FE0FF8000003FE07F8000003FC07FC000007FC07FC000007FC03FC000007F 803FC000007F801FE00000FF001FE00000FF000FF00001FE0007F00001FC0003F80003F8 0001FC0007F00000FF001FE000003FC07F8000000FFFFE00000000FFE00000> 48 41 -4 40 52] 79 dc cmsl10.300 sf [<7070F060> 8 4 -4 3 12] 46 dc 20 @bop1 cmsy10.300 sf 434 511(\021)s 62 560(f)s 83 1009(g)s 411 1233(\021)s 62 1283(f)s 83 1582(g)s 481 1731(\021)s 62 1781(f)s 83 1930(g)s cmbx10.518 sf 0 50(4)s 28(Imple)h -1(m)h -2(en)h -3(tation)h cmbx10.432 sf 0 2130(4.1)s 24(Ov)h -2(erview)h 21(and)h 24(Data)h 23(Structure)h 23(Descripti)h -1(on)h cmtt10.300 sf 346 237(.h)s 392 361(.c)s 83 660(#include)s 20("except.h")h 83 710(#include)s 20("as.h")h 1201 1133(.h)s 514 2341(EX)s 15(BEGIN)h 82(setjmp)h 575(jmp)h 15(buf)h 1620 2391(EX)s 15(END)h 34 2491(longjmp)s 1119 2540(longjmp)s cmr7.300 sf 0 1059(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(2.)h 0 1631(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(18.)h 0 1980(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(18.)h cmsl10.300 sf 0 511(Implem)s -1(en)h -1(tation)h 12(\014le)h 83 610(Con\014guration)s 13(header)h 15(notice)h 83 760(Global)s 12(v)h -2(ariables)h 13(\(.c\))h 83 809(F)s -3(unction)h 14(ex)h 15(str)h 83 859(F)s -3(unction)h 14(ex)h 15(b)h 1(om)h -1(b)h 83 909(F)s -3(unction)h 29(exrai)h 83 959(F)s -3(unction)h 29(exp)h 1(op)h 0 1233(Hidden)s 14(de\014nitions)h 83 1333(Sym)s -1(b)h 1(ol)h 27(EX)h 15(F)h -5(AST)h 83 1382(Sym)s -1(b)h 1(ol)h 27(EX)h 15(THRD)h 83 1432(Exception)s 14(blo)h 1(c)h -1(k)h 14(con)h -1(text)h 15(t)h -1(yp)h 1(e)h 83 1482(Global)s 12(v)h -2(ariables)h 13(\(.h\))h 83 1532(Macros)s 15(for)h 13(global)h 12(v)h -2(ariables)h 0 1731(Hidden)s 14(function)h 14(sp)h 1(ecs)h 83 1831(F)s -3(unction)h 14(sp)h 1(ec)h 30(exrai)h 83 1880(F)s -3(unction)h 14(sp)h 1(ec)h 30(exp)h 1(op)h cmr10.300 sf 0 137(This)s 12(section)h 14(describ)h 1(es)h 14(the)h 14(impl)h -1(em)h -1(en)h -1(tation)h 11(of)h 12(this)h 12(pac)h -1(k)h -2(age.)h 17(The)h 13(implem)h -1(en)h -1(tation)h 10(is)h 13(short,)h 13(but)h 12(is)h 13(rather)h 13(messy)h 0 187(b)s 1(ecause)h 17(of)h 14(the)h 15(fast/safe)h 15(alternativ)h -1(es,)h 15(and)h 14(b)h 1(ecause)h 17(of)h 14(the)h 15(fact)h 15(that)h 15(m)h -1(uc)h -1(h)h 14(of)h 14(the)h 15(functionalit)h -1(y)h 14(of)h 14(the)h 15(pac)h -1(k)h -2(age)h 0 237(is)s 17(pro)h -1(vided)h 17(in)h 17(the)h 79(\014le.)h 28(Muc)h -1(h)h 17(of)h 17(that)h 17(functionalit)h -1(y)h 16(has)h 17(b)h 1(een)h 19(deferred)h 19(using)h 17(F)h -3(unnelW)h -3(eb)h 16(macros)h 17(to)h 17(this)h 0 286(section.)s 0 361(The)s 11(implem)h -1(en)h -1(tation)h 9(\()h 44(\))h 11(\014le)h 11(itself)h 11(is)h 11(fairly)h 9(simply)h -3(,)h 9(consisting)h 11(only)h 10(of)h 11(some)h 10(global)h 9(v)h -2(ariables)h 10(and)h 11(a)h 11(few)h 11(function)h 0 411(de\014nitions.)s 355 511([31])s 590 610([4])s 452 760([35])s 363 809([58])s 416 859([67)s -1(])h 363 909([60])s 381 959([69])s 0 1133(All)s 13(the)h 15(real)h 13(action)h 14(happ)h 1(ens)h 15(in)h 13(the)h 15(de\014nitions)h 13(in)h 14(the)h 14(sp)h 1(eci\014cation)h 15(\()h 44(\))h 14(\014le)h 14(that)h 14(are)h 14(hidden)h 14(from)h 12(the)h 15(clien)h -1(t.)h 333 1233([32])s 430 1333([15])s 447 1382([16])s 617 1432([34])s 457 1482([36])s 574 1532([17])s 401 1731([33])s 454 1831([59])s 472 1880([68])s 0 2217(This)s 14(section)h 14(giv)h -1(es)h 14(an)h 14(o)h -1(v)h -1(erview)h 14(of)h 13(the)h 14(implem)h -1(en)h -1(tation)h 12(of)h 13(this)h 14(pac)h -1(k)h -2(age.)h 0 2291(This)s 15(pac)h -1(k)h -2(age)h 16(op)h 1(erates)h 16(b)h -1(y)h 16(main)h -1(ta)h -1(ining)h 13(an)h 15(explicit)h 15(stac)h -1(k)h 16(of)h 15(curren)h -1(tly)h 17(activ)h -1(e)h 15(exception)h 17(blo)h 1(c)h -1(ks.)h 23(Whenev)h -1(er)h 16(an)h 0 2341(exception)s 18(blo)h 1(c)h -1(k)h 17(is)h 18(en)h -1(tered)h 19(\()h 169(\),)h 16(a)h 166(is)h 17(executed)h 19(and)h 18(the)h 18(resultan)h -1(t)h 181(is)h 18(inserted)h 19(in)h -1(to)h 16(a)h 0 2391(stac)s -1(k)h 14(no)h 1(de)h 15(and)h 14(pushed)h 14(on)h -1(to)h 14(the)h 14(stac)h -1(k.)h 19(Whenev)h -1(er)h 15(an)h 14(exception)h 15(blo)h 1(c)h -1(k)h 13(is)h 14(exited)h 14(normally)h 12(\()h 125(\),)h 13(the)h 15(stac)h -1(k)h 0 2441(no)s 1(de)h 14(on)h 13(the)h 14(top)h 14(of)h 13(the)h 14(stac)h -1(k)h 14(is)h 13(p)h 1(opp)h 1(ed.)h 19(When)h 14(an)h 13(exception)h 14(is)h 14(raised,)h 13(the)h 14(top)h 14(of)h 13(the)h 14(stac)h -1(k)h 14(is)h 13(p)h 1(opp)h 1(ed)h 15(o\013)h 13(and)h 0 2491(a)s 179(is)h 14(executed)h 15(to)h 14(its)h 14(con)h -1(text.)h 18(The)h 14(con)h -1(text)h 15(then)h 14(searc)h -1(hes)h 16(its)h 13(handlers)h 14(for)h 14(a)h 13(handler)h 14(for)h 13(the)h 14(exception)h 0 2540(raised.)s 18(If)h 13(it)h 12(\014nds)h 14(one,)h 13(it)h 12(executes)h 15(it.)h 18(If)h 12(it)h 13(do)h 1(esn't,)h 13(it)h 12(p)h 1(ops)h 14(and)h 167(s)h 11(the)h 14(top)h 13(of)h 12(stac)h -1(k)h 13(again.)h 17(This)h 13(go)h 1(es)h 13(on)h 0 2590(un)s -1(til)h 13(the)h 15(exception)h 14(is)h 14(caugh)h -1(t,)h 13(or)h 14(the)h 15(stac)h -1(k)h 14(is)h 14(empt)h -1(y)h -3(.)h 0 2665(The)s 14(stac)h -1(k)h 15(is)h 13(comp)h 1(osed)h 14(of)h 13(a)h 14(singly-link)h -1(ed)h 12(list)h 13(of)h 14(records)h 15(of)h 13(the)h 15(follo)h -1(wi)h -1(ng)h 12(t)h -1(yp)h 1(e:)h 954 2770(20)s 13 2 299 809 r 13 2 299 859 r 13 2 259 909 r 13 2 259 959 r 13 2 234 1333 r 13 2 308 1333 r 13 2 234 1382 r 13 2 308 1382 r 13 2 350 1831 r 13 2 350 1880 r 14 2 561 2341 r 14 2 1541 2341 r 14 2 1667 2391 r 20 @eop 21 @bop0 /cmr10.432 127 @newfont cmr10.432 sf [<00006000000060000000E0000001E0000001E0000003E0000003E0000005E0000009E0 000009E0000011E0000021E0000021E0000041E0000081E0000081E0000101E0000201E0 000201E0000401E0000801E0000801E0001001E0003001E0002001E0004001E000C001E0 00FFFFFF80FFFFFF800001E0000001E0000001E0000001E0000001E0000001E0000001E0 000001E0000003F000007FFF80007FFF80> 32 40 -2 39 30] 52 dc [<78FCFCFCFC78> 8 6 -5 5 17] 46 dc [<00100000700001F0000FF000FEF000F0F00000F00000F00000F00000F00000F00000F0 0000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0 0000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0 0000F00001F8007FFFE07FFFE0> 24 40 -5 39 30] 49 dc [<0000FF00100007FFE030001FC07830003E000C7000F80006F001F00003F003E00001F0 07C00000F00F800000700F800000701F000000303F000000303E000000303E000000107E 000000107E000000107C00000000FC00000000FC00000000FC00000000FC00000000FC00 000000FC00000000FC00000000FC00000000FC0000FFFF7C0000FFFF7E000003F07E0000 01F03E000001F03E000001F03F000001F01F000001F00F800001F00F800001F007C00001 F003E00001F001F00002F000F80002F0003E000C70001FC038300007FFE0100000FF8000> 40 43 -3 41 47] 71 dc [<0780FF80FF800F80078007800780078007800780078007800780078007800780078007 800780078007800780078007800780078007800780078007800780078007800780078007 800780078007800780FFFCFFFC> 16 42 -1 41 17] 108 dc [<007F000001C1C000070070000E0038001C001C003C001E003C001E0078000F0078000F 00F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F8078000F 0078000F003C001E003C001E001E003C000E0038000700700001C1C000007F0000> 32 26 -2 25 30] 111 dc [<07800000FF800000FF8000000F80000007800000078000000780000007800000078000 00078000000780000007800000078000000780000007800000078000000783F000078C1C 0007B0070007A0038007C003C0078001E0078001E0078000F0078000F0078000F8078000 F8078000F8078000F8078000F8078000F8078000F8078000F0078000F0078001F0078001 E0078001C007C003C00740078007200E0006181C000407E000> 32 42 -1 41 33] 98 dc [<01FC00000E0780001001C0003C00E0003E00F0003E0078001C00780008007800000078 000000780000007800007FF80003E078000F8078001F0078003E0078007C007800780078 20F8007820F8007820F8007820F800F8207C00F8203C013C401F063FC007F80F00> 32 26 -2 25 30] 97 dc [ 48 42 -1 40 45] 86 dc [<0787C0FF98E0FF91F00FA1F007C1F007C0E007C0000780000780000780000780000780 0007800007800007800007800007800007800007800007800007800007800007800007C0 00FFFE00FFFE00> 24 26 -1 25 23] 114 dc [<07000F801F801F800F80070000000000000000000000000000000000000007807F807F 800F80078007800780078007800780078007800780078007800780078007800780078007 80078007800780FFF8FFF8> 16 41 -1 40 17] 105 dc [<007E0003C3800700E00E00F01C00703C00783C003878003C78003CF8003CF8003CFFFF FCF80000F80000F80000F80000F800007800007C00003C00043C00041E00080E00100700 2001C0C0007F00> 24 26 -2 25 27] 101 dc [<07F8401C06C03001C06000C06000C0E00040E00040F00040F800007E00007FF0003FFE 000FFF0003FF80003FC00007C08001E08001E0C000E0C000E0C000E0E000C0F001C0F801 80C4070083F800> 24 26 -2 25 24] 115 dc 21 @bop1 cmsy10.300 sf 613 42(\021)s 62 91(f)s 83 540(g)s 447 1523(\021)s 62 1573(f)s 83 1872(g)s 452 2096(\021)s 62 2146(f)s 83 2445(g)s cmr10.432 sf 0 1063(4.1.1)s 19(Global)h 19(V)h -5(ariables)h cmr7.300 sf 0 589(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(32.)h 0 1922(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(31.)h 0 2495(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(32.)h cmsl10.300 sf 0 42(Exception)s 14(blo)h 1(c)h -1(k)h 14(con)h -1(text)h 15(t)h -1(yp)h 1(e)h 83 241(Header)s 15(magic)h 12(n)h -1(um)h -1(b)h 1(er)h 13(\014eld)h 83 390(T)s -3(railer)h 13(magic)h 12(n)h -1(um)h -1(b)h 1(er)h 13(\014eld)h 83 490(Magic)s 13(n)h -1(um)h -1(b)h 1(er)h 14(sym)h -1(b)h 1(ols)h 0 1523(Global)s 12(v)h -2(ariables)h 13(\(.c\))h 0 2096(Global)s 12(v)h -2(ariables)h 13(\(.h\))h cmtt10.300 sf 83 141(typedef)s 20(struct)h 21(_ex_cxt_)h 127 191({)s 148 291(jmp_buf)s 217(_ex_jmbf;)h 42(/*)h 21(Exception)h 20(block)h 21(context.)h 216(*/)h 148 340(struct)s 21(_ex_cxt_)h 20(*_ex_prev;)h 42(/*)h 21(Pointer)h 20(to)h 22(previous)h 20(stack)h 21(record.)h 20(*/)h 127 440(})s 21(_ex_cx_t;)h 599 714(EX)s 15(BEGIN)h 307 764(ex)s 15(cx)h 16(t)h 549 814(ex)s 16(curr)h 952(NULL)h 837 863(ex)s 16(id)h 111(ex)h 15(info)h 1562 1150(ex)s 15(curr)h 759 1200(NULL)s 662(ex)h 15(id)h 960 1249(ex)s 15(info)h 999 1424(EX)s 15(CURR)h 25(EX)h 15(ID)h 41(EX)h 15(ID)h 25(EX)h 15(INFO)h 83 1623(#if)s 21(!_EX_THRD)h 83 1673(GLOVAR)s 21(_ex_cx_t)h 20(*_ex_curr)h 20(=)h 21(NULL;)h 83 1723(GLOVAR)s 21(p_ex_t)h 86(_ex_id;)h 83 1773(GLOVAR)s 21(ptrint)h 86(_ex_info;)h 83 1822(#endif)s 83 2196(#if)s 21(!_EX_THRD)h 83 2246(extern)s 21(_ex_cx_t)h 20(*_ex_curr;)h 83 2296(extern)s 21(p_ex_t)h 86(_ex_id;)h 83 2345(extern)s 21(ptrint)h 86(_ex_info;)h 83 2395(#endif)s cmr10.300 sf 534 42([34])s 574 241([37])s 567 390([38])s 506 490([)s -1(39])h 0 664(The)s 13(sneaky)h 13(part)h 12(is)h 12(that)h 13(instead)h 12(of)h 12(storing)h 12(this)h 13(stac)h -1(k)h 13(explicitly)h 11(on)h 12(the)h 13(heap,)h 13(it)h 12(is)h 12(stored)h 13(on)h 12(the)h 13(run-time)h 12(stac)h -1(k)h 0 714(itself.)s 17(This)h 11(is)h 11(done)h 12(b)h -1(y)h 11(ha)h -1(ving)h 10(the)h 191(macro)h 10(create)h 13(a)h 11(comp)h 1(ound)h 10(statemen)h -1(t)h 11(con)h -1(taining)h 10(a)h 11(lo)h 1(cal)h 11(automatic)h 0 764(v)s -2(ariable)h 11(of)h 12(t)h -1(yp)h 1(e)h 180(whic)h -1(h)h 13(forms)h 10(a)h 12(no)h 1(de)h 13(of)h 11(the)h 13(stac)h -1(k.)h 18(These)h 13(no)h 1(des)h 13(are)h 13(threaded)h 13(in)h -1(to)h 12(a)h 12(link)h -1(ed)h 11(list)h 12(that)h 12(is)h 0 814(ro)s 1(oted)h 14(b)h -1(y)h 13(the)h 13(global)h 12(v)h -2(ariable)h 187(whic)h -1(h)h 13(p)h 1(oin)h -1(ts)h 13(to)h 13(the)h 14(no)h 1(de)h 13(at)h 13(the)h 14(top)h 13(of)h 12(the)h 14(stac)h -1(k,)h 13(or)h 114(if)h 12(the)h 14(stac)h -1(k)h 0 863(is)s 15(empt)h -1(y)h -3(.)h 19(Tw)h -1(o)h 14(other)h 15(hidden)h 15(global)h 14(v)h -2(ariables)h 147(and)h 191(store)h 16(the)h 15(exception)h 16(id)h 14(and)h 15(the)h 15(exception)h 0 913(informati)s -1(on.)h 0 1150(This)s 12(pac)h -1(k)h -2(age)h 12(requires)h 13(three)h 14(global)h 11(v)h -2(ariables)h 11(to)h 12(k)h -1(eep)h 13(trac)h -1(k)h 13(of)h 11(ev)h -1(erything.)h 18(The)h 13(v)h -2(ariable)h 185(p)h 1(oin)h -1(ts)h 12(to)h 12(the)h 0 1200(con)s -1(text)h 14(record)h 14(on)h 13(the)h 14(top)h 13(of)h 13(the)h 13(stac)h -1(k,)h 14(or)h 113(if)h 13(the)h 13(stac)h -1(k)h 14(is)h 13(empt)h -1(y)h -3(.)h 16(The)h 14(v)h -2(ariable)h 144(con)h -1(tains)h 13(a)h 13(p)h 1(oin)h -1(ter)h 0 1249(to)s 14(the)h 14(exception)h 15(most)h 13(recen)h -1(tly)h 15(raised.)h 18(The)h 14(v)h -2(ariable)h 189(is)h 14(pro)h -1(vided)h 14(for)h 13(the)h 15(use)h 14(of)h 14(the)h 14(clien)h -1(t.)h 0 1324(T)s -3(o)h 12(enable)h 14(this)h 13(pac)h -1(k)h -2(age)h 12(\(and)h 13(its)h 13(clien)h -1(t)h 13(co)h 1(de\))h 14(to)h 13(b)h 1(e)h 14(con)h -1(v)h -1(erted)h 14(o)h -1(v)h -1(er)h 13(to)h 13(a)h 13(m)h -1(ulti)h -1(-threaded)h 12(system)h 13(at)h 13(a)h 13(later)h 13(date,)h 0 1374(these)s 17(global)h 13(v)h -2(ariables)h 14(are)h 16(referred)h 17(to)h 15(only)h 14(through)h 15(a)h 15(set)h 16(of)h 15(macros.)h 21(The)h 15(macros)h 15(are)h 15(describ)h 1(ed)h 17(in)h 15(the)h 16(static)h 0 1424(parameters)s 14(section)h 15(of)h 13(this)h 14(do)h 1(cumen)h -1(t.)h 17(They)h 15(are)h 14(called)h 176(,)h 116(,)h 132(,)h 160(.)h 369 1523([35])s 0 1997(Here)s 15(is)h 14(the)h 14(v)h -1(ersion)h 14(of)h 14(these)h 15(v)h -2(ariables)h 13(that)h 14(app)h 1(ears)h 15(in)h 13(the)h 15(header)h 15(\014le.)h 374 2096([36])s 954 2770(21)s 14 2 646 714 r 14 2 294 764 r 14 2 354 764 r 14 2 413 764 r 14 2 536 814 r 14 2 596 814 r 14 2 824 863 r 14 2 884 863 r 14 2 1039 863 r 14 2 1099 863 r 14 2 1548 1150 r 14 2 1609 1150 r 14 2 1496 1200 r 14 2 1556 1200 r 14 2 947 1249 r 14 2 1007 1249 r 14 2 986 1424 r 14 2 1046 1424 r 14 2 1218 1424 r 14 2 1302 1424 r 14 2 1362 1424 r 14 2 1490 1424 r 21 @eop 22 @bop0 cmr10.432 sf [<00FE0007FF800E07E01803F02001F82000F840007C40007CF8007EFC007EFC003EFC00 3EFC003E78007E00007E00007C00007C0000F80000F80001F00001E00003C00007800007 00000E00001C0000380000700000600000C0000180020300020600040C00041800041000 0C3FFFFC7FFFF8FFFFF8FFFFF8> 24 40 -3 39 30] 50 dc [ 56 41 -2 40 55] 77 dc [<0000078001FC1840070721C00E03C1C01E03C0803C01E0003C01E0007C01F0007C01F0 007C01F0007C01F0007C01F0003C01E0003C01E0001E03C0000E0380001707000011FC00 00300000003000000030000000380000001C0000001FFFC0000FFFF80007FFFC001C003E 0030000F007000070060000380E0000380E0000380E0000380E000038070000700700007 0038000E000C0018000780F00000FF8000> 32 40 -2 26 30] 103 dc [<007F8001C0700780080F003C1E007C3C007C3C00387C0010780000F80000F80000F800 00F80000F80000F80000F80000F800007800007C00003C00043C00041E00080F00100780 2001C0C0007F00> 24 26 -2 25 27] 99 dc [ 40 41 -2 40 45] 78 dc [<07800780FF80FF80FF80FF800F800F8007800780078007800780078007800780078007 800780078007800780078007800780078007800780078007800780078007800780078007 80078007800780078007800F8007800F800380178001C027C000E047FC003F87FC> 32 26 -1 25 33] 117 dc [<0781F800FC00FF860E030700FF98070C03800FA0079003C007A003D001E007C003E001 E007C003E001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001 E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001 E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001 E0FFFC7FFE3FFFFFFC7FFE3FFF> 48 26 -1 25 51] 109 dc cmr7.300 sf [<0F0030C0606060604020C030C030C030C030C030C030C030C030C03040206060606030 C00F00> 16 19 -2 18 17] 48 dc cmtt10.300 sf [<07F0001FFC003FFE007C1F00F00780E00380E00380E003807007007C1F001FFC0007F0 001FFC003C1E00700700F00780E00380E00380E00380F007807007007C1F003FFE001FFC 0007F000> 24 25 -2 24 22] 56 dc [ 24 26 -2 25 22] 55 dc 22 @bop1 cmr10.432 sf 0 42(4.1.2)s 19(Magic)h 18(Num)h -2(b)h 2(ers)h cmsy10.300 sf 569 425(\021)s 62 475(f)s 215 574(g)s 562 722(\021)s 62 771(f)s 215 871(g)s 499 1019(\021)s 62 1068(f)s 673 1168(g)s 296 1647(\021)s 62 1697(f)s 481(g)h 678 2176(\021)s 62 2226(f)s 524(g)h 680 2374(\021)s 62 2423(f)s 676(g)h 645 2571(\021)s 62 2621(f)s 676(g)h cmbx10.432 sf 0 1364(4.2)s 24(Exception)h 22(t)h -2(yp)h 2(e)h 0 1893(4.3)s 24(Macros)h 24(for)h 23(Declaring)h 21(and)h 24(De\014ning)h 22(Exceptions)h cmsl10.300 sf 0 425(Header)s 15(magic)h 12(n)h -1(um)h -1(b)h 1(er)h 13(\014eld)h 0 722(T)s -3(railer)h 13(magic)h 12(n)h -1(um)h -1(b)h 1(er)h 13(\014eld)h 0 1019(Magic)s 13(n)h -1(um)h -1(b)h 1(er)h 14(sym)h -1(b)h 1(ols)h 0 1647(T)s -1(yp)h 1(e)h 14(p)h 15(ex)h 16(t)h 0 2176(Implem)s -1(en)h -1(tation)h 12(of)h 13(EX)h 15(EX)h -1(CEPT)h 0 2374(Implem)s -1(en)h -1(tation)h 12(of)h 13(EX)h 15(EXPOR)h -3(T)h 0 2571(Implem)s -1(en)h -1(tation)h 12(of)h 13(EX)h 15(LOCAL)h cmr7.300 sf 0 624(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(34.)h 0 920(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(34.)h 0 1217(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(34.)h 0 1746(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(20.)h 0 2276(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(20.)h 0 2473(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(20.)h 0 2670(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(20.)h cmtt10.300 sf 83 475(#if)s 21(!_EX_FAST)h 148 524(ulong)s 21(_ex_mag1;)h 42(/*)h 21(Header)h 21(magic)h 21(number.)h 20(*/)h 83 574(#endif)s 83 771(#if)s 21(!_EX_FAST)h 148 821(ulong)s 21(_ex_mag2;)h 42(/*)h 21(Trailer)h 21(magic)h 20(number.)h 21(*/)h 83 871(#endif)s 83 1118(#define)s 20(_EX_MAG1)h 21(0xFB8A5D30)h 83 1168(#define)s 20(_EX_MAG2)h 21(0x09F2E7A2)h 1012 1549(string)s 83 1697(typedef)s 20(string)h 21(p_ex_t;)h 1177 1979(p)s 15(ex)h 16(t)h 83 2226(extern)s 21(const)h 20(p_ex_t)h 21(NAME)h 236 2423(const)s 20(p_ex_t)h 21(NAME)h 21(=)h 21(DESC)h 83 2621(static)s 21(const)h 20(p_ex_t)h 21(NAME)h 21(=)h 21(DESC)h cmr10.300 sf 0 127(In)s 12(order)h 13(to)h 12(detect)h 14(corruptions)h 13(in)h 11(exception)h 13(con)h -1(text)h 13(records,)h 14(t)h -1(w)h -1(o)h 11(magic)h 11(n)h -1(um)h -1(b)h 1(er)h 11(\014elds)h 13(ha)h -1(v)h -1(e)h 12(b)h 1(een)h 13(placed)h 12(at)h 12(the)h 0 177(start)s 15(and)h 13(end)h 15(of)h 13(the)h 14(record.)h 20(In)h 14(C,)h 13(there)h 15(are)h 14(h)h -1(undreds)h 16(of)h 13(w)h -1(a)h -1(ys)h 13(for)h 14(corruptions)h 14(to)h 14(o)h 1(ccur,)h 15(but)h 14(in)h 13(particular,)h 13(in)h 0 227(this)s 13(pac)h -1(k)h -2(age,)h 12(if)h 12(a)h 13(clien)h -1(t)h 13(exits)h 13(an)h 13(exception)h 14(con)h -1(text)h 14(without)h 12(\014rst)h 14(p)h 1(opping)h 12(it,)h 13(it)h 12(is)h 13(quite)h 13(lik)h -1(ely)h 12(that)h 13(the)h 13(con)h -1(text)h 0 277(will)s 12(b)h 1(e)h 14(\\run)h 14(o)h -1(v)h -1(er")h 13(b)h -1(y)h 13(stac)h -1(k)h 14(frames)h 13(of)h 13(functions)h 13(called)h 13(later.)h 18(If)h 13(the)h 15(con)h -1(text)h 14(is)h 13(then)h 14(in)h -1(v)h -1(ok)h -1(ed,)h 12(the)h 15(program)h 11(will)h 0 327(crash.)s 19(The)h 14(follo)h -1(wing)h 11(magic)h 12(n)h -1(um)h -1(b)h 1(er)h 14(\014elds)h 14(greatly)h 14(impro)h -1(v)h -2(e)h 13(the)h 14(c)h -1(hances)h 15(of)h 14(detecting)h 15(suc)h -1(h)h 14(corruptions.)h 491 425([37])s 484 722([38])s 423 1019([)s -1(39])h 0 1450(Here)s 14(is)h 12(the)h 13(de\014nition)h 12(of)h 12(the)h 13(p)h 1(oin)h -1(ter-to-exception)h 13(t)h -1(yp)h 1(e.)h 18(Normall)h -1(y)h -3(,)h 10(a)h 12(hidden)h 12(exception)h 14(t)h -1(yp)h 1(e)h 12(w)h -1(ould)h 12(b)h 1(e)h 13(declared)h 0 1499(to)s 11(whic)h -1(h)h 11(the)h 11(p)h 1(oin)h -1(ter)h 11(t)h -1(yp)h 1(e)h 12(w)h -1(ould)h 10(p)h 1(oin)h -1(t,)h 10(but)h 12(as)h 11(exceptions)h 12(ha)h -1(v)h -1(e)h 10(only)h 11(a)h 10(single)h 11(attribute,)h 11(their)h 12(description)h 11(string,)h 0 1549(it)s 14(mak)h -1(es)h 12(sense)h 16(simply)h 12(to)h 13(declare)h 15(the)h 15(p)h 1(oin)h -1(ter)h 14(t)h -1(yp)h 1(e)h 14(to)h 14(b)h 1(e)h 159(t)h -1(yp)h 1(e)h 14(\(p)h 1(oin)h -1(ter)h 15(to)h 13(c)h -1(har\).)h 218 1647([40])s 0 1979(The)s 12(three)h 13(exception)h 12(declaration)h 11(macros)h 11(mak)h -1(e)h 10(use)h 12(of)h 11(the)h 12(fact)h 11(that)h 142(is)h 11(really)h 11(just)h 12(a)h 11(string)h 11(p)h 1(oin)h -1(ter.)h 18(There)h 0 2028(is)s 14(a)h 14(sligh)h -1(t)h 13(danger)h 14(that)h 14(a)h 14(to)h 1(o-clev)h -1(er)h 14(C)h 14(compiler)h 13(migh)h -1(t)h 12(o)h -1(v)h -1(erlap)h 13(t)h -1(w)h -1(o)h 14(strings)h 14(for)h 14(whic)h -1(h)h 14(one)h 14(is)h 14(a)h 13(non-strict)h 15(su\016x)h 0 2078(of)s 13(the)h 15(other.)h 18(Ho)h -1(w)h -1(ev)h -1(er,)h 14(this)h 14(is)h 14(considered)h 15(unlik)h -1(ely)h -3(.)h 598 2176([41])s 601 2374([42])s 566 2571([43])s 954 2770(22)s 13 2 132 1647 r 13 2 187 1647 r 14 2 1202 1979 r 14 2 1261 1979 r 13 2 408 2176 r 13 2 408 2374 r 13 2 408 2571 r 22 @eop 23 @bop0 cmbx10.432 sf [<00030007001E003C007800F800F001E003E007C007C00F800F801F801F003F003F003E 003E007E007E007E007C00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC 00FC007C007E007E007E003E003E003F003F001F001F800F800F8007C007C003E001E000 F000F80078003C001E00070003> 16 60 -6 44 27] 40 dc [ 16 60 -4 44 27] 41 dc cmtt10.300 sf [<7FFF80FFFF80FFFF80E00700E00F00E01E00E01C00003C0000780000700000F00001E0 0001C00003C0000780000700000F00001E03801C03803C0380780380700380FFFF80FFFF 80FFFF80> 24 25 -2 24 22] 90 dc [<03800007E0000FE0001E70001C70001C70001C70001C77E01CE7E01DE7E00FC7000F8E 000F0E001E0E003F1C007F1C00739C00E3F800E1F800E0F1C0E0F1C071F9C07FFFC03F9F 801E0700> 24 25 -1 24 22] 38 dc cmr10.300 sf [ 32 28 -2 27 32] 75 dc [<00E0000001900000030800000308000007080000070800000708000007080000071000 0007100000072000000740000003C03FE003800F00038006000380040005C0040009C008 0010E0100030E010006070200060702000E0384000E03C4000E01C8000E00F0020E00700 20700780403009C0401830E18007C03E00> 32 31 -2 29 32] 38 dc 23 @bop1 cmsy10.300 sf 849 328(\021)s 62 378(f)s 329(g)h 851 527(\021)s 62 577(f)s 1222(g)h 726 1436(\021)s 62 1486(f)s 846 1735(g)s 767 2433(\021)s 62 2482(f)s 763(g)h cmbx10.432 sf 0 42(4.4)s 24(Macro)h 24(for)h 23(Raising)h 22(Exceptions)h 0 776(4.5)s 24(Exception)h 22(Blo)h 2(c)h -2(k)h 22(Macros)h 24(\(Safe\))h cmsl10.300 sf 0 328(Safe)s 14(implem)h -1(en)h -1(tati)h -1(on)h 12(of)h 13(EX)h 16(RAISE\(P)h 15(EX\))h 0 527(F)s -3(ast)h 14(impl)h -1(emen)h -1(tati)h -1(on)h 12(of)h 13(EX)h 16(RAISE\(P)h 15(EX\))h 0 1436(Safe)s 14(implem)h -1(en)h -1(tati)h -1(on)h 12(of)h 13(EX)h 16(BEGIN)h 0 2433(Safe)s 14(implem)h -1(en)h -1(tati)h -1(on)h 12(of)h 13(EX)h 16(F)h -1(OR)h -1(GET)h cmr7.300 sf 0 428(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(22.)h 0 627(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(22.)h 0 1785(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(23.)h 0 2532(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(23.)h cmtt10.300 sf 338 129(EX)s 16(RAISE)h 772(exrai)h 1021 228(longjmp)s 83 378({_exrai\(P_EX\))s -1(;})h 83 577({_EX_ID)s 20(=)h 22(\(P_EX\);)h 20(longjmp\(_EX_CU)h -1(RR->_)h -1(ex_jm)h -1(bf,NO)h -1(N_ZE)h -1(RO\);})h 81 1088(EX)s 15(BEGIN)h 672 1137(ex)s 15(cxlc)h 1122 1187(ex)s 16(jmbf)h 1699 1287(EX)s 15(CURR)h 307 1337(if)s 83 1486({_ex_cx_t)s 20(_ex_cxlc;)h 303(\\)h 105 1536(_ex_cxlc._ex)s -1(_mag1)h 19(=)h 22(_EX_MAG1;)h 63(\\)h 105 1586(_ex_cxlc._ex)s -1(_mag2)h 19(=)h 22(_EX_MAG2;)h 63(\\)h 105 1636(_ex_cxlc._ex)s -1(_prev)h 19(=)h 22(_EX_CURR;)h 63(\\)h 105 1685(_EX_CURR)s 216(=)h 22(&_ex_cxlc;)h 41(\\)h 105 1735(if)s 21(\(!setjmp\(_ex_c)h -1(xlc.)h -1(_ex_j)h -1(mbf\)\))h 19({)h 740 1959(if)s 311(if)h 564(FALSE)h 939 2009(EX)s 15(WHEN)h 1488 2084(switch)s 99 2134(if)s 178(switch)h 686(if)h 268(switch)h 310 2183(switch)s 1661 2233(switch)s 139 2283(int)s 538 2333(if)s 83 2482(;EX_POP})s 20(else)h 21({EX_POP;)h 20(if)h 22(\(FALSE\))h 20({)h 1403 2607(EX)s 16(WHEN)h 533 2657(if)s cmr10.300 sf 0 129(Tw)s -1(o)h 16(forms)h 16(of)h 16(the)h 202(macro)h 16(are)h 17(giv)h -1(en.)h 26(The)h 18(\014rst)h 17(simply)h 15(calls)h 158(whic)h -1(h)h 17(p)h 1(erforms)h 16(lots)h 16(of)h 17(c)h -1(hec)h -1(ks)h 0 178(b)s 1(efore)h 14(raising)h 12(the)h 14(argumen)h -1(t)h 12(exception.)h 19(The)h 13(fast)h 14(form)h 11(do)h 1(es)h 14(not)h 13(p)h 1(erform)h 12(an)h -1(y)h 13(c)h -1(hec)h -1(king)h 14(|)h 12(it)h 13(just)h 14(p)h 1(erforms)h 12(the)h 0 228(essen)s -1(tial)h 14(op)h 1(erations)h 14(of)h 14(setting)h 14(the)h 15(ID)h 13(and)h 14(executing)h 14(the)h 169(.)h 770 328([44])s 772 527([45])s 0 863(The)s 15(exception)h 16(blo)h 1(c)h -1(k)h 15(macros)h 14(are)h 15(messy)h 14(and)h 15(deserv)h -1(e)h 17(some)h 14(explanation.)h 20(These)h 16(macros)h 14(op)h 1(erate)h 16(as)h 15(a)h 15(coheren)h -1(t)h 0 913(whole,)s 21(so)h 21(it)h 20(is)h 20(probably)h 20(b)h 1(est)h 21(to)h 20(read)h 21(them)h 20(through)h 20(a)h 20(few)h 21(times)h 19(to)h 20(see)h 22(ho)h -1(w)h 20(they)h 21(in)h -1(teract,)h 22(rather)h 21(than)h 0 963(attempting)s 12(to)h 13(understand)h 15(eac)h -1(h)h 13(one)h 14(indep)h 1(enden)h -1(tly)h -3(.)h 18(Tw)h -1(o)h 13(v)h -1(ersions)h 14(of)h 13(the)h 13(exception)h 15(blo)h 1(c)h -1(k)h 12(macros)h 13(are)h 14(giv)h -1(en)h 12(|)h 0 1013(the)s 14(safe)h 15(v)h -1(ersion)h 14(and)h 13(the)h 15(fast)h 14(v)h -1(ersion.)h 18(The)h 14(safe)h 14(v)h -1(ersion)h 14(is)h 14(describ)h 1(ed)h 16(\014rst.)h 0 1088(The)s 188(macro)h 9(sets)h 11(the)h 10(stage)h 10(for)h 10(the)h 10(en)h -1(tire)h 11(exception)h 10(blo)h 1(c)h -1(k)h 10(b)h -1(y)h 9(starting)h 10(a)h 9(comp)h 1(ound)h 9(statemen)h -1(t,)h 10(declaring)h 0 1137(a)s 15(lo)h 1(cal)h 14(v)h -2(ariable)h 15(for)h 15(the)h 16(stac)h -1(k)h 15(no)h 1(de)h 16(\()h 163(\),)h 15(initiali)h -1(zing)h 13(its)h 16(magi)h -1(c)h 14(c)h -1(hec)h -1(king)h 16(n)h -1(um)h -1(b)h 1(ers,)h 14(pushing)h 16(it)h 15(on)h -1(to)h 14(the)h 0 1187(stac)s -1(k,)h 13(and)h 12(\014nally)h 11(sa)h -1(ving)h 12(the)h 13(curren)h -1(t)h 14(execution)h 13(con)h -1(text)h 13(in)h 13(the)h 187(\014eld)h 13(of)h 12(the)h 13(newly)h 12(created)h 14(stac)h -1(k)h 13(no)h 1(de.)h 0 1237(This)s 14(w)h -1(ork)h 13(has)h 14(to)h 14(b)h 1(e)h 15(done)h 14(in)h 13(this)h 14(macro)h 13(as)h 14(most)h 12(of)h 14(the)h 14(op)h 1(erations)h 14(require)h 15(direct)h 15(access)h 15(to)h 14(the)h 15(lo)h 1(cal)h 13(con)h -1(text.)h 0 1287(Not)s 13(m)h -1(uc)h -1(h)h 13(c)h -1(hec)h -1(king)h 13(can)h 14(b)h 1(e)h 14(done)h 14(here)h 15(either)h 14(as)h 13(w)h -1(e)h 14(ha)h -1(v)h -1(e)h 13(no)h 14(w)h -1(a)h -1(y)h 12(of)h 13(cross)h 15(c)h -1(hec)h -1(king)h 14(the)h 14(v)h -2(alue)h 13(of)h 188(up)h 1(on)h 0 1337(en)s -1(try)h -3(.)h 18(The)h 15(op)h 1(en)h 71(statemen)h -1(t)h 14(encloses)h 15(the)h 15(en)h -1(tire)h 14(normal)h 12(co)h 1(de)h 15(of)h 13(the)h 15(exception)h 14(blo)h 1(c)h -1(k.)h 647 1436([46])s 0 1860(A)s -1(t)h 18(the)h 19(p)h 1(oin)h -1(t)h 18(of)h 17(forgetting,)h 18(w)h -1(e)h 19(need)h 19(to)h 18(terminate)h 17(the)h 19(comp)h 1(ound)h 17(statemen)h -1(t)h 18(for)h 18(the)h 19(normal)h 16(co)h 1(de,)h 19(p)h 1(op)h 18(the)h 0 1910(curren)s -1(t)h 15(exception)h 14(con)h -1(text)h 15(and)h 13(then)h 15(test)h 14(the)h 14(curren)h -1(tly)h 15(liv)h -1(e)h 13(exception)h 14(against)h 13(the)h 14(candidate)h 14(handlers.)h 19(This)h 13(is)h 0 1959(most)s 13(simply)h 13(p)h 1(erformed)h 14(with)h 14(a)h 15(cascaded)h 74(statemen)h -1(t.)h 20(The)h 73(statemen)h -1(t)h 14(has)h 15(to)h 14(start)h 16(with)h 14(a)h 138(branc)h -1(h)h 0 2009(so)s 14(as)h 14(to)h 14(establish)h 14(the)h 14(syn)h -1(tactic)h 15(con)h -1(text)h 14(for)h 14(the)h 14(\014rst)h 175(macro.)h 0 2084(An)s 12(earlier)h 12(v)h -1(ersion)h 11(of)h 12(this)h 11(pac)h -1(k)h -2(age)h 12(that)h 11(used)h 13(in)h -1(tegers)h 12(to)h 12(represen)h -1(t)h 14(exceptions)h 13(used)h 12(a)h 154(statemen)h -1(t)h 12(instead)h 0 2134(of)s 10(an)h 66(c)h -1(hain.)h 17(A)h 152(statemen)h -1(t)h 11(is)h 11(actually)h 10(preferable)h 12(to)h 11(an)h 66(c)h -1(hain)h 10(b)h 1(ecause)h 145(es)h 11(prohibit)h 10(duplicate)h 0 2183(lab)s 1(els.)h 17(Ho)h -1(w)h -1(ev)h -1(er,)h 145(es)h 13(had)h 12(to)h 13(b)h 1(e)h 13(abandoned)h 13(b)h 1(ecause)h 14(when)h 13(the)h 13(pac)h -1(k)h -2(age)h 13(w)h -1(as)h 12(c)h -1(hanged)h 14(o)h -1(v)h -1(er)h 12(so)h 13(that)h 13(it)h 12(used)h 0 2233(p)s 1(oin)h -1(ters)h 14(as)h 13(exception)h 14(ids,)h 13(it)h 13(w)h -1(as)h 13(noticed)h 14(that)h 13(K&R78)h 13(section)h 14(9.7)h 12(sa)h -1(ys)h 14(that)h 13(the)h 14(argumen)h -1(t)h 12(to)h 157(m)h -1(ust)h 12(b)h 1(e)h 0 2283(of)s 12(t)h -1(yp)h 1(e)h 80(.)h 17(K&R88)h 13(\(section)h 14(A9.4\))h 12(and)h 13(ANSI)h 13(\(section)h 14(6.6.4.2\))h 11(w)h -1(eak)h -1(en)h 13(this)h 13(to)h 13(include)h 13(all)h 12(in)h -1(tegral)h 12(t)h -1(yp)h 1(es,)h 14(but)h 0 2333(still)s 13(preclude)h 15(p)h 1(oin)h -1(ters.)h 19(So)h 13(an)h 71(c)h -1(hain)h 14(had)h 14(to)h 13(b)h 1(e)h 15(used.)h 689 2433([47])s 0 2607(The)s 16(start)h 17(of)h 15(eac)h -1(h)h 17(handler)h 16(in)h 15(the)h 17(exception)h 17(blo)h 1(c)h -1(k)h 15(is)h 16(mark)h -1(ed)h 15(b)h -1(y)h 15(a)h 16(call)h 15(to)h 16(the)h 179(macro.)h 23(All)h 15(it)h 15(do)h 1(es)h 17(is)h 0 2657(add)s 14(an)h 13(extra)h 15(clause)h 14(on)h -1(to)h 14(the)h 71(c)h -1(hain.)h 954 2770(23)s 14 2 385 129 r 14 2 1267 129 r 13 2 493 328 r 13 2 681 328 r 13 2 495 527 r 13 2 683 527 r 14 2 128 1088 r 14 2 659 1137 r 14 2 719 1137 r 14 2 1109 1187 r 14 2 1169 1187 r 14 2 1686 1287 r 14 2 1746 1287 r 13 2 493 1436 r 14 2 986 2009 r 13 2 493 2433 r 14 2 1450 2607 r 23 @eop 24 @bop0 cmbx10.432 sf [<1C007F00FF80FF80FFC0FFC0FFC07FC01CC000C000C001C0018001800380070006000E 001C0038003000> 16 21 -5 8 19] 44 dc 24 @bop1 cmsy10.300 sf 854 42(\021)s 62 91(f)s 676(g)h 763 340(\021)s 62 390(f)s 393(g)h 678 639(\021)s 62 689(f)s 523(g)h 676 1038(\021)s 62 1088(f)s 438(g)h 728 1517(\021)s 62 1567(f)s 846 1716(g)s 769 1848(\021)s 62 1898(f)s 763(g)h 856 2029(\021)s 62 2079(f)s 676(g)h 765 2211(\021)s 62 2261(f)s 393(g)h 680 2392(\021)s 62 2442(f)s 1025(g)h 678 2574(\021)s 62 2624(f)s 699(g)h cmbx10.432 sf 0 1255(4.6)s 24(F)h -6(ast,)h 24(Inline)h 21(V)h -6(ersions)h 22(of)h 24(the)h 22(Exception)h 22(Blo)h 2(c)h -2(k)h 22(Macros)h cmsl10.300 sf 0 42(Safe)s 14(implem)h -1(en)h -1(tati)h -1(on)h 12(of)h 13(EX)h 16(WHEN\(P)h 15(EX\))h 0 340(Safe)s 14(implem)h -1(en)h -1(tati)h -1(on)h 12(of)h 13(EX)h 16(OTHERS)h 0 639(Safe)s 14(implem)h -1(en)h -1(tati)h -1(on)h 12(of)h 13(EX)h 16(END)h 0 1038(Safe)s 14(implem)h -1(en)h -1(tati)h -1(on)h 12(of)h 13(EX)h 16(POP)h 0 1517(F)s -3(ast)h 14(impl)h -1(emen)h -1(tati)h -1(on)h 12(of)h 13(EX)h 16(BEGIN)h 0 1848(F)s -3(ast)h 14(impl)h -1(emen)h -1(tati)h -1(on)h 12(of)h 13(EX)h 16(F)h -1(OR)h -1(GET)h 0 2029(F)s -3(ast)h 14(impl)h -1(emen)h -1(tati)h -1(on)h 12(of)h 13(EX)h 16(WHEN\(P)h 15(EX\))h 0 2211(F)s -3(ast)h 14(impl)h -1(emen)h -1(tati)h -1(on)h 12(of)h 13(EX)h 16(OTHERS)h 0 2392(F)s -3(ast)h 14(impl)h -1(emen)h -1(tati)h -1(on)h 12(of)h 13(EX)h 16(END)h 0 2574(F)s -3(ast)h 14(impl)h -1(emen)h -1(tati)h -1(on)h 12(of)h 13(EX)h 16(POP)h cmr7.300 sf 0 138(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(23.)h 0 437(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(23.)h 0 736(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(23.)h 0 1134(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(23.)h 0 1762(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(23.)h 0 1944(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(23.)h 0 2125(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(23.)h 0 2307(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(23.)h 0 2488(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(23.)h 0 2670(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(23.)h cmtt10.300 sf 83 91(})s 22(else)h 21(if)h 21(\(\(P_EX\))h 20(==)h 22(\(EX_ID\)\))h 20({)h 91 205(EX)s 16(OTHERS)h 852(EX)h 15(FORGET)h 512 255(lint)s 83 390(})s 22(else)h 21(if)h 21(\(TRUE\))h 21({)h 732 554(else)s 61(EX)h 15(FORGET)h 83 689(})s 22(else)h 21(_exrai\(EX_I)h -1(D\);)h 19(}})h 1804 803(ex)s 15(cxlc)h 1126 903(expop)s 83 1088({_expop\(&_ex_)s -1(cxlc\))h -1(;})h 83 1567({_ex_cx_t)s 20(_ex_cxlc;)h 303(\\)h 105 1616(_ex_cxlc._ex)s -1(_prev)h 19(=)h 22(_EX_CURR;)h 63(\\)h 105 1666(_EX_CURR)s 216(=)h 22(&_ex_cxlc;)h 41(\\)h 105 1716(if)s 21(\(!setjmp\(_ex_c)h -1(xlc.)h -1(_ex_j)h -1(mbf\)\))h 19({)h 83 1898(;EX_POP})s 20(else)h 21({EX_POP;)h 20(if)h 22(\(FALSE\))h 20({)h 83 2079(})s 22(else)h 21(if)h 21(\(\(P_EX\))h 20(==)h 22(\(EX_ID\)\))h 20({)h 83 2261(})s 22(else)h 21(if)h 21(\(TRUE\))h 21({)h 83 2442(})s 22(else)h 21(longjmp\(_EX)h -1(_CUR)h -1(R->_e)h -1(x_jmb)h -1(f,NON)h -1(_ZERO)h -1(\);)h 20(}})h 83 2624({_EX_CURR)s 20(=)h 22(_EX_CURR->)h -1(_ex_p)h -1(rev;})h cmr10.300 sf 775 42([48])s 0 205(The)s 230(macro)h 19(is)h 20(also)h 19(easily)h 20(impl)h -1(em)h -1(en)h -1(ted)h 19(\(but,)h 22(lik)h -1(e)h 210(,)h 18(could)h 20(conceiv)h -2(ably)h 19(pro)h -1(v)h -1(ok)h -1(e)h 20(some)h 0 255(incon)s -1(v)h -1(enien)h -1(t)h 14(w)h -1(arnings)h 13(from)h 100(.)h 684 340([49])s 0 504(T)s -3(o)h 16(end)h 17(the)h 17(construct,)h 18(w)h -1(e)h 17(terminate)h 16(the)h 17(curren)h -1(t)h 18(handler,)h 17(re-raise)h 18(the)h 17(curren)h -1(tly)h 17(liv)h -1(e)h 16(exception)h 17(if)h 16(it)h 16(has)h 17(not)h 0 554(already)s 14(b)h 1(een)h 15(caugh)h -1(t,)h 13(and)h 14(terminate)h 13(the)h 115(of)h 218(and)h 13(the)h 15(outer)h 14(braces)h 15(of)h 14(the)h 14(en)h -1(tire)h 15(construct.)h 600 639([50])s 0 803(P)s -1(opping)h 9(the)h 11(curren)h -1(t)h 11(exception)h 11(con)h -1(text)h 11(is)h 9(easily)h 10(ac)h -1(hiev)h -1(ed)h 10(with)h 10(a)h 9(function)h 10(call.)h 16(Note:)h 16(The)h 11(reference)h 12(to)h 0 853(will)s 10(simply)h 9(not)h 12(compile)h 10(if)h 10(there)h 13(isn't)h 11(a)h 11(curren)h -1(t)h 13(con)h -1(text.)h 18(This)h 12(correctly)h 12(precludes)h 14(the)h 12(use)h 12(of)h 11(this)h 11(macro)h 11(outside)h 0 903(an)s 14(exception)h 16(blo)h 1(c)h -1(k.)h 19(It)h 15(also)h 14(guaran)h -1(tees)h 16(that)h 14(the)h 15(argumen)h -1(t)h 14(to)h 153(will)h 14(b)h 1(e)h 15(a)h 14(p)h 1(oin)h -1(ter)h 15(to)h 14(the)h 15(con)h -1(text)h 16(record)h 0 953(of)s 13(the)h 15(innermost)h 13(statically-enclosing)h 13(exception)h 14(blo)h 1(c)h -1(k.)h 597 1038([51])s 0 1332(Here)s 15(are)h 13(the)h 14(fast,)h 13(inline)h 13(v)h -1(ersions)h 13(of)h 13(the)h 14(exp)h 1(orted)h 15(macros.)h 17(This)h 13(v)h -1(ersion)h 13(of)h 13(the)h 14(macros)h 12(op)h 1(erates)h 15(in)h 13(exactly)h 13(the)h 0 1382(same)s 12(w)h -1(a)h -1(y)h 13(as)h 13(the)h 14(other)h 14(v)h -1(ersion)h 14(except)h 14(that)h 14(no)h 13(c)h -1(hec)h -1(king)h 13(is)h 14(p)h 1(erformed)h 13(whatso)h 1(ev)h -1(er.)h 19(This)h 13(v)h -1(ersion)h 13(of)h 13(the)h 14(macros)h 0 1431(p)s 1(erforms)h 13(ev)h -1(erything)h 15(on)h 13(the)h 15(sp)h 1(ot,)h 14(without)h 13(calling)h 13(an)h -1(y)h 13(supp)h 1(ort)h 15(functions)h 14(at)h 13(all.)h 649 1517([52])s 691 1848([53])s 777 2029([54])s 686 2211([55])s 602 2392([56])s 599 2574([57])s 954 2770(24)s 13 2 493 42 r 13 2 686 42 r 14 2 138 205 r 14 2 1182 205 r 13 2 493 340 r 14 2 928 554 r 13 2 493 639 r 14 2 1790 803 r 14 2 1851 803 r 14 2 1113 903 r 13 2 493 1038 r 13 2 495 1517 r 13 2 495 1848 r 13 2 495 2029 r 13 2 688 2029 r 13 2 495 2211 r 13 2 495 2392 r 13 2 495 2574 r 24 @eop 25 @bop0 cmr10.432 sf [<007F000001FFC0000380F0000600380008001C0018000C001000060030000600300006 0030000600380006003C0006003E000C001F8008001FC010000FF0200007F8C00003FF80 0001FF0000007FC00000FFE000030FF8000603FC001C01FE0038007E0030003F0070000F 0070000780E0000780E0000380E0000380E0000380E0000380F000030070000700780006 0038000C001E0038000F80F00003FFE000007F0000> 32 41 -2 39 30] 56 dc [ 40 41 -2 40 39] 70 dc [<0783F800FF8C1C00FF900E000FA0070007A0078007C0078007C0078007800780078007 800780078007800780078007800780078007800780078007800780078007800780078007 80078007800780078007800780078007800780078007800780FFFCFFFCFFFCFFFC> 32 26 -1 25 33] 110 dc [<0080000080000080000080000180000180000180000380000380000780000F80001FFF 80FFFF800780000780000780000780000780000780000780000780000780000780000780 0007800007800007804007804007804007804007804007804007804003C08001C08000E1 00003E00> 24 37 -1 36 23] 116 dc [ 32 26 -1 25 32] 120 dc cmr7.300 sf [<07C00C201070207060006000C000CF00D0C0E060C020C030C030C03040306020206010 C00F00> 16 19 -2 18 17] 54 dc [<0F00308060404060C020C030C030C0304030607030B00F30003000200060E040E08041 003E00> 16 19 -2 18 17] 57 dc cmsl10.300 sf [ 32 29 -6 27 31] 85 dc 25 @bop1 cmbx10.300 sf 733 2420(M)s cmti10.300 sf 856 2594(b)s -2(efor)h -2(e)h cmsy10.300 sf 359 278(\021)s 62 328(f)s 1283 378(g)s 449 1150(\021)s 62 1200(f)s 699(g)h 358 1349(\021)s 62 1399(f)s 83 2146(g)s 792 2420(\021)s 62 2470(f)s 634(g)h cmr10.432 sf 0 863(4.8.1)s 19(F)h -5(unction)h 41(exrai)h cmbx10.432 sf 0 42(4.7)s 24(F)h -6(unction)h 23(ex)h 24(str)h 0 577(4.8)s 24(Supp)h 2(ort)h 24(F)h -6(unctions)h cmr7.300 sf 0 428(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(31.)h 0 1249(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(33.)h 0 2196(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(31.)h 0 2520(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nitions)h 13(60)h 10(and)h 11(69.)h cmsl10.300 sf 0 278(F)s -3(unction)h 14(ex)h 15(str)h 0 1150(F)s -3(unction)h 14(sp)h 1(ec)h 30(exrai)h 0 1349(F)s -3(unction)h 28(exrai)h 105 1748(T)s -3(ak)h -1(e)h 13(a)h 14(cop)h -1(y)h 14(of)h 28(EX)h 15(CURR)h 13(in)h 14(p)h 15(curr)h 105 1797(Set)s 14(the)h 15(exception)h 14(ID)h 105 1847(Bom)s -1(b)h 12(if)h 13(the)h 15(stac)h -1(k)h 14(is)h 14(empt)h -1(y)h 105 1897(Bom)s -1(b)h 12(if)h 13(the)h 15(target)h 14(con)h -1(text)h 15(is)h 14(not)h 13(on)h 14(the)h 14(stac)h -1(k)h 105 1947(Bom)s -1(b)h 12(if)h 13(the)h 15(target)h 14(con)h -1(text)h 15(is)h 14(corrupted)h 105 1997(Raise)s 13(the)h 15(exception)h 0 2420(T)s -3(ak)h -1(e)h 13(a)h 14(cop)h -1(y)h 14(of)h 28(EX)h 15(CURR)h 13(in)h 14(p)h 15(curr)h cmtt10.300 sf 249 129(ex)s 15(str)h 83 378(EXPORT)s 21(string)h 20(ex_str)h 21(\(p_ex\))h 20(p_ex_t)h 21(p_ex;)h 21({return)h 20(p_ex;})h 261 951(exrai)s 1276(EX)h 15(RAISE)h 83 1200(EXPORT)s 21(void)h 21(_exrai)h 20(P_\(\(p_ex_t\)\);)h 83 1449(EXPORT)s 21(void)h 21(_exrai)h 20(\(p_ex\))h 83 1499(p_ex_t)s 21(p_ex;)h 83 1548({)s 83 1598(#if)s 21(_EX_FAST)h 105 1648(as_bomb\("_ex)s -1(rai:)h 19(This)h 21(function)h 20(should)h 21(not)h 21(be)h 22(called)h 20(with)h 21(_EX_FAST==TRU)h -1(E."\);)h 83 1698(#else)s 83 2046(#endif)s 83 2096(})s 667 2271(EX)s 15(CURR)h 466(EX)h 15(CURR)h 1195 2320(p)s 15(curr)h 83 2470(_ex_cx_t)s 20(*)h 22(p_curr)h 20(=)h 22(_EX_CURR;)h 740 2594(EX)s 16(ID)h 908 2644(ex)s 15(bomb)h cmr10.300 sf 0 129(The)s 15(function)h 153(is)h 14(easily)h 14(implem)h -1(en)h -1(ted.)h 18(Because)h 17(exceptions)h 15(are)h 15(just)h 15(p)h 1(oin)h -1(ters)h 15(to)h 14(strings,)h 14(all)h 13(it)h 14(has)h 15(to)h 14(do)h 0 178(is)s 14(return)h 15(its)h 14(argumen)h -1(t!)h 280 278([58])s 0 664(Although)s 11(most)h 11(of)h 11(what)h 11(this)h 12(pac)h -1(k)h -2(age)h 11(exp)h 1(orts)h 13(is)h 11(macros,)h 11(some)h 11(of)h 11(the)h 12(macros)h 11(translate)h 12(in)h -1(to)h 11(calls)h 11(to)h 12(the)h 12(supp)h 1(ort)h 0 714(functions)s 10(describ)h 1(ed)h 11(in)h 10(this)h 9(section.)h 18(F)h -3(unctions)h 9(ha)h -1(v)h -1(e)h 10(b)h 1(een)h 11(used)h 10(for)h 10(op)h 1(erations)h 10(that)h 9(are)h 10(particularly)h 9(long-winded.)h 0 951(The)s 13(function)h 149(raises)h 13(an)h 12(exception.)h 19(This)h 12(function)h 12(p)h 1(erforms)h 12(all)h 11(the)h 13(grun)h -1(t)h 13(w)h -1(ork)h 12(for)h 12(the)h 194(macro,)h 0 1000(whic)s -1(h)h 15(merely)h 14(translates)h 15(to)h 15(a)h 14(call)h 14(of)h 14(this)h 15(function.)h 21(The)h 15(function)h 14(sp)h 1(eci\014cation)h 16(app)h 1(ears)h 15(in)h 15(the)h 15(header)h 16(\014le)h 15(but)h 0 1050(is)s 14(not)h 14(supp)h 1(osed)h 15(to)h 13(b)h 1(e)h 15(seen)h 15(b)h -1(y)h 14(the)h 14(clien)h -1(t.)h 371 1150([59])s 279 1349([60])s 772 1748([61])s 482 1797([62])s 601 1847([63])s 944 1897([64])s 823 1947([65])s 459 1997([66])s 0 2271(This)s 14(function)h 15(refers)h 16(to)h 14(the)h 15(v)h -2(alue)h 14(of)h 191(lots)h 14(of)h 14(times.)h 20(Ho)h -1(w)h -1(ev)h -1(er,)h 191(could)h 15(b)h 1(e)h 15(a)h 14(function)h 14(call.)h 20(T)h -3(o)h 0 2320(a)s -1(v)h -1(oid)h 13(excessiv)h -1(e)h 15(use)h 15(of)h 13(this)h 14(v)h -2(ariable,)h 12(w)h -1(e)h 14(tak)h -1(e)h 14(a)h 14(cop)h -1(y)h 14(of)h 13(its)h 14(v)h -2(alue)h 13(in)h 139(.)h 667 2420([61])s 0 2594(W)s -3(e)h 12(set)h 14(the)h 14(global)h 11(exception)h 14(ID)h 12(v)h -2(ariable)h 260(p)h 1(erforming)h 12(all)h 11(the)h 14(sanit)h -1(y)h 12(c)h -1(hec)h -1(ks)h 15(so)h 12(that)h 13(if)h 12(one)h 14(of)h 12(them)h 0 2644(fails,)s 12(the)h 15(curren)h -1(t)h 15(exception)h 15(can)h 14(b)h 1(e)h 14(prin)h -1(ted)h 15(out)h 13(b)h -1(y)h 161(.)h 954 2770(25)s 21 2 469 42 r 14 2 296 129 r 13 2 216 278 r 18 2 396 863 r 14 2 248 951 r 14 2 1694 951 r 13 2 267 1150 r 13 2 176 1349 r 13 2 386 1748 r 13 2 460 1748 r 13 2 683 1748 r 14 2 654 2271 r 14 2 714 2271 r 14 2 1267 2271 r 14 2 1327 2271 r 14 2 1220 2320 r 13 2 282 2420 r 13 2 355 2420 r 13 2 578 2420 r 14 2 727 2594 r 14 2 787 2594 r 14 2 955 2644 r 25 @eop 26 @bop0 26 @bop1 cmti10.300 sf 1292 589(this)s cmsy10.300 sf 456 42(\021)s 62 91(f)s 306(g)h 573 365(\021)s 62 415(f)s 1632 465(g)s 918 888(\021)s 62 938(f)s 149 1436(g)s 797 1660(\021)s 62 1710(f)s 149 2059(g)s 433 2283(\021)s 62 2333(f)s 765(g)h cmsl10.300 sf 0 42(Set)s 14(the)h 15(exception)h 15(ID)h 0 365(Bom)s -1(b)h 12(if)h 14(the)h 14(stac)h -1(k)h 14(is)h 14(empt)h -1(y)h 0 888(Bom)s -1(b)h 12(if)h 14(the)h 14(target)h 14(con)h -1(text)h 15(is)h 14(not)h 14(on)h 13(the)h 15(stac)h -1(k)h 0 1660(Bom)s -1(b)h 12(if)h 14(the)h 14(target)h 14(con)h -1(text)h 15(is)h 14(corrupted)h 0 2283(Raise)s 14(the)h 14(exception)h cmr7.300 sf 0 141(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(60.)h 0 515(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(60.)h 0 1486(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(60.)h 0 2109(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(60.)h 0 2383(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(60.)h cmr10.300 sf 378 42([62])s 0 216(If)s 18(the)h 19(con)h -1(text)h 18(stac)h -1(k)h 19(is)h 18(empt)h -1(y)h 17(then)h 19(there)h 20(is)h 18(no)h 17(handler)h 19(to)h 18(catc)h -1(h)h 19(the)h 18(exception)h 19(and)h 18(w)h -1(e)h 19(ha)h -1(v)h -1(e)h 18(to)h 18(b)h 1(om)h -1(b)h 16(the)h 0 266(program.)s 496 365([63])s 0 589(If)s 14(the)h 14(target)h 15(con)h -1(text)h 14(is)h 14(lo)h -1(w)h -1(er)h 14(do)h -1(wn)h 14(in)h 13(memory)h 12(than)h 14(the)h 14(stac)h -1(k)h 15(frame)h 12(of)h 92(function)h 14(\()h 126(\),)h 13(then)h 14(b)h 1(ecause)h 0 639(stac)s -1(ks)h 17(nearly)h 17(alw)h -1(a)h -1(ys)h 15(gro)h -1(w)h 16(do)h -1(wn)h -1(w)h -1(ards,)h 17(it)h 16(is)h 17(almo)h -1(st)h 15(certain)h 17(that)h 17(a)h 16(con)h -1(text)h 18(w)h -1(as)h 16(not)h 17(p)h 1(opp)h 1(ed)h 17(when)h 17(it)h 16(should)h 0 689(ha)s -1(v)h -1(e)h 15(b)h 1(een.)h 22(Strictly)h 15(sp)h 1(eaking,)h 15(this)h 15(test)h 16(is)h 15(non-p)h 1(ortable.)h 21(Ho)h -1(w)h -1(ev)h -1(er,)h 15(in)h 14(practice,)h 16(stac)h -1(ks)h 16(gro)h -1(w)h 14(do)h -1(wn)h -1(w)h -1(ard)h 15(in)h 14(the)h 0 739(address)s 13(space)h 14(on)h 12(nearly)h 12(all)h 11(mac)h -1(hines,)h 11(and)h 12(it's)h 11(suc)h -1(h)h 13(a)h 12(p)h 1(o)h -1(w)h -1(erful)h 12(c)h -1(hec)h -1(k,)h 13(it)h 12(seems)h 12(w)h -1(orth)h 12(the)h 13(p)h 1(oten)h -1(tial)h 11(p)h 1(ortabilit)h -1(y)h 0 789(problems.)s 840 888([64])s 0 1561(Chec)s -1(k)h 15(the)h 14(target)h 14(con)h -1(text)h 15(for)h 13(corruptions.)h 19(There)h 15(is)h 14(no)h 14(p)h 1(oin)h -1(t)h 13(doing)h 13(a)h 180(to)h 14(a)h 13(corrupted)h 16(con)h -1(text!)h 718 1660([65])s 0 2183(Actually)s 13(raising)h 13(the)h 15(exception)h 15(is)h 13(the)h 15(easy)h 14(part!)h 18(All)h 13(that)h 14(is)h 14(required)h 15(is)h 14(a)h 167(.)h 354 2283([66])s 954 2770(26)s cmtt10.300 sf 83 91(_EX_ID)s 21(=)h 21(p_ex;)h 83 465(if)s 21(\(p_curr)h 21(==)h 21(NULL\))h 21({as_wl\("_exr)h -1(ai:)h 20(Unhandled)h 20(exception.)h -1("\);)h 20(ex_bomb\(\);})h 1565 589(exrai)s 83 988(if)s 21(\(UWIDE\(&p_curr\))h 19(>)h 22(UWIDE\(&p_cu)h -1(rr->_)h -1(ex_jm)h -1(bf\)\))h 127 1038({)s 148 1088(as_wl\("_exrai:)s 19(Target)h 21(exception)h 20(context)h 20(is)h 22(no)h 21(longer)h 20(legitimate."\);)h 148 1137(as_wl\(")s 173(Exception)h 20(context)h 21(resides)h 20(beneath)h 20(the)h 21(top)h 22(of)h 21(stack."\);)h 148 1187(as_wl\(")s 173(This)h 21(means)h 21(that)h 21(earlier)h 20(on,)h 22(control)h 20(must)h 21(have)h 21(left)h 21(an"\);)h 148 1237(as_wl\(")s 173(exception)h 20(context)h 21(without)h 20(first)h 21(popping)h 20(its)h 21(handler."\);)h 148 1287(as_wl\(")s 173(Look)h 21(for)h 21(jumps)h 21(out)h 21(of)h 22(exception)h 20(contexts)h 20(that)h 21(are)h 21(not"\);)h 148 1337(as_wl\(")s 173(immediately)h 20(preceded)h 20(by)h 21(calls)h 21(to)h 21(EX_POP."\);)h 148 1386(ex_bomb\(\);)s 127 1436(})s 1241 1561(longjmp)s 83 1760(if)s 21(\(\(p_curr->_ex_m)h -1(ag1)h 19(!=)h 22(_EX_MAG1\))h 20(||)h 21(\(p_curr->_ex_)h -1(mag2)h 19(!=)h 22(_EX_MAG2\)\))h 127 1810({)s 148 1860(as_wl\("_exrai:)s 19(Target)h 21(exception)h 20(context)h 20(has)h 21(been)h 21(corrupted.)h 20(This)h 21(could"\);)h 148 1910(as_wl\(")s 173(be)h 22(because)h 20(an)h 21(exception)h 20(context)h 21(wasn't)h 20(popped,)h 21(or)h 21(it"\);)h 148 1959(as_wl\(")s 173(could)h 21(be)h 21(just)h 21(a)h 22(common)h 21(garden-var)h -1(iety)h 19(C)h 22(corruption)h 20(:-\)"\);)h 148 2009(ex_bomb\(\);)s 127 2059(})s 1309 2183(longjmp)s 83 2333(longjmp\(p_cur)s -1(r->_e)h -1(x_jm)h -1(bf,NO)h -1(N_ZER)h -1(O\);)h 14 2 1552 589 r 26 @eop 27 @bop0 cmr10.432 sf [<007F000003FFC0000701F0000C00F80010007C001C007C003E007E003E003E003E003E 001E003E000C007E0000007C0000007C00000078000000F0000000E0000001C000000700 0000FF00000001E0000000F0000000780000003C0000003E0000001F0000001F0000001F 8000001F8030001F8078001F80FC001F80FC001F80FC001F00F8001F0040003F0040003E 0030007C001800F8000F01F00003FFC000007F0000> 32 41 -2 39 30] 51 dc [<0783F000FF8C1C00FFB00F0007A0078007C003C0078003E0078001E0078001F0078001 F0078000F8078000F8078000F8078000F8078000F8078000F8078000F8078000F0078001 F0078001F0078001E0078003C007C003C007C0078007A00E0007983C000787E000078000 000780000007800000078000000780000007800000078000000780000007800000078000 00FFFC0000FFFC0000> 32 38 -1 25 33] 112 dc cmsl10.300 sf [<03FFFF8007C00F0007001E0006003C0006007C00040078000400F0000801E0000803E0 000003C00000078000000F0000001F0000001E0000003C00000078000000F8000000F004 0001E0080003C0080007800800078018000F0010001E0030003C0030003C00F0007803E0 00FFFFE000> 32 28 -2 27 25] 90 dc cmtt10.300 sf [<3801807C0380FE0380FE0700EE0700EE0E00EE0E00EE0E00FE1C00FE1C007C38003838 0000700000700000700000E00000E00001C00001C00001C0000380000383800707C0070F E00E0EE00E0EE00E0EE01C0EE01C0EE0380FE03807C0180380> 24 32 -1 28 22] 37 dc 27 @bop1 cmsy10.300 sf 410 276(\021)s 62 326(f)s 83 923(g)s 468 1454(\021)s 62 1503(f)s 785(g)h 377 1651(\021)s 62 1701(f)s 83 2398(g)s 1149 2670(\021)s cmr10.432 sf 0 42(4.8.2)s 19(F)h -5(unction)h 20(ex)h 20(b)h 2(om)h -2(b)h 0 1120(4.8.3)s 19(F)h -5(unction)h 41(exp)h 2(op)h cmr7.300 sf 0 973(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(31.)h 0 1553(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(33.)h 0 2448(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(31.)h cmsl10.300 sf 0 276(F)s -3(unction)h 14(ex)h 15(b)h 1(om)h -1(b)h 0 1454(F)s -3(unction)h 14(sp)h 1(ec)h 30(exp)h 1(op)h 0 1651(F)s -3(unction)h 28(exp)h 1(op)h 105 2050(T)s -3(ak)h -1(e)h 13(a)h 14(cop)h -1(y)h 14(of)h 28(EX)h 15(CURR)h 13(in)h 14(p)h 15(curr)h 105 2099(Bom)s -1(b)h 12(if)h 13(the)h 15(curren)h -1(t)h 15(con)h -1(text)h 15(is)h 14(not)h 13(the)h 15(top)h 14(of)h 13(stac)h -1(k)h 14(con)h -1(text)h 105 2149(Bom)s -1(b)h 12(if)h 13(curren)h -1(t)h 16(con)h -1(text)h 14(is)h 14(corrupted)h 105 2199(Zap)s 14(the)h 14(curren)h -1(t)h 16(con)h -1(text)h 105 2249(P)s -1(op)h 14(the)h 14(con)h -1(text)h 0 2670(Bom)s -1(b)h 12(if)h 14(the)h 14(curren)h -1(t)h 15(con)h -1(text)h 15(is)h 14(not)h 14(the)h 14(top)h 14(of)h 13(stac)h -1(k)h 14(con)h -1(text)h cmtt10.300 sf 254 128(ex)s 15(bomb)h 650 178(exrai)s 83 375(LOCAL)s 21(void)h 21(ex_bomb)h 20(P_\(\(void\)\);)h 83 425(LOCAL)s 21(void)h 21(ex_bomb)h 20(\(\))h 83 475({)s 105 525(char)s 21(s[100];)h 105 575(as_wr\(")s 173(Exception)h 20(desc)h 21(is)h 21(:)h 22(\\""\);)h 20(as_wr\(EX_ID\);)h 19(as_wl\("\\"."\);)h 105 624(as_wr\(")s 173(Exception)h 20(id)h 65(is)h 21(:)h 22("\);)h 105 674(sprintf\(s,"%)s -1(lu)h 20(\(=)h 21(%lX\)",ULONG\(E)h -1(X_ID\))h -1(,ULON)h -1(G\(EX_)h -1(ID\)\))h -1(;)h 20(as_wl\(s\);)h 105 724(as_wr\(")s 173(Exception)h 20(info)h 21(is)h 21(:)h 22("\);)h 105 774(sprintf\(s,"%)s -1(lu)h 20(\(=)h 21(%lX\)",ULONG\(E)h -1(X_INF)h -1(O\),UL)h -1(ONG\(E)h -1(X_IN)h -1(FO\)\);)h 19(as_wl\(s\);)h 105 824(as_bomb\("Abo)s -1(rting)h 19(program)h 20(after)h 21(exception)h 20(error."\);)h 83 874(})s 261 1206(expop)s 1633 1305(EX)s 15(CURR)h 83 1503(EXPORT)s 21(void)h 21(_expop)h 20(P_\(\(_ex_cx_t)h 19(*\)\);)h 83 1751(EXPORT)s 21(void)h 21(_expop)h 20(\(p_check\))h 83 1801(_ex_cx_t)s 20(*p_check;)h 83 1850({)s 83 1900(#if)s 21(_EX_FAST)h 105 1950(as_bomb\("_ex)s -1(rai:)h 19(This)h 21(function)h 20(should)h 21(not)h 21(be)h 22(called)h 20(with)h 21(_EX_FAST==TRU)h -1(E."\);)h 83 2000(#else)s 83 2299(#endif)s 83 2349(})s cmr10.300 sf 0 128(The)s 17(function)h 181(writes)h 17(out)h 17(a)h 17(description)h 18(of)h 16(the)h 18(most)h 16(recen)h -1(tly)h 18(raised)h 17(exception)h 18(and)h 17(then)h 18(b)h 1(om)h -1(bs)h 15(the)h 0 178(program.)s 16(This)h 14(function)h 14(is)h 14(used)h 14(b)h -1(y)h 140(.)h 333 276([67)s -1(])h 0 1206(The)s 13(function)h 149(p)h 1(ops)h 13(the)h 13(curren)h -1(t)h 14(exception)h 13(blo)h 1(c)h -1(k)h 12(from)h 11(the)h 13(con)h -1(text)h 13(stac)h -1(k.)h 18(Before)h 13(doing)h 12(this,)h 12(it)h 12(p)h 1(erforms)h 0 1256(a)s 16(few)h 17(c)h -1(hec)h -1(ks.)h 28(T)h -3(o)h 15(assist)h 18(it)h 16(with)h 16(its)h 17(c)h -1(hec)h -1(ks,)h 18(the)h 17(caller)h 17(m)h -1(ust)h 15(pass)h 17(a)h 17(p)h 1(oin)h -1(ter)h 16(to)h 17(the)h 17(curren)h -1(t)h 18(con)h -1(text)h 18(record)h 17(in)h 0 1305(the)s 15(\014rst)h 16(parameter.)h 20(This)h 15(can)h 14(alw)h -1(a)h -1(ys)h 14(b)h 1(e)h 15(done)h 15(b)h -1(y)h 15(the)h 15(caller)h 15(directly)h 15(\(without)h 14(referencing)h 179(\))h 14(b)h 1(ecause)h 0 1355(p)s 1(opping)h 13(is)h 14(only)h 13(supp)h 1(osed)h 15(to)h 14(tak)h -1(e)h 14(place)h 14(within)h 13(the)h 15(static)h 14(con)h -1(text)h 15(of)h 13(an)h 13(enclosing)h 14(exception)h 15(blo)h 1(c)h -1(k.)h 389 1454([68])s 297 1651([69])s 772 2050([61])s 1175 2099([70])s 773 2149([71])s 538 2199([72])s 395 2249([73])s 0 2522(The)s 15(\014rst)h 16(c)h -1(hec)h -1(k)h 16(test)h 16(is)h 14(to)h 15(mak)h -1(e)h 13(sure)h 16(that)h 15(the)h 16(con)h -1(text)h 15(ab)h 1(out)h 15(to)h 15(b)h 1(e)h 15(p)h 1(opp)h 1(ed)h 16(is)h 15(the)h 15(curren)h -1(t)h 16(con)h -1(text)h 16(|)h 14(the)h 16(one)h 0 2572(statically)s 13(enclosing)h 14(the)h 14(p)h 1(op)h 14(call.)h 1070 2670([70])s 954 2770(27)s 18 2 456 42 r 14 2 301 128 r 14 2 637 178 r 13 2 216 276 r 18 2 396 1120 r 14 2 248 1206 r 14 2 1620 1305 r 14 2 1680 1305 r 13 2 267 1454 r 13 2 176 1651 r 13 2 386 2050 r 13 2 460 2050 r 13 2 683 2050 r 27 @eop 28 @bop0 cmtt10.300 sf [<1C303F78FFF8F7E061C0> 16 5 -4 24 22] 126 dc 28 @bop1 cmsy10.300 sf 62 42(f)s 83 440(g)s 748 714(\021)s 62 764(f)s 83 1162(g)s 512 1436(\021)s 62 1486(f)s 83 1636(g)s 369 1860(\021)s 62 1910(f)s 612(g)h cmsl10.300 sf 0 714(Bom)s -1(b)h 12(if)h 14(curren)h -1(t)h 15(con)h -1(text)h 15(is)h 13(corrupted)h 0 1436(Zap)s 14(the)h 15(curren)h -1(t)h 15(con)h -1(text)h 0 1860(P)s -1(op)h 14(the)h 14(con)h -1(text)h cmr7.300 sf 0 490(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(69.)h 0 1212(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(69.)h 0 1685(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(69.)h 0 1959(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(69.)h cmr10.300 sf 0 565(The)s 12(second)h 12(c)h -1(hec)h -1(k)h 12(tests)h 12(the)h 12(curren)h -1(t)h 12(con)h -1(text)h 12(\(the)h 12(one)h 11(ab)h 1(out)h 11(to)h 11(b)h 1(e)h 12(p)h 1(opp)h 1(ed\))h 12(to)h 11(mak)h -1(e)h 9(sure)h 12(that)h 12(it)h 10(isn't)h 11(corrupted.)h 0 614(If)s 14(it)h 13(is,)h 13(then)h 15(the)h 14(program)h 13(should)h 13(b)h 1(e)h 15(b)h 1(om)h -1(b)h 1(ed.)h 668 714([71])s 0 1287(Before)s 17(p)h 1(opping)h 16(the)h 17(curren)h -1(t)h 17(con)h -1(text,)h 17(w)h -1(e)h 17(need)h 17(to)h 16(zap)h 16(its)h 16(magic)h 15(n)h -1(um)h -1(b)h 1(ers)h 16(so)h 16(that)h 16(they)h 17(don't)h 15(\015oat)h 16(around)h 16(in)h 0 1337(stac)s -1(k)h 13(mem)h -1(ory)h 11(where)h 13(they)h 13(migh)h -1(t)h 10(cause)h 13(some)h 12(future)h 13(magi)h -1(c)h 11(n)h -1(um)h -1(b)h 1(er)h 12(test)h 13(to)h 12(succeed)h 15(when)h 12(it)h 12(should)h 12(ha)h -1(v)h -1(e)h 12(failed.)h 433 1436([72])s 0 1760(Ha)s -1(ving)h 13(c)h -1(hec)h -1(k)h -1(ed)h 15(and)h 14(zapp)h 1(ed)h 15(the)h 14(con)h -1(text,)h 14(p)h 1(opping)h 13(it)h 14(is)h 14(easy!)h 290 1860([73])s 954 2770(28)s cmtt10.300 sf 83 91(if)s 21(\(p_curr)h 21(!=)h 21(p_check\))h 127 141({)s 148 191(if)s 22(\(p_curr)h 20(==)h 22(NULL\))h 214 241(as_bomb\("_ex)s -1(pop:)h 19(Context)h 21(stack)h 20(is)h 22(empty."\);)h 148 291(else)s 214 340(as_bomb\("_ex)s -1(pop:)h 19(Top)h 21(of)h 22(context)h 20(stack)h 21(is)h 21(not)h 21(the)h 22(current)h 20(context."\);)h 127 390(})s 83 814(if)s 21(\(\(p_curr->_ex_m)h -1(ag1)h 19(!=)h 22(_EX_MAG1\))h 20(||)h 21(\(p_curr->_ex_)h -1(mag2)h 19(!=)h 22(_EX_MAG2\)\))h 127 863({)s 148 913(as_wl\("_ex_rai:)s 19(Target)h 21(exception)h 20(context)h 20(has)h 21(been)h 21(corrupted.)h 20(This)h 21(could"\);)h 148 963(as_wl\(")s 195(be)h 21(because)h 21(an)h 21(exception)h 20(context)h 20(wasn't)h 21(popped,)h 20(or)h 22(it"\);)h 148 1013(as_wl\(")s 195(could)h 21(be)h 21(just)h 21(a)h 22(common)h 20(garden-variety)h 19(C)h 22(corruption)h 20(:-\)"\);)h 148 1063(as_bomb\("Aborti)s -1(ng)h 20(program)h 20(after)h 21(exception)h 20(error."\);)h 127 1112(})s 83 1536(p_curr->_ex_m)s -1(ag1)h 20(=)h 21(~_EX_MAG1;)h 83 1586(p_curr->_ex_m)s -1(ag2)h 20(=)h 21(~_EX_MAG2;)h 83 1910(_EX_CURR)s 20(=)h 22(p_curr->_ex)h -1(_prev)h -1(;)h 28 @eop 29 @bop0 cmbx10.518 sf [<0C0000380FC003F80FFFFFF80FFFFFF00FFFFFE00FFFFFC00FFFFF800FFFFF000FFFFC 000FFFF0000FFF00000F0000000F0000000F0000000F0000000F0000000F0000000F0000 000F0FF8000F7FFF000FFFFFC00FF01FE00F800FF00F0007F80E0007FC000003FE000003 FE000003FE000003FF000003FF1E0003FF7F8003FFFF8003FFFFC003FFFFC003FFFFC003 FFFF8003FEFF8003FE7F0007FC7C0007FC3C000FF81E001FF00FC07FE007FFFF8001FFFE 00003FE000> 32 46 -4 45 41] 53 dc [<3FFFFFFFFFFF003FFFFFFFFFFF003FFFFFFFFFFF003FE00FFC01FF007F000FFC003F80 7E000FFC001F807C000FFC000F8078000FFC00078078000FFC00078070000FFC00038070 000FFC00038070000FFC00038070000FFC000380E0000FFC0001C0E0000FFC0001C0E000 0FFC0001C0E0000FFC0001C000000FFC00000000000FFC00000000000FFC00000000000F FC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC 00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00 000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC0000 0000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC000000 00000FFC00000000000FFC00000000000FFC00000000000FFC000000007FFFFFFF800000 7FFFFFFF8000007FFFFFFF8000> 56 48 -3 47 57] 84 dc cmsl10.300 sf [<00F800038E000606000C03000C03001803803803803803803003807003807003807003 80700380E00700E00700E00700E00700E00700E00600E00E00C00E00C00E00C00C00C01C 00C0180060300060600030C0001F0000> 24 29 -4 27 21] 48 dc [<0018007003F00C7000700070007000E000E000E000E000E000E001C001C001C001C001 C001C003800380038003800380038007000780FFF8> 16 28 -4 27 21] 49 dc [<007E000183800201C00400E00400E00F00E00F00E01F00E01F00E00E00E00001E00001 C0000380000380000700000E00001C0000380000600000C0000180000300800600800801 001001003FFF007FFE00FFFE00> 24 28 -2 27 21] 50 dc [<007C000187000203800403800F03C00F03C00F03C00E0380000380000700000600000C 0000380003F000001C00000E00000E00000F00000F00000F00700F00F80F00F80F00F00E 00E01E00801C004038003070000FC000> 24 29 -3 27 21] 51 dc [<0000C0000180000380000380000780000B8000138000270000670000C7000087000107 00020700040E00080E00180E00100E00200E00400E00FFFFC0001C00001C00001C00001C 00001C00003800003C0003FF80> 24 28 -2 27 21] 52 dc [<0301C003FF8003FE0007FC0004000004000004000004000004000008000008F8000B0C 000C0E00080700080700000700000780000780000780700F00F00F00F00F00F00E00801E 00801C0040380040300030E0000F8000> 24 29 -3 27 21] 53 dc [<003E0000E1000180800303800607800C07801C070018000038000030000071F0007618 00780C00E80E00F00600F00600E00700E00700E00700E00E00C00E00C00E00C00E00C01C 00E0180060380060300030C0000F8000> 24 29 -4 27 21] 54 dc [<1000003FFFC03FFFC03FFF806001004002004004008008000008000010000020000040 0000C0000080000180000180000300000700000700000F00000E00000E00001E00001E00 001E00003C00003C00003C0000180000> 24 29 -5 27 21] 55 dc [<007C000183000201800601800C00C00C00C00C00C01C01801C01801E03000F86000FCC 0007F00003F80003FC000C7E00183F00300F00600700600300C00300C00300C00300C002 00C006006004006018003830000FC000> 24 29 -3 27 21] 56 dc [<00F8000304000606000C03001C03003803003803803003807003807003807003807003 80700780700700700F00300F0018170008270007CE00000E00000C00001C00601800F038 00F03000E0600080C0004380003E0000> 24 29 -4 27 21] 57 dc 29 @bop1 cmsy10.300 sf 391 560(\021)s 62 610(f)s cmbx10.518 sf 0 49(5)s 28(T)h -7(est)h 27(Program)h cmsl10.300 sf 0 560(T)s -3(est)h 14(program)h 13(\014le)h 83 659(Con\014guration)s 13(header)h 15(notice)h 83 1207(F)s -3(unction)h 14(sc01)h 83 1257(F)s -3(unction)h 14(sc02)h 83 1307(F)s -3(unction)h 14(sc03)h 83 1357(F)s -3(unction)h 14(sc04)h 83 1407(F)s -3(unction)h 14(sc05)h 83 1456(F)s -3(unction)h 14(sc06)h 83 1506(F)s -3(unction)h 14(sc07)h 83 1556(F)s -3(unction)h 14(sc08)h 83 1606(F)s -3(unction)h 14(sc09)h 83 1706(F)s -3(unction)h 14(fa01)h 83 1755(F)s -3(unction)h 14(fa02)h 83 1805(F)s -3(unction)h 14(fa03)h 83 1855(F)s -3(unction)h 14(fa04)h 83 1905(F)s -3(unction)h 14(fa05)h 83 1955(F)s -3(unction)h 14(fa06)h 83 2004(F)s -3(unction)h 14(fa07)h 83 2054(F)s -3(unction)h 14(fa08)h 83 2104(F)s -3(unction)h 14(fa09)h cmtt10.300 sf 1773 410(flag)s 83 759(#include)s 20("style.h")h 83 809(#include)s 20("except.h")h 83 859(#include)s 20("as.h")h 83 958(EX_LOCAL\(slot)s -1(h_ex,)h -1("Slo)h -1(th)h 20(exception"\);)h 83 1008(EX_LOCAL\(walr)s -1(us_ex)h -1(,"Wa)h -1(lrus)h 19(exception"\);)h 83 1108(GLOVAR)s 21(bool)h 21(flag;)h 83 2204(main\(\))s 83 2253({)s 105 2303(char)s 21(ch;)h 105 2403(printf\("Test)s 19(Program)h 20(for)h 22(the)h 21(EXCEPT)h 20(Package\\n"\);)h 105 2453(printf\("====)s -1(=====)h -1(====)h -1(=====)h -1(=====)h -1(=====)h -1(=====)h -1(==\\n")h -1(\);)h 105 2503(printf\("This)s 19(test)h 21(program)h 20(provides)h 21(a)h 21(number)h 21(of)h 21(different)h 20(tests.)h 21(Because\\n"\))h -1(;)h 105 2552(printf\("some)s 19(tests)h 21(provoke)h 20(the)h 21(package)h 21(to)h 21(bomb)h 21(on)h 21(purpose,)h 21(this)h 21(test\\n"\);)h 105 2602(printf\("prog)s -1(ram)h 20(must)h 20(be)h 22(run)h 21(a)h 22(number)h 20(of)h 22(times,)h 20(once)h 21(for)h 21(each)h 21(test.\\n"\);)h 105 2652(printf\("The)s 19(0)h 22(test)h 21(performs)h 20(a)h 22(group)h 20(of)h 22(tests)h 21(that)h 20(are)h 22(not)h 21(supposed)h 20(to\\n"\);)h cmr10.300 sf 0 136(This)s 11(section)h 11(pro)h -1(vides)h 11(a)h 10(test)h 12(program)h 9(whic)h -1(h)h 10(can)h 11(b)h 1(e)h 11(used)h 12(to)h 10(test)h 12(the)h 11(exceptions)h 12(pac)h -1(k)h -2(age.)h 17(The)h 11(program)h 9(pro)h -1(vides)h 0 186(nine)s 12(success)h 14(tests)h 13(and)h 11(nine)h 12(failure)h 11(tests.)h 19(The)h 12(success)h 14(tests)h 13(do)h 11(not)h 12(cause)h 13(the)h 12(program)h 10(to)h 12(terminate,)h 11(and)h 11(so)h 12(can)h 0 236(all)s 14(b)h 1(e)h 15(p)h 1(erformed)h 15(in)h 15(a)h 14(single)h 15(run.)h 21(Ho)h -1(w)h -1(ev)h -1(er,)h 16(eac)h -1(h)h 15(failure)h 14(test)h 16(causes)h 17(the)h 15(program)h 14(to)h 15(b)h 1(om)h -1(b)h 13(with)h 15(an)h 14(assertion)h 0 286(error,)s 13(and)h 12(so)h 12(the)h 12(failure)h 11(tests)h 14(m)h -1(ust)h 10(b)h 1(e)h 13(p)h 1(erformed)h 12(separately)h 12(as)h 12(nine)h 12(separate)h 13(in)h -1(v)h -1(o)h 1(cations)h 11(of)h 12(the)h 12(test)h 13(program.)h 0 336(A)s -1(t)h 14(the)h 14(end)h 15(of)h 13(this)h 14(testing,)h 14(the)h 14(user)h 15(can)h 14(ha)h -1(v)h -1(e)h 14(a)h 14(high)h 13(degree)h 15(of)h 14(con\014dence)h 15(that)h 14(the)h 15(pac)h -1(k)h -2(age)h 13(is)h 14(w)h -1(orking.)h 0 410(Eac)s -1(h)h 21(of)h 20(the)h 22(eigh)h -1(teen)h 21(tests)h 22(is)h 21(em)h -1(b)h 1(o)h 1(died)h 20(in)h 20(a)h 21(separate)h 22(function.)h 38(The)h 21(global)h 20(b)h 1(o)h 1(olean)h 20(v)h -2(ariable)h 128(is)h 20(a)h 0 460(miscellaneous)s 13(temp)h 1(orary)h 13(v)h -2(ariable)h 13(whic)h -1(h)h 13(is)h 14(usually)h 13(used)h 15(to)h 14(tell)h 13(if)h 13(an)h 14(exception)h 15(has)h 14(\014red.)h 313 560([74])s 590 659([4])s 336 1207([75])s 336 1257([76])s 336 1307([77])s 336 1357([78])s 336 1407([79])s 336 1456([80])s 336 1506([81])s 336 1556([82])s 336 1606([83])s 336 1706([84])s 336 1755([85])s 336 1805([86])s 336 1855([87])s 336 1905([88])s 336 1955([89])s 336 2004([90])s 336 2054([91])s 336 2104([92])s 954 2770(29)s 29 @eop 30 @bop0 30 @bop1 cmr10.300 sf 954 2770(30)s cmtt10.300 sf 105 42(printf\("fail)s -1(.)h 20(The)h 21(1..9)h 21(tests)h 21(each)h 21(perform)h 20(a)h 22(test)h 21(that)h 21(is)h 21(supposed)h 20(to\\n"\);)h 105 91(printf\("bomb)s 19(the)h 21(program)h 21(if)h 21(the)h 21(test)h 21(succeeds.)h 20(The)h 21(0)h 22(test)h 21(should)h 20(be)h 22(run\\n"\);)h 105 141(printf\("with)s 19(the)h 21(package)h 21(compiled)h 20(with)h 21(both)h 21(_EX_FAST==F)h -1(ALSE)h 19(and\\n"\);)h 105 191(printf\("_EX_)s -1(FAST=)h -1(=TRU)h -1(E.)h 20(The)h 21(1..9)h 21(tests)h 21(should)h 20(use)h 21(only)h 21(_EX_FAST==FALSE)h -1(.\\n"\))h -1(;)h 105 241(printf\("\\n"\))s -1(;)h 105 291(if)s 21(\(_EX_FAST\))h 105 340(printf\("Curr)s -1(ent)h 20(value)h 20(of)h 22(EX_FAST)h 20(==)h 21(TRUE.\\n"\);)h 105 390(else)s 105 440(printf\("Curr)s -1(ent)h 20(value)h 20(of)h 22(EX_FAST)h 20(==)h 21(FALSE.\\n"\);)h 105 490(printf\("\\n"\))s -1(;)h 105 540(printf\("Ente)s -1(r)h 20(0)h 22(for)h 21(success)h 20(tests,)h 21(or)h 21(1..9)h 21(for)h 21(one)h 21(of)h 22(nine)h 21(fail)h 21(tests>"\);)h 105 589(ch=getchar\(\))s -1(;)h 20(printf\("\\n"\))h -1(;)h 105 639(if)s 21(\(ch)h 21(==)h 22('0'\))h 148 689({)s 170 739(printf\("Succes)s -1(s)h 20(Tests\\n"\);)h 170 789(printf\("------)s -1(----)h -1(---\\n)h -1("\);)h 170 839(printf\("The)s 20(following)h 20(tests)h 20(\(sc01..sc09\))h 20(test)h 21(the)h 21(normal)h 20(features\\n"\);)h 170 888(printf\("the)s 20(exceptions)h 19(package.)h 21(You)h 21(should)h 20(see)h 21(nine)h 21(success)h 21(lines\\n"\);)h 170 938(printf\("appear)s 19(on)h 21(the)h 22(screen.)h 20(If)h 21(the)h 22(package)h 20(bombs)h 21(during)h 20(this)h 21(test,\\n"\);)h 170 988(printf\("then)s 20(something)h 19(is)h 22(wrong)h 21(and)h 21(should)h 20(be)h 22(fixed.\\n"\);)h 170 1038(printf\("\\n"\);)s 170 1088(sc01\(\);)s 170 1137(sc02\(\);)s 170 1187(sc03\(\);)s 170 1237(sc04\(\);)s 170 1287(sc05\(\);)s 170 1337(sc06\(\);)s 170 1386(sc07\(\);)s 170 1436(sc08\(\);)s 170 1486(sc09\(\);)s 170 1536(printf\("\\n"\);)s 170 1586(printf\("All)s 20(of)h 21(the)h 21(success)h 21(tests)h 20(SUCCEEDED.\\n"\))h -1(;)h 148 1636(})s 105 1685(else)s 148 1735({)s 170 1785(if)s 22(\(_EX_FAST\))h 214 1835({)s 236 1885(as_wl\("Erro)s -1(r)h 20(in)h 21(test)h 21(configuration.)h 19(An)h 22(attempt)h 20(was)h 21(made)h 21(to)h 21(perform"\);)h 236 1934(as_wl\("a)s 20(1..9)h 21(test)h 21(with)h 21(_EX_FAST==T)h -1(RUE.)h 19(This)h 21(does)h 21(not)h 21(make)h 21(sense)h 21(as"\);)h 236 1984(as_wl\("thes)s -1(e)h 20(tests)h 21(test)h 21(the)h 21(error)h 21(checking)h 20(capability)h 19(of)h 22(the)h 21(package"\);)h 236 2034(as_wl\("and)s 19(_EX_FAST=TRUE)h 19(has)h 22(all)h 21(error)h 21(checking)h 20(turned)h 20(off!"\);)h 236 2084(as_bomb\("Pl)s -1(ease)h 19(recompile)h 20(with)h 21(_EX_FAST==FAL)h -1(SE)h 20(and)h 21(try)h 21(again."\);)h 214 2134(})s 170 2183(switch)s 21(\(ch\))h 192 2233({)s 214 2283(case)s 21('1':)h 21(fa01\(\);)h 214 2333(case)s 21('2':)h 21(fa02\(\);)h 214 2383(case)s 21('3':)h 21(fa03\(\);)h 214 2433(case)s 21('4':)h 21(fa04\(\);)h 214 2482(case)s 21('5':)h 21(fa05\(\);)h 214 2532(case)s 21('6':)h 21(fa06\(\);)h 214 2582(case)s 21('7':)h 21(fa07\(\);)h 214 2632(case)s 21('8':)h 21(fa08\(\);)h 30 @eop 31 @bop0 cmbx10.432 sf [<003F800001FFF00007E0FC000FC07E001F803F001F803F003F001F803F001F807F001F C07F001FC07F001FC07F001FC0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001F E0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001F E07F001FC07F001FC07F001FC07F001FC03F001F803F001F801F803F001F803F000FC07E 0007E0FC0001FFF000003F8000> 32 39 -3 38 34] 48 dc cmtt10.300 sf [<7F0FE0FF8FF07F0FE01C07801C0F001C0E001C1C001C3C001C78001CF0001CE0001DF0 001FF0001FF8001F38001E1C001C1C001C0E001C0E001C07001C07001C03807F07E0FF8F F07F07E0> 24 25 0 24 22] 75 dc 31 @bop1 cmsy10.300 sf 83 340(g)s 332 726(\021)s 62 776(f)s 83 2221(g)s cmsl10.300 sf 0 726(F)s -3(unction)h 14(sc01)h cmbx10.432 sf 0 540(5.1)s 24(F)h -6(unction)h 23(sc01)h cmr7.300 sf 0 390(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(3.)h 0 2271(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(74.)h cmr10.300 sf 0 627(This)s 14(test)h 15(c)h -1(hec)h -1(ks)h 15(to)h 14(mak)h -1(e)h 12(sure)h 15(that)h 14(exception)h 15(blo)h 1(c)h -1(ks)h 14(op)h 1(erate)h 14(correctly)h 15(when)h 15(no)h 14(exceptions)h 15(are)h 14(raised.)h 253 726([75])s 954 2770(31)s cmtt10.300 sf 214 42(case)s 21('9':)h 21(fa09\(\);)h 214 91(default:)s 279 141(printf\("\\nCha)s -1(racte)h -1(r)h 20(entered)h 20(was)h 22(not)h 21(0..9.)h 20(Aborting...\\n"\))h -1(;)h 192 191(})s 170 241(})s 83 291(})s 83 826(LOCAL)s 21(void)h 21(sc01)h 21(P_\(\(void\)\);)h 83 876(LOCAL)s 21(void)h 21(sc01)h 21(\(\))h 83 926({)s 105 976(printf\("Test)s 19(SC01:)h 21(Exception)h 20(block)h 21(with)h 21(no)h 21(exceptions)h 20(raised.\\n"\))h -1(;)h 105 1075(/*)s 21(The)h 21(NULL)h 21(exception)h 20(block)h 21(should)h 21(be)h 21(OK.)h 21(*/)h 105 1125(EX_BEGIN)s 105 1175(EX_FORGET)s 105 1225(EX_END)s 105 1324(/*)s 21(Now)h 21(put)h 22(some)h 21(code)h 20(in)h 22(the)h 21(normal)h 21(section.)h 20(*/)h 105 1374(flag=FALSE;)s 105 1424(EX_BEGIN)s 170 1474(flag=TRUE;)s 105 1523(EX_FORGET)s 105 1573(EX_END)s 105 1623(as_cold\(flag)s -1(,"sc0)h -1(1:)h 20(First)h 20(flag)h 21(block)h 21(test)h 21(failed."\);)h 105 1723(/*)s 21(Make)h 21(sure)h 21(the)h 21(EX_OTHERS)h 20(branch)h 21(only)h 21(applies)h 20(to)h 21(exceptions.)h 20(*/)h 105 1773(flag=FALSE;)s 105 1822(EX_BEGIN)s 170 1872(flag=TRUE;)s 105 1922(EX_FORGET)s 170 1972(EX_OTHERS)s 236 2022(as_bomb\("sc)s -1(01:)h 19(Raise)h 21(failed."\);)h 105 2071(EX_END)s 105 2121(as_cold\(flag)s -1(,"sc0)h -1(1:)h 20(Second)h 20(flag)h 21(block)h 21(test)h 21(failed."\);)h 83 2171(})s 31 @eop 32 @bop0 32 @bop1 cmsy10.300 sf 332 224(\021)s 62 274(f)s 83 971(g)s 332 1347(\021)s 62 1397(f)s 83 2095(g)s 332 2471(\021)s 62 2521(f)s cmsl10.300 sf 0 224(F)s -3(unction)h 14(sc02)h 0 1347(F)s -3(unction)h 14(sc03)h 0 2471(F)s -3(unction)h 14(sc04)h cmbx10.432 sf 0 42(5.2)s 24(F)h -6(unction)h 23(sc02)h 0 1165(5.3)s 24(F)h -6(unction)h 23(sc03)h 0 2288(5.4)s 24(F)h -6(unction)h 23(sc04)h cmr7.300 sf 0 1020(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(74.)h 0 2144(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(74.)h cmr10.300 sf 0 127(This)s 12(test)h 14(tests)h 14(to)h 12(mak)h -1(e)h 11(sure)h 13(that)h 13(an)h 12(exception)h 13(raised)h 13(within)h 12(an)h 12(exception)h 13(blo)h 1(c)h -1(k)h 12(can)h 13(b)h 1(e)h 13(caugh)h -1(t)h 12(b)h -1(y)h 12(that)h 13(blo)h 1(c)h -1(k.)h 253 224([76])s 0 1250(This)s 14(test)h 15(tests)h 15(the)h 218(feature.)h 253 1347([77])s 0 2374(This)s 14(test)h 15(tests)h 15(nested)h 15(exception)h 15(blo)h 1(c)h -1(ks.)h 253 2471([78])s 954 2770(32)s cmtt10.300 sf 83 324(LOCAL)s 21(void)h 21(sc02)h 21(P_\(\(void\)\);)h 83 373(LOCAL)s 21(void)h 21(sc02)h 21(\(\))h 83 423({)s 105 473(printf\("Test)s 19(SC02:)h 21(Exception)h 20(caught)h 20(within)h 21(immediate)h 20(block.\\n"\);)h 105 523(flag)s 21(=)h 21(FALSE;)h 105 573(EX_BEGIN)s 170 622(EX_RAISE\(sloth)s -1(_ex\))h -1(;)h 170 672(as_bomb\("sc02:)s 19(Raise)h 21(failed."\);)h 105 722(EX_FORGET)s 170 772(EX_WHEN\(sloth_)s -1(ex\))h 19(flag=TRUE;)h 105 822(EX_END)s 105 872(as_cold\(flag)s -1(,"sc0)h -1(2:)h 20(Exception)h 20(was)h 21(not)h 21(caught)h 21(by)h 21(local)h 21(block."\);)h 83 921(})s 345 1250(EX)s 15(OTHERS)h 83 1447(LOCAL)s 21(void)h 21(sc03)h 21(P_\(\(void\)\);)h 83 1497(LOCAL)s 21(void)h 21(sc03)h 21(\(\))h 83 1547({)s 105 1596(printf\("Test)s 19(SC03:)h 21(Exception)h 20(is)h 21(caught)h 21(by)h 21(OTHERS)h 21(clause.\\n"\))h -1(;)h 105 1646(flag)s 21(=)h 21(FALSE;)h 105 1696(EX_BEGIN)s 170 1746(EX_RAISE\(sloth)s -1(_ex\))h -1(;)h 170 1796(as_bomb\("sc03:)s 19(Raise)h 21(failed."\);)h 105 1846(EX_FORGET)s 170 1895(EX_OTHERS)s 20(flag=TRUE;)h 105 1945(EX_END)s 105 1995(as_cold\(flag)s -1(,"sc0)h -1(3:)h 20(Exception)h 20(was)h 21(not)h 21(caught)h 21(by)h 21(EX_OTHERS)h 20(clause."\);)h 83 2045(})s 83 2570(LOCAL)s 21(void)h 21(sc04)h 21(P_\(\(void\)\);)h 83 2620(LOCAL)s 21(void)h 21(sc04)h 21(\(\))h 83 2670({)s 14 2 392 1250 r 32 @eop 33 @bop0 33 @bop1 cmsy10.300 sf 83 1984(g)s 332 2370(\021)s 62 2420(f)s cmsl10.300 sf 0 2370(F)s -3(unction)h 14(sc05)h cmbx10.432 sf 0 2183(5.5)s 24(F)h -6(unction)h 23(sc05)h cmr7.300 sf 0 2034(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(74.)h cmr10.300 sf 0 2271(This)s 14(test)h 15(tests)h 15(whether)h 219(can)h 14(success)h 1(fully)h 14(re-raise)h 15(an)h 14(exception.)h 253 2370([79])s 954 2770(33)s cmtt10.300 sf 105 42(printf\("Test)s 19(SC04:)h 21(Exception)h 20(is)h 21(caught)h 21(by)h 21(nested)h 21(exception)h 20(block.\\n"\);)h 105 141(/*)s 21(Try)h 21(a)h 22(simple)h 21(nested)h 20(handler.)h 20(*/)h 105 191(flag=FALSE;)s 105 241(EX_BEGIN)s 170 291(EX_BEGIN)s 236 340(EX_RAISE\(sl)s -1(oth_)h -1(ex\);)h 236 390(as_bomb\("sc)s -1(04:)h 19(Raise)h 21(failed)h 21(\(1\)."\);)h 170 440(EX_FORGET)s 236 490(EX_WHEN\(wal)s -1(rus_)h -1(ex\))h 301 540(as_bomb\("sc0)s -1(4:)h 20(Walrus)h 20(exception)h 20(caught)h 21(\(1\)."\);)h 170 589(EX_END)s 105 639(EX_FORGET)s 170 689(EX_WHEN\(sloth_)s -1(ex\))h 19(flag=TRUE;)h 170 739(EX_WHEN\(walrus)s -1(_ex\))h 19(as_bomb\("sc04:)h 19(Walrus)h 21(exception)h 20(caught)h 20(\(x\)."\);)h 105 789(EX_END)s 105 839(as_cold\(flag)s -1(,"sc0)h -1(4:)h 20(First)h 20(nested)h 21(test)h 21(failed."\);)h 105 938(/*)s 21(Test)h 21(a)h 22(re-raise.)h 20(*/)h 105 988(flag=FALSE;)s 105 1038(EX_BEGIN)s 170 1088(EX_BEGIN)s 236 1137(EX_RAISE\(sl)s -1(oth_)h -1(ex\);)h 236 1187(as_bomb\("sc)s -1(04:)h 19(Raise)h 21(failed)h 21(\(2\)."\);)h 170 1237(EX_FORGET)s 236 1287(EX_WHEN\(slo)s -1(th_e)h -1(x\))h 301 1337(EX_RAISE\(wal)s -1(rus_e)h -1(x\))h 301 1386(as_bomb\("sc0)s -1(4:)h 20(Raise)h 21(failed)h 20(\(3\)."\);)h 236 1436(EX_WHEN\(wal)s -1(rus_)h -1(ex\))h 301 1486(as_bomb\("sc0)s -1(4:)h 20(Walrus)h 20(exception)h 20(caught)h 21(\(2\)."\);)h 170 1536(EX_END)s 105 1586(EX_FORGET)s 170 1636(EX_WHEN\(sloth_)s -1(ex\))h 236 1685(as_bomb\("sc)s -1(04:)h 19(Sloth)h 21(exception)h 20(escaped."\);)h 170 1735(EX_WHEN\(walrus)s -1(_ex\))h 236 1785(flag=TRUE;)s 105 1835(EX_END)s 105 1885(as_cold\(flag)s -1(,"sc0)h -1(4:)h 20(Second)h 20(nested)h 21(test)h 21(failed."\);)h 83 1934(})s 432 2271(EX)s 16(OTHERS)h 83 2470(LOCAL)s 21(void)h 21(sc05)h 21(P_\(\(void\)\);)h 83 2520(LOCAL)s 21(void)h 21(sc05)h 21(\(\))h 83 2570({)s 105 2619(STAVAR)s 20(bool)h 21(flag2;)h 105 2669(printf\("Test)s 19(SC05:)h 21(Single)h 20(OTHERS)h 21(handler)h 20(reraises)h 20(current)h 21(exception.\\n)h -1("\);)h 14 2 479 2271 r 33 @eop 34 @bop0 34 @bop1 cmsy10.300 sf 83 1088(g)s 332 1399(\021)s 62 1449(f)s 83 2445(g)s cmr10.300 sf 253 1399([80])s 954 2770(34)s cmsl10.300 sf 0 1399(F)s -3(unction)h 14(sc06)h cmbx10.432 sf 0 1287(5.6)s 24(F)h -6(unction)h 23(sc06)h cmr7.300 sf 0 1137(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(74.)h 0 2495(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(74.)h cmtt10.300 sf 105 42(flag=FALSE;)s 105 91(flag2=FALSE;)s 105 141(EX_BEGIN)s 170 191(EX_BEGIN)s 236 241(EX_RAISE\(sl)s -1(oth_)h -1(ex\);)h 236 291(as_bomb\("sc)s -1(05:)h 19(Raise)h 21(failed)h 21(\(2\)."\);)h 170 340(EX_FORGET)s 236 390(EX_OTHERS)s 301 440(flag=TRUE;)s 301 490(EX_RAISE\(EX_)s -1(ID\);)h 301 540(as_bomb\("sc0)s -1(5:)h 20(Raise)h 21(failed)h 20(\(3\)."\);)h 170 589(EX_END)s 105 639(EX_FORGET)s 170 689(EX_WHEN\(sloth_)s -1(ex\))h 236 739(flag2=TRUE;)s 170 789(EX_OTHERS)s 236 839(as_bomb\("sc)s -1(05:)h 19(Exception)h 20(escaped."\);)h 105 888(EX_END)s 105 938(as_cold\(flag)s 19(,"sc05:)h 20(OTHERS)h 21(test)h 21(failed)h 21(\(1\)."\);)h 105 988(as_cold\(flag)s -1(2,"sc)h -1(05:)h 19(OTHERS)h 21(test)h 21(failed)h 21(\(2\)."\);)h 83 1038(})s 83 1499(LOCAL)s 21(void)h 21(sc06)h 21(P_\(\(void\)\);)h 83 1548(LOCAL)s 21(void)h 21(sc06)h 21(\(\))h 83 1598({)s 105 1648(printf\("Test)s 19(SC06:)h 21(Handlers)h 20(all)h 21(GOTO)h 21(same)h 21(code.\\n"\);)h 105 1698(flag=FALSE;)s 105 1748(EX_BEGIN)s 170 1797(EX_RAISE\(sloth)s -1(_ex\))h -1(;)h 170 1847(as_bomb\("sc06:)s 19(Raise)h 21(failed."\);)h 105 1897(EX_FORGET)s 170 1947(EX_WHEN\(sloth_)s -1(ex\))h 19(goto)h 21(handle;)h 170 1997(EX_WHEN\(walrus)s -1(_ex\))h 236 2046(as_bomb\("sc)s -1(06:)h 19(Walrus)h 21(exception)h 20(went)h 21(off."\);)h 236 2096(handle:)s 236 2146(flag=TRUE;)s 170 2196(EX_OTHERS)s 236 2246(as_bomb\("sc)s -1(06:)h 19(Exception)h 20(escaped)h 21(to)h 21(OTHERS."\);)h 105 2296(EX_END)s 105 2345(as_cold\(flag)s -1(,"sc0)h -1(6:)h 20(GOTO)h 21(test)h 21(failed."\);)h 83 2395(})s 34 @eop 35 @bop0 35 @bop1 cmsy10.300 sf 332 224(\021)s 62 274(f)s 83 672(g)s 332 1048(\021)s 62 1098(f)s 83 1447(g)s 332 1823(\021)s 62 1873(f)s cmsl10.300 sf 0 224(F)s -3(unction)h 14(sc07)h 0 1048(F)s -3(unction)h 14(sc08)h 0 1823(F)s -3(unction)h 14(sc09)h cmbx10.432 sf 0 42(5.7)s 24(F)h -6(unction)h 23(sc07)h 0 866(5.8)s 24(F)h -6(unction)h 23(sc08)h 0 1641(5.9)s 24(F)h -6(unction)h 23(sc09)h cmr7.300 sf 0 722(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(74.)h 0 1496(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(74.)h cmr10.300 sf 0 127(This)s 14(test)h 15(simply)h 12(c)h -1(hec)h -1(ks)h 15(that)h 14(EX)h 15(INF)h -1(O)h 14(can)h 14(b)h 1(e)h 15(written)h 14(to)h 14(and)h 14(read)h 14(from.)h 253 224([81])s 0 951(This)s 14(test)h 15(simply)h 12(c)h -1(hec)h -1(ks)h 15(that)h 14(the)h 153(function)h 13(is)h 14(w)h -1(orking.)h 253 1048([82])s 0 1726(T)s -3(est)h 14(the)h 15(legitim)h -1(ate)h 13(use)h 14(of)h 139(.)h 253 1823([83])s 954 2770(35)s cmtt10.300 sf 83 324(LOCAL)s 21(void)h 21(sc07)h 21(P_\(\(void\)\);)h 83 373(LOCAL)s 21(void)h 21(sc07)h 21(\(\))h 83 423({)s 105 473(printf\("Test)s 19(SC07:)h 21(Exercise)h 20(EX_INFO.\\n"\);)h 105 523(EX_INFO)s 20(=)h 22(3;)h 105 573(as_cold\(EX_I)s -1(NFO)h 20(==)h 21(3,"sc07:)h 20(EX_INFO)h 20(test)h 21(failed."\);)h 83 622(})s 598 951(ex)s 15(str)h 83 1148(LOCAL)s 21(void)h 21(sc08)h 21(P_\(\(void\)\);)h 83 1198(LOCAL)s 21(void)h 21(sc08)h 21(\(\))h 83 1248({)s 105 1298(printf\("Test)s 19(SC08:)h 21(Exercise)h 20(ex_str.\\n"\);)h 105 1347(as_cold\(ex_s)s -1(tr\(sl)h -1(oth_)h -1(ex\))h 20(==)h 21(sloth_ex,"sc0)h -1(8:)h 20(Failed."\);)h 83 1397(})s 476 1726(EX)s 15(POP)h 83 1923(LOCAL)s 21(void)h 21(sc09)h 21(P_\(\(void\)\);)h 83 1973(LOCAL)s 21(void)h 21(sc09)h 21(\(\))h 83 2022({)s 105 2072(printf\("Test)s 19(SC09:)h 21(Test)h 21(EX_POP.\\n"\);)h 105 2122(flag=FALSE;)s 105 2172(EX_BEGIN)s 170 2222(EX_BEGIN)s 236 2271(EX_POP;)s 20(goto)h 21(finish;)h 170 2321(EX_FORGET)s 236 2371(EX_WHEN\(slo)s -1(th_e)h -1(x\))h 20(as_bomb\("sc0)h -1(9:)h 20(Inner)h 21(catcher)h 20(caught)h 20(the)h 22(sloth."\);)h 170 2421(EX_END)s 170 2471(finish:)s 21(EX_RAISE\(s)h -1(loth_)h -1(ex\);)h 105 2521(EX_FORGET)s 170 2570(EX_WHEN\(sloth_)s -1(ex\))h 19(flag=TRUE;)h 105 2620(EX_END)s 105 2670(as_cold\(flag)s -1(,"sc0)h -1(9:)h 20(Sloth)h 20(exception)h 20(failed)h 21(to)h 21(work."\);)h 13 2 588 127 r 14 2 645 951 r 14 2 523 1726 r 35 @eop 36 @bop0 36 @bop1 cmsy10.300 sf 83 141(g)s 330 527(\021)s 62 577(f)s 83 1274(g)s 330 1660(\021)s 62 1710(f)s 83 2607(g)s cmsl10.300 sf 0 527(F)s -3(unction)h 14(fa01)h 0 1660(F)s -3(unction)h 14(fa02)h cmbx10.432 sf 0 340(5.10)s 24(F)h -6(unction)h 23(fa01)h 0 1474(5.11)s 24(F)h -6(unction)h 23(fa02)h cmr10.300 sf 0 428(This)s 14(test)h 15(tests)h 15(that)h 14(an)h 14(unhandled)h 14(exception)h 14(will)h 13(b)h 1(e)h 14(prop)h 1(erly)h 14(caugh)h -1(t.)h 253 527([84])s 0 1561(This)s 14(test)h 15(tests)h 15(t)h -1(w)h -1(o)h 13(calls)h 14(to)h 139(.)h 253 1660([85])s 954 2770(36)s cmr7.300 sf 0 191(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(74.)h 0 1324(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(74.)h 0 2657(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(74.)h cmtt10.300 sf 105 42(as_cold\(_EX_)s -1(CURR)h 19(==)h 22(NULL,"sc09:)h 19(EX_POP)h 21(failed)h 20(to)h 22(pop)h 21(correctly."\))h -1(;)h 83 91(})s 83 627(LOCAL)s 21(void)h 21(fa01)h 21(P_\(\(void\)\);)h 83 677(LOCAL)s 21(void)h 21(fa01)h 21(\(\))h 83 726({)s 105 776(printf\("Test)s 19(FA01:)h 21(Unhandled)h 20(Exception\\n")h -1(\);)h 105 826(printf\("----)s -1(-----)h -1(----)h -1(-----)h -1(-----)h -1(-----)h -1(--\\n")h -1(\);)h 105 876(printf\("This)s 19(test)h 21(raises)h 21(the)h 21(sloth)h 21(exception)h 20(but)h 21(doesn't)h 20(handle)h 21(it.\\n"\);)h 105 926(printf\("The)s 19(result)h 21(should)h 20(be)h 22(an)h 21(\\"unhandled)h 20(exception\\")h 19(bomb)h 21(specifying\\n"\))h -1(;)h 105 976(printf\("the)s 19(sloth)h 21(exception.)h 20(Here)h 21(we)h 21(go...\\n"\);)h 105 1025(printf\("\\n"\))s -1(;)h 105 1075(EX_RAISE\(slo)s -1(th_ex)h -1(\);)h 105 1125(as_wl)s 42(\("FA01)h 21(FAILED:)h 20(the)h 21(exception)h 20(package)h 21(did)h 21(not)h 21(catch)h 21(the\\n"\);)h 105 1175(as_bomb\("unh)s -1(andle)h -1(d)h 20(sloth)h 21(exception.\\)h -1(n"\);)h 83 1225(})s 495 1561(EX)s 15(POP)h 83 1760(LOCAL)s 21(void)h 21(fa02)h 21(P_\(\(void\)\);)h 83 1810(LOCAL)s 21(void)h 21(fa02)h 21(\(\))h 83 1860({)s 105 1910(printf\("Test)s 19(FA02:)h 21(Double)h 20(EX_POP\\n"\);)h 105 1959(printf\("----)s -1(-----)h -1(----)h -1(-----)h -1(-----)h -1(-\\n"\))h -1(;)h 105 2009(printf\("This)s 19(test)h 21(executes)h 20(two)h 21(calls)h 21(to)h 22(EX_POP)h 20(within)h 21(the)h 21(normal)h 20(code)h 21(of\\n"\);)h 105 2059(printf\("an)s 20(exception)h 19(block.)h 21(The)h 21(second)h 21(one)h 21(should)h 20(cause)h 21(a\\n"\);)h 105 2109(printf\("\\"co)s -1(ntext)h 19(stack)h 21(is)h 21(empty\\")h 21(bomb.)h 20(Here)h 21(we)h 22(go...\\n"\);)h 105 2159(printf\("\\n"\))s -1(;)h 105 2208(EX_BEGIN)s 170 2258(EX_POP;)s 170 2308(EX_POP;)s 170 2358(as_bomb\("FA02)s 19(FAILED:)h 21(Second)h 20(EX_POP)h 21(did)h 21(not)h 21(cause)h 21(bomb)h 21(\(1\)."\);)h 105 2408(EX_FORGET)s 105 2457(EX_END)s 105 2507(as_bomb\("FA0)s -1(2)h 20(FAILED:)h 20(Second)h 21(EX_POP)h 20(did)h 22(not)h 21(cause)h 20(bomb)h 21(\(2\)."\);)h 83 2557(})s 14 2 542 1561 r 36 @eop 37 @bop0 37 @bop1 cmsy10.300 sf 330 228(\021)s 62 278(f)s 83 1075(g)s 330 1461(\021)s 62 1511(f)s 83 2607(g)s cmsl10.300 sf 0 228(F)s -3(unction)h 14(fa03)h 0 1461(F)s -3(unction)h 14(fa04)h cmbx10.432 sf 0 42(5.12)s 24(F)h -6(unction)h 23(fa03)h 0 1274(5.13)s 24(F)h -6(unction)h 23(fa04)h cmr7.300 sf 0 1125(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(74.)h 0 2657(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(74.)h cmr10.300 sf 0 129(This)s 14(test)h 15(tests)h 15(a)h 14(single)h 13(call)h 13(to)h 153(follo)h -1(w)h -2(ed)h 13(b)h -1(y)h 13(a)h 14(normal)h 12(termination)h 12(of)h 13(the)h 15(normal)h 12(co)h 1(de.)h 253 228([86])s 0 1362(This)s 14(test)h 15(c)h -1(hec)h -1(ks)h 15(to)h 14(mak)h -1(e)h 12(sure)h 15(that)h 14(a)h 14(con)h -1(text)h 14(can)h 14(detect)h 16(when)h 14(it)h 14(is)h 13(p)h 1(opping)h 14(the)h 14(wrong)h 14(con)h -1(text.)h 253 1461([87])s 954 2770(37)s cmtt10.300 sf 550 129(EX)s 15(POP)h 83 328(LOCAL)s 21(void)h 21(fa03)h 21(P_\(\(void\)\);)h 83 378(LOCAL)s 21(void)h 21(fa03)h 21(\(\))h 83 428({)s 105 477(printf\("Test)s 19(FA03:)h 21(EX_POP)h 20(Followed)h 21(by)h 21(Normal)h 21(Terminatio)h -1(n\\n"\))h -1(;)h 105 527(printf\("----)s -1(-----)h -1(----)h -1(-----)h -1(-----)h -1(-----)h -1(-----)h -1(-----)h -1(----)h -1(-----)h -1(-\\n"\))h -1(;)h 105 577(printf\("This)s 19(test)h 21(executes)h 20(a)h 22(call)h 21(to)h 21(EX_POP)h 21(then)h 21(falls)h 20(through)h 21(to)h 21(the\\n"\);)h 105 627(printf\("end)s 19(of)h 22(the)h 21(normal)h 20(code)h 21(of)h 22(the)h 21(exception)h 20(block.)h 20(The)h 22(result)h 20(should\\n"\);)h 105 677(printf\("be)s 20(a)h 21(\\"context)h 20(stack)h 21(is)h 21(empty\\")h 21(bomb.)h 20(Here)h 21(we)h 22(go...\\n"\);)h 105 726(printf\("\\n"\))s -1(;)h 105 776(EX_BEGIN)s 170 826(EX_POP;)s 105 876(EX_FORGET)s 105 926(EX_END)s 105 976(as_bomb\("FA0)s -1(3)h 20(FAILED:)h 20(Fallthough)h 20(after)h 21(EX_POP)h 20(did)h 21(not)h 22(cause)h 20(bomb."\);)h 83 1025(})s 83 1561(LOCAL)s 21(void)h 21(fa04)h 21(P_\(\(void\)\);)h 83 1611(LOCAL)s 21(void)h 21(fa04)h 21(\(\))h 83 1660({)s 105 1710(printf\("Test)s 19(FA04:)h 21(Exit)h 21(a)h 21(block)h 21(without)h 21(EX_POPing\\)h -1(n"\);)h 105 1760(printf\("----)s -1(-----)h -1(----)h -1(-----)h -1(-----)h -1(-----)h -1(-----)h -1(-----)h -1(---\\)h -1(n"\);)h 105 1810(printf\("This)s 19(test)h 21(exits)h 21(an)h 21(exception)h 20(block)h 21(using)h 21(a)h 21(goto)h 21(without)h 21(first\\n"\);)h 105 1860(printf\("EX_P)s -1(OPing)h -1(.)h 20(The)h 21(exception)h 20(block)h 21(is)h 21(nested)h 21(within)h 20(another,)h 20(and)h 22(this\\n"\);)h 105 1910(printf\("test)s 19(is)h 22(to)h 21(make)h 21(sure)h 21(that)h 21(the)h 21(outer)h 21(block)h 20(detects)h 21(that)h 21(it)h 21(is\\n"\);)h 105 1959(printf\("popp)s -1(ing)h 20(the)h 21(wrong)h 20(context.)h 21(The)h 21(result)h 20(should)h 21(be)h 21(a\\n"\);)h 105 2009(printf\("\\"no)s -1(t)h 20(current)h 20(context\\")h 20(bomb.)h 21(Here)h 21(we)h 21(go...\\n"\);)h 105 2059(printf\("\\n"\))s -1(;)h 105 2109(EX_BEGIN)s 170 2159(EX_BEGIN)s 236 2208(goto)s 21(there;)h 170 2258(EX_FORGET)s 170 2308(EX_END)s 170 2358(there:)s 105 2408(EX_FORGET)s 105 2457(EX_END)s 105 2507(as_bomb\("FA0)s -1(4)h 20(FAILED:)h 20(Outer)h 21(block)h 21(FAILED)h 20(to)h 22(detect)h 20(stack)h 21(misalignment.)h -1("\);)h 83 2557(})s 14 2 597 129 r 37 @eop 38 @bop0 38 @bop1 cmsy10.300 sf 330 228(\021)s 62 278(f)s 83 1822(g)s 330 2258(\021)s 62 2308(f)s cmsl10.300 sf 0 228(F)s -3(unction)h 14(fa05)h 0 2258(F)s -3(unction)h 14(fa06)h cmr7.300 sf 0 1872(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(74.)h cmbx10.432 sf 0 42(5.14)s 24(F)h -6(unction)h 23(fa05)h 0 2022(5.15)s 24(F)h -6(unction)h 23(fa06)h cmr10.300 sf 0 129(This)s 14(test)h 15(tests)h 15(for)h 14(the)h 14(detection)h 15(of)h 13(an)h 14(unp)h 1(opp)h 1(ed)h 15(in)h -1(v)h -2(ali)h -1(d)h 12(stac)h -1(k)h 15(con)h -1(text.)h 253 228([88])s 0 2109(This)s 13(test)h 14(is)h 13(iden)h -1(tical)h 12(to)h 13(the)h 14(previous)h 14(one)h 13(except)h 14(that)h 13(the)h 14(test)h 14(is)h 13(made)h 12(at)h 13(the)h 14(p)h 1(oin)h -1(t)h 12(of)h 13(exit)h 13(of)h 12(the)h 14(outer)h 14(blo)h 1(c)h -1(k,)h 0 2159(not)s 14(at)h 14(the)h 14(p)h 1(oin)h -1(t)h 13(of)h 14(raising)h 13(an)h 13(exception.)h 253 2258([89])s 954 2770(38)s cmtt10.300 sf 83 328(LOCAL)s 21(void)h 21(fa05_x)h 20(P_\(\(void\)\);)h 83 378(LOCAL)s 21(void)h 21(fa05_x)h 20(\(\))h 83 428({)s 105 477(EX_BEGIN)s 170 527(return;)s 105 577(EX_FORGET)s 105 627(EX_END)s 83 677(})s 83 776(LOCAL)s 21(void)h 21(fa05)h 21(P_\(\(void\)\);)h 83 826(LOCAL)s 21(void)h 21(fa05)h 21(\(\))h 83 876({)s 105 926(printf\("Test)s 19(FA05:)h 21(Target)h 20(Context)h 21(Does)h 21(Not)h 21(Exist\\n"\);)h 105 976(printf\("----)s -1(-----)h -1(----)h -1(-----)h -1(-----)h -1(-----)h -1(-----)h -1(-----)h -1(--\\n)h -1("\);)h 105 1025(printf\("This)s 19(test)h 21(exits)h 21(an)h 21(exception)h 20(block)h 21(from)h 21(within)h 20(a)h 22(function)h 20(using\\n"\);)h 105 1075(printf\("a)s 20(return)h 20(statement.)h 20(Thus,)h 21(the)h 21(context)h 20(remains)h 21(stacked)h 20(even)h 21(though\\n"\);)h 105 1125(printf\("the)s 19(enclosing)h 20(C)h 22(block)h 21(has)h 21(terminated.)h 19(This)h 21(test)h 21(checks)h 21(to)h 21(see\\n"\);)h 105 1175(printf\("whet)s -1(her)h 20(this)h 20(problem)h 21(is)h 21(detected)h 20(next)h 21(time)h 21(an)h 22(exception)h 20(is)h 21(raised.\\n"\);)h 105 1225(printf\("The)s 19(result)h 21(should)h 20(be)h 22(an)h 21(illegitimate)h 20(context)h 20(error.)h 20(Here)h 21(we)h 22(go...\\n"\);)h 105 1274(printf\("\\n"\))s -1(;)h 105 1324(EX_BEGIN)s 170 1374(fa05_x\(\);)s 170 1424(EX_RAISE\(sloth)s -1(_ex\))h -1(;)h 170 1474(as_bomb\("FA05)s 19(FAILED:)h 21(Failed)h 20(to)h 22(raise)h 20(sloth."\);)h 105 1523(EX_FORGET)s 170 1573(EX_WHEN\(sloth_)s -1(ex\))h 236 1623(as_bomb\("FA)s -1(05)h 20(FAILED:)h 20(Sloth)h 21(exception)h 20(was)h 21(raised."\);)h 105 1673(EX_END)s 105 1723(as_bomb\("FA0)s -1(5)h 20(FAILED:)h 20(Costruct)h 20(terminated)h 20(normally)h 20(-)h 22(it)h 21(shouldn't)h 20(have."\);)h 83 1773(})s 83 2358(LOCAL)s 21(void)h 21(fa06)h 21(P_\(\(void\)\);)h 83 2408(LOCAL)s 21(void)h 21(fa06)h 21(\(\))h 83 2457({)s 105 2507(printf\("Test)s 19(FA06:)h 21(Target)h 20(Context)h 21(Does)h 21(Not)h 21(Exist)h 21(\(Fallthroug)h -1(h\)\\n")h -1(\);)h 105 2557(printf\("----)s -1(-----)h -1(----)h -1(-----)h -1(-----)h -1(-----)h -1(-----)h -1(-----)h -1(----)h -1(-----)h -1(-----)h -1(--\\n")h -1(\);)h 105 2607(printf\("This)s 19(test)h 21(is)h 21(identical)h 20(to)h 22(test)h 21(FA05)h 21(except)h 20(that)h 21(it)h 22(does)h 21(not\\n"\);)h 105 2657(printf\("rais)s -1(e)h 20(an)h 21(exception)h 20(in)h 22(the)h 21(outer)h 21(block.)h 20(The)h 21(result)h 21(should)h 20(be)h 22(a\\n"\);)h 38 @eop 39 @bop0 39 @bop1 cmsy10.300 sf 83 440(g)s 330 751(\021)s 62 801(f)s 83 1100(g)s 330 1411(\021)s 62 1461(f)s 83 1760(g)s 330 2071(\021)s 62 2121(f)s 83 2420(g)s cmr10.300 sf 253 751([90])s 253 1411([91])s 253 2071([92])s 954 2770(39)s cmsl10.300 sf 0 751(F)s -3(unction)h 14(fa07)h 0 1411(F)s -3(unction)h 14(fa08)h 0 2071(F)s -3(unction)h 14(fa09)h cmbx10.432 sf 0 639(5.16)s 24(F)h -6(unction)h 23(fa07)h 0 1299(5.17)s 24(F)h -6(unction)h 23(fa08)h 0 1959(5.18)s 24(F)h -6(unction)h 23(fa09)h cmr7.300 sf 0 490(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(74.)h 0 1150(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(74.)h 0 1810(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(74.)h 0 2470(This)s 12(macro)h 10(is)h 12(in)h -1(v)h -1(ok)h -1(ed)h 13(in)h 11(de\014nition)h 13(74.)h cmtt10.300 sf 105 42(printf\("\\"no)s -1(t)h 20(current)h 20(context\\")h 20(error.)h 21(Here)h 21(we)h 21(go...\\n"\);)h 105 91(printf\("\\n"\))s -1(;)h 105 141(EX_BEGIN)s 170 191(fa05_x\(\);)s 105 241(EX_FORGET)s 105 291(EX_END)s 105 340(as_bomb\("FA0)s -1(6)h 20(FAILED:)h 20(Costruct)h 20(terminated)h 20(normally)h 20(-)h 22(it)h 21(shouldn't)h 20(have."\);)h 83 390(})s 83 851(LOCAL)s 21(void)h 21(fa07)h 21(P_\(\(void\)\);)h 83 901(LOCAL)s 21(void)h 21(fa07)h 21(\(\))h 83 951({)s 105 1000(as_bomb\("Tes)s -1(t)h 20(FA07:)h 21(Test)h 21(FA06)h 21(is)h 21(the)h 21(last)h 21(test."\);)h 83 1050(})s 83 1511(LOCAL)s 21(void)h 21(fa08)h 21(P_\(\(void\)\);)h 83 1561(LOCAL)s 21(void)h 21(fa08)h 21(\(\))h 83 1611({)s 105 1660(as_bomb\("Tes)s -1(t)h 20(FA08:)h 21(Test)h 21(FA06)h 21(is)h 21(the)h 21(last)h 21(test."\);)h 83 1710(})s 83 2171(LOCAL)s 21(void)h 21(fa09)h 21(P_\(\(void\)\);)h 83 2221(LOCAL)s 21(void)h 21(fa09)h 21(\(\))h 83 2271({)s 105 2320(as_bomb\("Tes)s -1(t)h 20(FA09:)h 21(Test)h 21(FA06)h 21(is)h 21(the)h 21(last)h 21(test."\);)h 83 2370(})s 39 @eop 40 @bop0 cmbx10.518 sf [<00007F80000007FFF000001FC07800007F001C0000FE001E0001FC007E0003F800FF00 07F001FF000FF001FF001FE001FF001FE001FF003FE000FE003FE0007C007FC00000007F C00000007FC00000007FC0000000FFC3FF8000FFC7FFE000FFCFBFF000FFDC03FC00FFF8 03FE00FFF001FF00FFF000FF00FFE000FF80FFE000FF80FFE000FFC0FFC000FFC0FFC000 FFC0FFC000FFC0FFC000FFC07FC000FFC07FC000FFC07FC000FFC07FC000FFC03FC000FF C03FC000FF801FE000FF801FE000FF000FE001FF000FF001FE0007F803FC0001FC0FF800 00FFFFE000003FFF80000007FC0000> 40 46 -3 45 41] 54 dc [ 56 49 -2 48 63] 68 dc [ 64 49 -2 48 65] 78 dc cmti10.300 sf [<01FFC0003C0000380000380000380000380000700000700000700000700000E00000E0 0000E00000E00001C00001C00001C00001C0000380000380000380000380000700000700 000700000700000F0000FFE000> 24 28 -2 27 16] 73 dc [<00000300000700000E00000C00001C0000180000380000300000700000E00000C00001 C0000180000380000300000700000600000E00001C000018000038000030000070000060 0000E00000C00001C0000380000300000700000600000E00000C00001C00001800003800 00700000600000E00000C00000C00000> 24 41 -1 30 21] 47 dc 40 @bop1 cmbx10.518 sf 0 50(6)s 28(Design)h 27(Notes)h cmtt10.300 sf 1247 423(setjmp)s 99(longjmp)h 256 722(jmp)s 15(buf)h 132 2030(ex)s 15(raise)h cmti10.300 sf 0 2154(Inte)s -2(ger/pr)h -2(epr)h -2(o)h -2(c)h -2(essor)h 12(c)h -2(onstant:)h cmbx10.432 sf 0 336(6.1)s 24(Arc)h -2(hitect)h -1(ural)h 21(Discussion)h 0 1893(6.2)s 24(Exception)h 22(Iden)h -2(tit)h -2(y)h cmr10.300 sf 0 137(This)s 13(section)h 13(con)h -1(tains)h 13(a)h 12(detailed)h 13(design)h 13(discussion)h 13(of)h 12(particular)h 12(asp)h 1(ects)h 15(of)h 12(this)h 13(pac)h -1(k)h -2(age.)h 17(Inserting)h 13(these)h 14(notes)h 0 187(in)s -1(to)h 13(the)h 15(impl)h -1(em)h -1(en)h -1(tation)h 12(section)h 15(w)h -1(ould)h 13(ha)h -1(v)h -1(e)h 13(cluttered)h 16(it)h 13(up)h 14(to)h 1(o)h 14(m)h -1(uc)h -1(h.)h 0 423(The)s 17(basic)h 17(engine)h 18(for)h 16(exceptions)h 18(is)h 17(pro)h -1(vided)h 17(b)h -1(y)h 17(the)h 17(ANSI)h 18(standard)h 165(and)h 186(primitiv)h -2(es)h 16(whic)h -1(h)h 0 473(pro)s -1(vide)h 18(simple)h 16(non-lo)h 1(cal)h 17(jumps.)h 29(The)h 19(c)h -1(hallenge)h 18(is)h 18(organizing)h 16(them)h 18(in)h -1(to)h 17(an)h 18(exception)h 19(facilit)h -1(y)h -4(.)h 29(T)h -3(o)h 17(see)h 19(the)h 0 523(problems)s 13(in)h -1(v)h -1(olv)h -1(ed)h 12(in)h 13(doing)h 13(this,)h 14(w)h -1(e)h 13(need)h 15(only)h 13(fo)h 1(cus)h 14(on)h 14(an)h 13(executing)h 15(program)h 12(at)h 13(the)h 15(time)h 12(that)h 14(an)h 13(exception)h 0 573(is)s 14(raised.)h 20(A)h -1(t)h 15(this)h 14(time,)h 13(the)h 15(exceptions)h 15(pac)h -1(k)h -2(age)h 14(m)h -1(ust)h 14(lo)h 1(cate)h 14(the)h 15(closest)h 16(handler)h 14(for)h 14(the)h 15(particular)h 15(exception.)h 0 623(F)s -3(rom)h 11(this,)h 13(t)h -1(w)h -1(o)h 12(things)h 13(b)h 1(ecome)h 13(imm)h -2(ediately)h 11(clear:)h 18(1\))h 12(that)h 13(the)h 14(exceptions)h 14(pac)h -1(k)h -2(age)h 12(is)h 13(going)h 12(to)h 12(ha)h -1(v)h -1(e)h 13(to)h 13(p)h 1(erform)h 0 672(\\w)s -1(ork")h 12(whenev)h -1(er)h 15(an)h 13(exception)h 14(blo)h 1(c)h -1(k)h 13(is)h 13(encoun)h -1(tered)h 15(as)h 13(w)h -1(ell)h 13(as)h 13(whenev)h -1(er)h 15(an)h 13(exception)h 14(is)h 13(raised,)h 13(2\))h 13(some)h 12(sort)h 0 722(of)s 13(stac)h -1(king)h 14(of)h 174(con)h -1(texts)h 14(is)h 14(required.)h 0 797(This)s 14(reasoning)h 14(suggests)h 15(t)h -1(w)h -1(o)h 13(organizations:)h 0 872(1\))s 15(Main)h -1(tain)h 14(a)h 16(stac)h -1(k)h 15(for)h 15(eac)h -1(h)h 16(exception.)h 24(Whenev)h -1(er)h 16(an)h 16(exception)h 16(blo)h 1(c)h -1(k)h 15(is)h 15(en)h -1(tered,)h 17(push)h 16(all)h 14(the)h 16(handlers)h 16(for)h 0 922(that)s 14(blo)h 1(c)h -1(k)h 14(on)h 15(their)h 14(resp)h 1(ec)h 1(tiv)h -1(e)h 16(stac)h -1(ks.)h 20(P)h -1(op)h 14(them)h 14(when)h 15(exiting)h 13(the)h 15(handler.)h 20(If)h 14(an)h 14(exception)h 15(is)h 15(raised,)h 14(simply)h 0 971(lo)s 1(ok)h 13(on)h 14(the)h 14(top)h 14(of)h 13(its)h 14(stac)h -1(k.)h 0 1046(2\))s 14(Main)h -1(tain)h 13(a)h 15(stac)h -1(k)h 15(of)h 13(exception)h 16(blo)h 1(c)h -1(ks.)h 19(If)h 15(an)h 14(exception)h 15(is)h 14(raised,)h 15(searc)h -1(h)h 15(eac)h -1(h)h 15(blo)h 1(c)h -1(k)h 15(in)h 14(turn)h 15(for)h 14(a)h 14(matc)h -1(hing)h 0 1096(handler.)s 0 1171(Of)s 13(these)h 15(t)h -1(w)h -1(o)h 14(organizations,)h 12(the)h 14(second)h 15(is)h 13(b)h -1(y)h 14(far)h 13(the)h 14(b)h 1(etter.)h 19(Exceptions)h 15(are)h 14(almost)h 12(b)h -1(y)h 13(de\014nition)h 13(rare)h 14(ev)h -1(en)h -1(ts,)h 0 1220(and)s 16(so)h 16(in)h 15(assessing)h 17(the)h 16(t)h -1(w)h -1(o)h 16(organizations,)h 15(the)h 16(emphasis)h 15(should)h 16(b)h 1(e)h 16(placed)h 16(on)h 16(the)h 16(e\016ciency)h 17(of)h 15(the)h 16(ordinary)h 0 1270(case)s 19(whic)h -1(h)h 18(is)h 18(the)h 19(pushing)h 17(and)h 18(p)h 1(opping.)h 30(The)h 19(\014rst)h 19(alternativ)h -1(e)h 18(ma)h -1(y)h 16(require)h 19(m)h -1(ulti)h -1(ple)h 16(pushes)h 20(and)h 18(p)h 1(ops)h 18(p)h 1(er)h 0 1320(exception)s 17(blo)h 1(c)h -1(k,)h 15(whereas)h 18(the)h 16(second)h 17(requires)h 17(just)h 17(one.)h 24(There)h 17(are)h 17(also)h 15(a)h 16(n)h -1(um)h -1(b)h 1(er)h 15(of)h 15(more)h 15(practical)h 16(reasons)h 0 1370(wh)s -1(y)h 14(the)h 14(second)h 15(alternativ)h -1(e)h 14(is)h 14(b)h 1(etter.)h 0 1445(Ha)s -1(ving)h 14(decided)h 15(that)h 15(a)h 14(stac)h -1(k)h 15(of)h 14(exception)h 15(blo)h 1(c)h -1(ks)h 15(should)h 14(b)h 1(e)h 16(main)h -2(tained,)h 13(the)h 15(next)h 15(thing)h 14(to)h 15(decide)h 15(is)h 15(where)h 15(it)h 0 1494(should)s 14(b)h 1(e)h 14(stored.)h 20(The)h 14(\014rst)h 15(thing)h 14(that)h 14(p)h 1(ops)h 14(to)h 14(mind)h 12(is)h 14(to)h 14(organize)h 14(for)h 14(the)h 14(exceptions)h 15(pac)h -1(k)h -2(age)h 14(to)h 14(main)h -1(tai)h -1(n)h 12(a)h 0 1544(stac)s -1(k)h 15(in)h 14(a)h 14(link)h -1(ed)h 14(list)h 13(gro)h -1(wing)h 14(out)h 14(of)h 14(a)h 14(global)h 13(v)h -2(ariable.)h 18(While)h 14(completely)h 13(feasible,)h 14(this)h 14(solution)h 14(is)h 14(distasteful)h 0 1594(as)s 17(it)h 17(requires)h 18(a)h 17(mem)h -1(ory)h 15(allo)h 1(cation)h 15(and)h 17(deallo)h 1(cation)h 16(p)h 1(er)h 18(exception)h 18(blo)h 1(c)h -1(k)h 16(instance.)h 29(A)h 17(far)h 16(b)h 1(etter)h 19(sc)h -1(heme)h 17(is)h 0 1644(simply)s 13(to)h 15(store)h 16(the)h 16(stac)h -1(k)h 16(on)h 15(the)h 16(run-time)h 14(stac)h -1(k!)h 22(This)h 15(can)h 16(b)h 1(e)h 15(done)h 16(b)h -1(y)h 15(storing)h 15(eac)h -1(h)h 16(no)h 1(de)h 15(of)h 15(the)h 16(stac)h -1(k)h 15(in)h 15(an)h 0 1694(automatic)s 12(v)h -2(ariable)h 14(within)h 13(the)h 15(stac)h -1(k)h 15(frame)h 13(of)h 13(the)h 15(function)h 14(con)h -1(taining)h 13(the)h 15(exception)h 15(blo)h 1(c)h -1(k.)h 19(These)h 16(automatic)h 0 1743(v)s -2(ariables)h 13(can)h 14(then)h 15(b)h 1(e)h 14(threaded)h 15(together)h 15(with)h 14(p)h 1(oin)h -1(ts)h 14(to)h 13(form)h 12(the)h 15(originally)h 11(desired)h 15(explicit)h 14(stac)h -1(k.)h 0 1980(One)s 17(in)h -1(teresting)h 17(asp)h 1(ect)h 18(of)h 15(the)h 17(design)h 17(is)h 16(the)h 17(iden)h -1(tit)h -1(y)h 16(of)h 16(exceptions.)h 26(When)h 17(the)h 17(clien)h -1(t)h 16(raises)h 17(an)h 16(exception)h 17(b)h -1(y)h 0 2030(calling)s 182(,)h 14(an)h 14(argumen)h -1(t)h 14(m)h -1(ust)h 13(b)h 1(e)h 16(pro)h -1(vided)h 14(that)h 15(in)h 14(some)h 14(w)h -1(a)h -1(y)h 14(iden)h -1(ti\014es)h 15(the)h 15(exception)h 16(b)h 1(eing)h 14(raised.)h 21(A)h 0 2080(n)s -1(um)h -1(b)h 1(er)h 13(of)h 13(p)h 1(ossible)h 15(sc)h -1(hemes)h 14(spring)h 14(to)h 14(mind:)h 560 2154(Eac)s -1(h)h 12(exception)h 11(could)h 12(b)h 1(e)h 11(mapp)h 1(ed)h 11(on)h -1(to)h 10(a)h 11(unique)h 12(in)h -1(teger)h 11(whic)h -1(h)h 11(w)h -1(ould)h 11(represen)h -1(t)h 0 2204(the)s 18(exception.)h 28(These)h 18(in)h -1(tegers)h 18(could)h 17(b)h 1(e)h 18(managed)h 15(b)h -1(y)h 17(de\014ning)h 17(prepro)h 1(cess)h 1(or)h 19(sym)h -1(b)h 1(ols)h 15(for)h 17(them.)h 27(T)h -3(o)h 16(raise)h 17(an)h 0 2254(exception,)s 22(the)h 21(clien)h -1(t)h 20(w)h -1(ould)h 19(simply)h 18(pass)h 21(the)h 21(prepro)h 1(cess)h 1(or)h 22(sym)h -1(b)h 1(ol.)h 35(This)h 20(solution)h 19(is)h 20(simple)h 19(and)h 20(pro)h -1(vides)h 0 2304(compile-tim)s -2(e)h 13(c)h -1(hec)h -1(king)h 15(\(if)h 13(the)h 15(clien)h -1(t)h 14(programmer)h 12(mist)h -1(yp)h 1(es)h 14(a)h 14(n)h -1(um)h -1(b)h 1(er,)h 13(the)h 15(problem)h 13(w)h -1(on't)h 14(b)h 1(e)h 15(disco)h -1(v)h -1(ered)h 15(un)h -1(til)h 0 2354(the)s 16(exception)h 16(is)h 16(raised)h 16(and)h 15(not)h 15(caugh)h -1(t,)h 16(but)h 15(if)h 15(the)h 16(clien)h -1(t)h 16(mist)h -1(yp)h 1(es)h 14(a)h 16(prepro)h 1(cessor)h 18(sym)h -1(b)h 1(ol,)h 13(the)h 16(compiler)h 14(will)h 0 2403(issue)s 15(an)h 14(\\unkno)h -1(wn)h 14(sym)h -1(b)h 1(ol")h 12(error\),)h 15(but)h 14(it)h 14(do)h 1(es)h 15(not)h 14(pro)h -1(vide)h 14(an)h -1(y)h 14(w)h -1(a)h -1(y)h 14(to)h 14(ensure)h 16(that)h 14(t)h -1(w)h -1(o)h 14(di\013eren)h -1(t)h 15(exceptions)h 0 2453(in)s 12(t)h -1(w)h -1(o)h 12(di\013eren)h -1(t)h 14(mo)h 1(dules)h 12(are)h 13(not)h 13(using)h 12(the)h 13(same)h 12(n)h -1(um)h -1(b)h 1(er)h 12(to)h 13(represen)h -1(t)h 15(the)h 13(t)h -1(w)h -1(o)h 12(di\013eren)h -1(t)h 14(exceptions.)h 19(There)h 14(are)h 0 2503(organizational)s 11(solutions)h 12(to)h 12(this)h 13(problem)h 11(suc)h -1(h)h 13(as)h 13(ha)h -1(ving)h 12(the)h 13(programm)h -1(er)h 11(main)h -1(tai)h -1(n)h 11(a)h 12(global)h 11(list)h 12(of)h 12(exceptions,)h 0 2553(but)s 19(these)h 21(are)h 19(generally)h 18(unacceptable)h 21(in)h 18(the)h 20(long)h 18(run.)h 33(One)h 20(other)h 19(solution)h 18(is)h 19(to)h 19(mak)h -1(e)h 17(exception)h 20(in)h -1(tegers)h 0 2603(wide)s 18(\(e.g.)h 30(32-bits\))h 17(and)h 18(ha)h -1(v)h -1(e)h 18(the)h 19(programm)h -1(er)h 16(c)h -1(ho)h 1(ose)h 19(the)h 18(in)h -1(teger)h 19(for)h 17(eac)h -1(h)h 19(exception)h 19(b)h -1(y)h 17(tossing)h 18(a)h 18(coin)h 17(32)h 0 2653(times.)s 17(The)h 14(probabilit)h -1(y)h 12(of)h 13(a)h 13(collision)h 12(w)h -1(ould)h 12(b)h 1(e)h 14(tin)h -1(y)h -3(.)h 17(T)h -3(o)h 13(b)h 1(e)h 14(sure)h 15(that)h 13(t)h -1(w)h -1(o)h 13(exceptions)h 15(w)h -1(ere)h 14(not)h 14(using)h 13(the)h 14(same)h 954 2770(40)s 14 2 325 722 r 14 2 179 2030 r 40 @eop 41 @bop0 41 @bop1 cmbx10.432 sf 0 1636(6.3)s 24(Iden)h -2(ti\014er)h 22(Nam)h -1(es)h cmtt10.300 sf 241 963(const)s 520 1262(const)s 634 2071(ex)s 523 2594(EX)s 1122 2644(BEGIN)s 550(EX)h 15(BEGIN)h cmti10.300 sf 0 216(Inte)s -2(ger/variable:)h 0 589(Pointer)s 14(to)h 15(r)h -2(e)h -2(c)h -2(or)h -2(d:)h 0 814(Pointer)s 16(to)h 17(string:)h 745 2221(A)s -1(l)h 2(l)h 12(identi\014ers)h 13(that)h 13(b)h -2(e)h -2(gin)h 13(with)h 12(an)h 14(undersc)h -2(or)h -2(e)h 13(ar)h -2(e)h 13(always)h 12(r)h -2(eserve)h -2(d)h 13(for)h 0 2271(use)s 16(as)h 15(identi\014ers)h 15(with)h 15(\014le)h 15(scr)h -2(op)h -2(e)h 16(in)h 15(b)h -2(oth)h 15(the)h 16(or)h -2(dinary)h 15(identi\014er)h 15(and)h 16(tag)h 16(name)h 16(sp)h -2(ac)h -2(es)h cmr10.300 sf 0 42(n)s -1(um)h -1(b)h 1(er,)h 16(exceptions)h 18(could)h 17(b)h 1(e)h 17(registered)h 18(with)h 17(the)h 17(exceptions)h 18(pac)h -1(k)h -2(age)h 16(whic)h -1(h)h 17(w)h -1(ould)h 16(c)h -1(hec)h -1(k)h 17(the)h 18(uniqueness)h 18(of)h 0 91(eac)s -1(h)h 13(registered)h 13(exception)h 13(in)h -1(teger.)h 18(Registration)h 11(w)h -1(ould)h 12(also)h 11(allo)h -1(w)h 10(the)h 13(exception)h 13(pac)h -1(k)h -2(age)h 12(to)h 12(bind)h 11(a)h 12(string)h 12(name)h 0 141(to)s 14(eac)h -1(h)h 14(exception)h 15(n)h -1(um)h -1(b)h 1(er.)h 317 216(The)s 11(\014rst)h 12(solution)h 10(is)h 11(clean)h 11(b)h 1(ecause)h 12(it)h 11(uses)h 12(prepro)h 1(cessor)h 13(sym)h -1(b)h 1(ols.)h 16(A)h 11(sligh)h -1(tly)h 9(di\013eren)h -1(t)h 12(solution)h 0 266(is)s 18(to)h 17(use)h 19(global)h 16(v)h -2(ariables)h 17(instead.)h 29(Under)h 19(this)h 18(sc)h -1(heme,)h 18(a)h 18(mo)h 1(dule)h 16(exp)h 1(orting)h 18(an)h 17(exception)h 18(exp)h 1(orts)h 19(a)h 18(global)h 0 315(in)s -1(teger)h 15(v)h -2(ariable)h 14(that)h 16(represen)h -1(ts)h 17(the)h 16(exception.)h 22(When)h 15(the)h 16(pac)h -1(k)h -2(age)h 15(starts)h 16(up,)h 15(it)h 14(registers)h 17(the)h 15(exception)h 16(with)h 0 365(the)s 16(exception)h 16(pac)h -1(k)h -2(age.)h 23(Registration)h 14(in)h 15(this)h 16(case)h 16(is)h 15(activ)h -1(e,)h 16(not)h 15(passiv)h -1(e;)h 16(the)h 16(exceptions)h 17(pac)h -1(k)h -2(age)h 15(allo)h 1(cates)h 15(an)h 0 415(exception)s 17(n)h -1(um)h -1(b)h 1(er)h 15(whic)h -1(h)h 15(is)h 16(assigned)h 16(to)h 15(the)h 17(v)h -2(ariable.)h 22(This)h 16(solution)h 15(has)h 16(the)h 16(adv)h -2(an)h -1(tage)h 15(of)h 15(guaran)h -1(teeing)h 16(that)h 0 465(exception)s 11(n)h -1(um)h -1(b)h 1(ers)h 11(are)h 11(unique.)h 17(Ho)h -1(w)h -1(ev)h -1(er,)h 11(exceptions)h 12(often)h 11(happ)h 1(en)h 11(under)h 11(strange)h 12(conditions)h 10(and)h 11(it)h 10(is)h 11(probably)h 0 515(a)s 14(disadv)h -2(an)h -1(tage)h 13(to)h 13(ha)h -1(v)h -1(e)h 14(an)h 14(exception)h 14(represe)h 1(n)h -1(ted)h 16(b)h -1(y)h 14(a)h 13(writeable)h 14(v)h -2(ariable.)h 338 589(An)s 13(alternativ)h -1(e)h 13(to)h 14(in)h -1(tegers)h 14(is)h 13(to)h 13(represen)h -1(t)h 16(exceptions)h 14(b)h -1(y)h 13(p)h 1(oin)h -1(ters)h 14(to)h 14(records)h 14(describing)h 14(the)h 0 639(exceptions.)s 22(Eac)h -1(h)h 16(record)h 16(could)h 15(b)h 1(e)h 15(declared)h 16(statically)h 14(\(th)h -1(us)h 16(ensuring)h 15(that)h 15(eac)h -1(h)h 16(record)h 16(has)h 15(a)h 15(unique)h 15(p)h 1(oin)h -1(ter\))h 0 689(and)s 14(could)h 14(con)h -1(tain)h 13(a)h 14(description)h 15(of)h 13(the)h 15(exception)h 14(and)h 14(p)h 1(ossibly)h 14(other)h 15(useful)h 14(informa)h -1(tion)h 12(\(e.g.)h 18(a)h 14(coun)h -1(t)h 14(of)h 13(ho)h -1(w)h 0 739(often)s 14(the)h 14(exception)h 15(has)h 14(\014red\).)h 19(The)h 14(p)h 1(oin)h -1(ters)h 15(to)h 14(the)h 14(records)h 16(could)h 13(b)h 1(e)h 15(constan)h -1(ts.)h 342 814(P)s -1(oin)h -1(ters)h 16(to)h 16(records)h 17(are)h 16(OK,)h 16(but)h 16(are)h 16(rather)h 17(messy)h 15(to)h 16(declare.)h 24(As)h 16(it)h 16(seems)h 16(that)h 15(the)h 17(only)h 0 863(informati)s -1(on)h 13(that)h 14(really)h 14(needs)h 16(to)h 14(b)h 1(e)h 15(b)h 1(ound)h 15(to)h 14(an)h 15(exception)h 15(is)h 14(a)h 14(string)h 15(describing)h 15(the)h 15(exception,)h 15(a)h 14(far)h 14(b)h 1(etter)h 0 913(more)s 12(direct)h 13(sc)h -1(heme)h 13(is)h 13(simply)h 10(to)h 13(represen)h -1(t)h 15(exceptions)h 14(as)h 12(p)h 1(oin)h -1(ters)h 14(to)h 12(strings.)h 18(Eac)h -1(h)h 13(exception)h 14(can)h 13(b)h 1(e)h 13(statically)h 0 963(declared)s 12(as)h 11(a)h 130(p)h 1(oin)h -1(ter)h 12(to)h 10(a)h 11(string.)h 17(This)h 11(solv)h -1(es)h 11(all)h 10(the)h 11(problems:)h 16(1\))h 11(the)h 11(exception)h 12(iden)h -1(tit)h -1(y)h 10(is)h 11(read-only)h -3(,)h 10(2\))h 0 1013(the)s 11(exception)h 11(iden)h -1(tit)h -1(y)h 10(is)h 11(unique)h 10(\(b)h 1(ecause)h 12(eac)h -1(h)h 11(string)h 11(is)h 10(stored)h 12(at)h 10(a)h 10(di\013eren)h -1(t)h 12(address\),)h 12(3\))h 10(the)h 11(exception)h 11(iden)h -1(tit)h -1(y)h 0 1063(is)s 14(easy)h 14(to)h 14(declare,)h 14(4\))h 14(the)h 14(exceptions)h 15(pac)h -1(k)h -2(age)h 13(do)h 1(esn't)h 15(ha)h -1(v)h -1(e)h 13(to)h 14(manage)h 12(a)h 14(table)h 13(of)h 14(exceptions,)h 14(5\))h 14(the)h 14(exception)h 0 1112(v)s -2(ariable)h 11(names)h 12(are)h 13(sub)h 2(ject)h 13(to)h 13(compil)h -1(e-tim)h -1(e)h 11(c)h -1(hec)h -1(king.)h 18(The)h 12(only)h 12(disadv)h -2(an)h -1(tages)h 12(are)h 13(that)h 12(1\))h 12(the)h 13(compiler)h 11(migh)h -1(t)h 0 1162(o)s -1(v)h -1(erlap)h 15(t)h -1(w)h -1(o)h 14(constan)h -1(t)h 16(strings)h 16(if)h 14(one)h 15(is)h 16(a)h 14(non-strict)h 16(su\016x)h 15(of)h 15(the)h 16(other,)h 15(2\))h 15(the)h 16(exception)h 16(is)h 15(represe)h 1(n)h -1(ted)h 17(b)h -1(y)h 15(an)h 0 1212(ob)s 2(ject)h 14(that)h 13(is)h 13(basically)h 12(a)h 13(v)h -2(ariable)h 13(whic)h -1(h)h 13(could)h 13(b)h 1(e)h 14(acciden)h -1(tally)h 12(written-to)h 14(if)h 12(the)h 14(program)h 12(go)h 1(es)h 13(ha)h -1(ywire)h 13(b)h 1(efore)h 0 1262(the)s 14(exception)h 15(is)h 14(raised.)h 18(The)h 137(attribute)h 14(helps,)h 14(but)h 14(ma)h -1(y)h 12(b)h 1(e)h 14(ignored)h 14(b)h -1(y)h 13(man)h -1(y)h 12(compilers)h 13(whic)h -1(h)h 13(will)h 13(place)h 0 1312(the)s 14(v)h -2(ariable)h 13(in)h 14(writeable)h 14(mem)h -1(ory)h -3(.)h 16(These)h 15(disadv)h -2(an)h -1(tages)h 13(are)h 15(considered)h 15(minor)h 12(compared)h 13(to)h 14(the)h 14(adv)h -2(an)h -1(tages.)h 0 1386(Of)s 18(the)h 19(solutions)h 18(giv)h -1(en)h 18(ab)h 1(o)h -1(v)h -1(e,)h 19(the)h 19(simplest)h 17(and)h 18(cleanest)h 20(is)h 18(the)h 19(p)h 1(oin)h -1(ter)h 19(to)h 18(string)h 18(solution,)h 18(and)h 19(this)h 18(is)h 18(the)h 0 1436(sc)s -1(heme)h 12(that)h 13(is)h 12(used)h 13(in)h 12(this)h 12(pac)h -1(k)h -2(age.)h 17(This)h 13(is)h 12(a)h 12(particularly)h 11(satisfactory)h 13(solution)h 11(b)h 1(ecause)h 14(it)h 12(solv)h -1(es)h 12(the)h 13(problem)h 0 1486(of)s 13(exception)h 15(iden)h -1(tit)h -1(y)h 13(and)h 14(exception)h 15(description)h 14(in)h 14(one)h 14(go.)h 0 1723(Because)s 17(it)h 16(con)h -1(tains)h 15(macros)h 15(that)h 15(refer)h 17(to)h 15(global)h 14(v)h -2(ariables,)h 15(this)h 16(pac)h -1(k)h -2(age)h 15(exp)h 1(oses)h 17(the)h 16(ma)h 2(jor)h 14(prop)h 1(ortion)h 15(of)h 15(its)h 0 1773(names)s 13(to)h 14(the)h 14(clien)h -1(t.)h 18(As)h 15(suc)h -1(h,)h 14(particular)h 13(care)h 15(m)h -1(ust)h 13(b)h 1(e)h 15(tak)h -1(en)h 14(with)h 13(names.)h 0 1847(T)s -3(o)h 14(assist)h 15(p)h 1(ortabilit)h -1(y)h 14(to)h 15(brain-dead)h 14(compilers,)h 14(all)h 13(names)h 14(ha)h -1(v)h -1(e)h 15(generally)h 15(b)h 1(een)h 16(restricted)h 16(to)h 15(six)h 15(c)h -1(haracters)h 16(for)h 0 1897(external)s 13(iden)h -1(ti\014ers)h 13(and)h 13(eigh)h -1(t)h 12(for)h 13(in)h -1(ternal)h 12(iden)h -1(ti\014ers.)h 18(Upp)h 1(er)h 14(case)h 13(has)h 13(b)h 1(een)h 14(used)h 13(for)h 13(prepro)h 1(cessor)h 15(sym)h -1(b)h 1(ols)h 11(and)h 0 1947(lo)s -1(w)h -1(er)h 13(case)h 14(for)h 13(other)h 13(iden)h -1(ti\014ers.)h 19(Although)h 13(the)h 13(use)h 14(of)h 13(upp)h 1(er)h 14(case)h 14(in)h 13(the)h 14(main)h 11(exception)h 14(syn)h -1(tax)h 13(is)h 13(a)h 13(little)h 12(loud,)h 0 1997(it)s 14(is)h 13(also)h 14(a)h 13(con)h -1(tin)h -1(uous)h 14(reminder)h 13(that)h 14(this)h 14(is)h 14(a)h 14(dangerous)h 14(construct.)h 0 2071(The)s 13(menemoni)h -1(c)h 11(for)h 12(this)h 13(pac)h -1(k)h -2(age)h 12(is)h 68(and)h 12(this)h 13(app)h 1(ears)h 13(at)h 12(the)h 13(b)h 1(eginning)h 12(of)h 12(ev)h -1(ery)h 13(exp)h 1(orted)h 13(sym)h -1(b)h 1(ol.)h 16(This)h 12(will)h 0 2121(assist)s 14(to)h 14(reduce)h 16(sym)h -1(b)h 1(ol)h 12(collisions.)h 17(In)h 14(addition,)h 12(an)h -1(y)h 14(sym)h -1(b)h 1(ol)h 12(that)h 14(is)h 14(not)h 14(in)h -1(tended)h 14(to)h 14(b)h 1(e)h 14(seen)h 16(b)h -1(y)h 13(the)h 15(clien)h -1(t)h 14(has)h 0 2171(b)s 1(een)h 15(prep)h 1(ended)h 17(with)h 13(an)h 14(underscore)h 1(.)h 20(This)h 15(is)h 14(a)h 14(little)h 13(bit)h 14(naugh)h -1(t)h -1(y)h 13(as)h 15(it)h 14(con)h -1(tra)h -1(v)h -1(enes)h 15(the)h 15(ANSI)h 14(standard's)h 15(rule)h 0 2221(7.13)s 11(on)h 11(iden)h -1(ti\014ers)h 13(reserv)h -1(ed)h 13(for)h 12(libraries)h 11(\(\\)h 1537 2271("\),)s 14(but)h 14(as)h 15(this)h 14(pac)h -1(k)h -2(age)h 0 2320(is)s 15(supp)h 1(osed)h 16(to)h 15(b)h 1(e)h 16(a)h 15(library)h 14(pac)h -1(k)h -2(age)h 15(to)h 1(o,)h 15(it)h 14(seems)h 16(only)h 14(a)h 15(minor)h 13(breac)h -1(h,)h 16(and)h 15(completely)h 14(in)h 14(k)h -1(eeping)h 16(with)h 14(the)h 0 2370(st)s -1(yle)h 14(of)h 13(the)h 15(ANSI)h 14(library)h -3(.)h 0 2445(The)s 16(names)h 16(of)h 15(all)h 15(the)h 17(exp)h 1(orted)h 17(constructs)h 18(w)h -1(ere)h 17(c)h -1(hosen)h 17(v)h -1(ery)h 16(carefully)h -3(.)h 24(Because)h 18(most)h 15(of)h 15(the)h 17(exp)h 1(orted)h 17(items)h 0 2495(w)s -1(ere)h 17(macros,)h 15(b)h -1(y)h 15(univ)h -1(ersal)h 16(con)h -1(v)h -1(en)h -1(tion,)h 15(their)h 16(iden)h -1(ti\014ers)h 17(had)h 15(to)h 16(b)h 1(e)h 16(in)h 16(upp)h 1(er)h 16(case.)h 25(This)h 16(requiremen)h -1(t)h 15(w)h -1(as)h 16(not)h 0 2545(a)s 16(disadv)h -2(an)h -1(tage)h 14(though)h 16(as)h 16(exception)h 16(handlers)h 17(are)h 16(so)h 16(imp)h 1(ortan)h -1(t)h 14(that)h 16(they)h 16(ough)h -1(t)h 15(to)h 16(b)h 1(e)h 16(syn)h -1(tactically)h 16(\\loud".)h 0 2594(Pre\014xing)s 18(eac)h -1(h)h 19(sym)h -1(b)h 1(ol)h 16(with)h 94(is)h 18(a)h 18(little)h 17(v)h -1(erb)h 1(ose,)h 20(but)h 18(w)h -1(as)h 18(w)h -1(orth)h -1(while)h 17(b)h 1(ecause)h 19(it)h 18(imm)h -1(ediately)h 15(binds)h 18(the)h 0 2644(sym)s -1(b)h 1(ol)h 11(so)h 13(tigh)h -1(tly)h 12(to)h 13(this)h 13(pac)h -1(k)h -2(age)h 12(that)h 13(generic)h 14(su\016xes)h 13(suc)h -1(h)h 14(as)h 135(can)h 13(b)h 1(e)h 14(used)h 13(as)h 13(a)h 13(su\016x.)h 18(Th)h -1(us)h 954 2770(41)s 14 2 570 2594 r 14 2 1829 2644 r 41 @eop 42 @bop0 cmbx10.432 sf [ 24 6 -1 16 23] 45 dc 42 @bop1 cmbx10.432 sf 0 689(6.4)s 24(Catering)h 22(for)h 24(Multi-Threadi)h -1(ng)h 0 1225(6.5)s 24(Chec)h -2(king)h cmti10.300 sf 0 1536(Exc)s -2(eption)h 13(has)h 13(no)h 13(hand)h 2(ler:)h 0 1660(Client)s 14(p)h -2(ops)h 14(the)h 15(c)h -2(ontext)h 14(to)h -2(o)h 15(often:)h 0 1934(Client)s 13(exits)h 13(c)h -2(ontext)h 14(without)h 13(p)h -2(opping)h 15(it:)h cmtt10.300 sf 77 42(EX)s 15(END)h 642 166(EX)s 16(FORGET)h 858 266(EX)s 15(BEGIN)h 673 390(EX)s 15(RAISE)h 717 440(ex)s 15(rai)h 1152 540(EX)s 15(RAISE)h 422(ex)h 15(rai)h 858 976(ex)s 15(curr)h 43(ex)h 15(id)h 126(ex)h 16(info)h 275 1075(EX)s 16(CURR)h 40(EX)h 15(ID)h 25(EX)h 15(ID)h 106(EX)h 15(INFO)h 1106 1362(longjmp)s 736 1461(EX)s 15(FAST)h 1097 1536(exrai)s 515(NULL)h 64 1586(EX)s 15(CURR)h 1298 1660(EX)s 15(POP)h 675 1710(EX)s 15(POP)h 507 1760(expop)s 529 1810(EX)s 16(POP)h 261(EX)h 15(POP)h 1615 1984(return)s 0 2034(longjmp)s cmr10.300 sf 0 42(and)s 145(strongly)h 10(con)h -1(v)h -1(ey)h 10(their)h 11(iden)h -1(tit)h -1(y)h 9(as)h 11(the)h 10(b)h 1(oundaries)h 11(of)h 10(an)h 10(anon)h -1(ymo)h -1(us)h 9(blo)h 1(c)h -1(k,)h 10(but)h 11(also)h 9(strongly)h 10(indicate)h 0 91(that)s 14(the)h 14(blo)h 1(c)h -1(k)h 14(is)h 14(designed)h 14(to)h 14(handle)h 14(exceptions.)h 0 166(As)s 13(men)h -1(tioned)h 12(earlier,)h 13(the)h 13(iden)h -1(ti\014er)h 216(w)h -1(as)h 13(c)h -1(hosen)h 14(so)h 13(as)h 13(to)h 12(con)h -1(tin)h -1(ually)h 12(remind)h 11(the)h 14(programm)h -1(er)h 11(that,)h 0 216(in)s 16(the)h 17(ev)h -1(en)h -1(t)h 18(of)h 16(an)h 16(exception,)h 17(all)h 16(automatic)h 15(v)h -2(ariables)h 15(de\014ned)h 18(within)h 16(the)h 17(function)h 16(con)h -1(taining)h 16(the)h 17(exception)h 0 266(blo)s 1(c)h -1(k)h 18(and)h 18(whic)h -1(h)h 19(ha)h -1(v)h -1(e)h 18(b)h 1(een)h 20(written)h 19(since)h 19(the)h 206(of)h 17(the)h 19(blo)h 1(c)h -1(k,)h 19(will)h 17(b)h 1(e)h 19(unde\014ned.)h 33(This)h 19(is)h 18(suc)h -1(h)h 19(an)h 0 315(imp)s 1(ortan)h -1(t)h 12(seman)h -1(tic)h 13(p)h 1(oin)h -1(t)h 14(that)h 14(it)h 13(w)h -1(as)h 14(considered)h 15(w)h -1(orth)h -1(y)h 14(of)h 13(b)h 1(eing)h 14(em)h -1(b)h 1(o)h 1(died)h 13(in)h 13(the)h 15(syn)h -1(tax)h 14(to)h 1(o.)h 0 390(The)s 15(hardest)h 15(iden)h -1(ti\014er)h 15(to)h 14(c)h -1(ho)h 1(ose)h 15(w)h -1(as)h 184(.)h 13(F)h -3(or)h 14(a)h 14(long)h 13(time,)h 13(this)h 14(construct)h 16(w)h -1(as)h 15(simply)h 12(to)h 14(tak)h -1(e)h 15(the)h 15(form)h 0 440(of)s 13(an)h 14(exp)h 1(orted)h 15(function)h 13(with)h 14(the)h 14(name)h 138(.)h 18(Ho)h -1(w)h -1(ev)h -1(er,)h 14(in)h 13(the)h 14(end,)h 14(it)h 14(w)h -1(as)h 14(decided)h 14(that)h 14(it)h 14(w)h -1(ould)h 13(b)h 1(e)h 14(b)h 1(etter)h 0 490(to)s 14(giv)h -1(e)h 14(this)h 15(facilit)h -1(y)h 13(the)h 15(same)h 14(syn)h -1(tactic)h 15(feel)h 15(as)h 15(the)h 15(other)h 15(constructs.)h 22(In)h 15(addition,)h 13(the)h 15(raising)h 14(of)h 14(an)h 14(exception)h 0 540(is)s 14(an)h 13(ev)h -1(en)h -1(t)h 15(that)h 14(should)h 14(probably)h 13(b)h 1(e)h 14(syn)h -1(tactically)h 14(loud.)h 17(Finally)h 194(is)h 14(more)h 13(readable)h 14(than)h 139(.)h 0 776(An)s 15(increasing)h 15(amoun)h -1(t)h 14(of)h 14(co)h 1(de)h 16(is)h 15(b)h 1(eing)h 15(run)h 15(in)h 15(a)h 14(m)h -1(ulti-threading)h 13(en)h -1(vironmen)h -1(t)h 14(and)h 15(it)h 14(is)h 15(imp)h 1(ortan)h -1(t)h 13(to)h 15(ensure)h 0 826(that)s 19(all)h 18(library)h 19(pac)h -1(k)h -2(ages)h 19(\(suc)h -1(h)h 20(as)h 19(this)h 19(one\))h 20(are)h 19(compatible)h 18(with)h 19(m)h -1(ulti)h -1(-threading.)h 32(A)h 19(k)h -1(ey)h 19(requiremen)h -1(t)h 20(of)h 0 876(m)s -1(ulti-threading)h 13(is)h 15(that)h 15(there)h 16(b)h 1(e)h 16(no)h 15(global)h 13(v)h -2(ariables,)h 15(ar)h 15(at)h 15(least)h 15(that)h 15(all)h 14(declarations)h 15(and)h 15(uses)h 16(of)h 15(the)h 16(global)h 0 926(v)s -2(ariables)h 11(that)h 11(do)h 11(exist)h 12(ha)h -1(v)h -1(e)h 11(b)h 1(een)h 13(encapsulated)h 12(in)h 11(macros)h 11(that)h 11(can)h 12(b)h 1(e)h 12(rede\014ned)h 13(to)h 12(w)h -1(ork)h 11(with)h 11(m)h -1(ulti-)h -1(threading.)h 0 976(In)s 16(this)h 16(pac)h -1(k)h -2(age,)h 16(the)h 16(only)h 15(global)h 15(v)h -2(ariables)h 15(are)h 179(,)h 134(,)h 16(and)h 179(.)h 23(T)h -3(o)h 15(simplif)h -1(y)h 14(p)h 1(ossible)h 16(future)h 0 1025(con)s -1(v)h -1(ersion)h 15(for)h 15(use)h 16(with)h 15(a)h 14(m)h -1(ulti-threading)h 13(pac)h -1(k)h -2(age,)h 15(all)h 13(uses)h 17(of)h 14(these)h 17(v)h -2(ariables)h 14(ha)h -1(v)h -1(e)h 15(b)h 1(een)h 16(expressed)h 18(in)h 14(terms)h 0 1075(of)s 13(the)h 15(macros)h 176(,)h 131(,)h 116(,)h 13(and)h 161(.)h 0 1312(As)s 12(men)h -1(tioned)h 10(b)h 1(efore,)h 12(exceptions)h 12(are)h 12(slipp)h 1(ery)h 11(things)h 11(that)h 12(can)h 11(easily)h 11(go)h 10(wrong)h 11(particularly)h 11(when)h 11(the)h 12(exception)h 0 1362(facilit)s -1(y)h 12(is)h 14(hac)h -1(k)h -1(ed)h 15(together,)h 15(as)h 14(it)h 14(has)h 14(here,)h 15(out)h 14(of)h 13(macros)h 14(and)h 168(s.)h 17(This)h 14(section)h 15(con)h -1(tains)h 14(a)h 14(list)h 14(of)h 13(lik)h -1(ely)h 0 1411(errors)s 15(and)h 13(failures)h 13(and)h 13(explains)h 13(ho)h -1(w)h 13(the)h 13(pac)h -1(k)h -2(age)h 13(cop)h 1(es)h 15(with)h 13(them.)h 17(The)h 14(errors)h 14(listed)h 13(here)h 15(are)h 14(caugh)h -1(t)h 13(only)h 12(in)h 0 1461(the)s 14(c)h -1(hec)h -1(king)h 15(v)h -1(ersion)h 14(of)h 13(this)h 14(pac)h -1(k)h -2(age.)h 18(If)h 189(then)h 15(no)h 13(c)h -1(hec)h -1(king)h 14(is)h 14(p)h 1(erformed.)h 483 1536(This)s 11(simple)h 10(case)h 12(is)h 11(caugh)h -1(t)h 11(b)h -1(y)h 11(the)h 147(function)h 11(whic)h -1(h)h 11(will)h 10(detect)h 13(a)h 109(p)h 1(oin)h -1(ter)h 0 1586(in)s 189(if)h 13(there)h 16(are)h 14(no)h 14(more)h 13(exception)h 14(blo)h 1(c)h -1(ks)h 14(to)h 14(searc)h -1(h)h 15(for)h 13(handlers.)h 616 1660(This)s 13(case)h 14(will)h 12(o)h 1(ccur)h 14(if)h 13(the)h 14(clien)h -1(t)h 13(calls)h 151(and)h 13(then)h 14(exits)h 13(the)h 14(exception)h 0 1710(blo)s 1(c)h -1(k)h 16(normally)h -4(,)h 14(or)h 17(if)h 15(the)h 17(clien)h -1(t)h 17(calls)h 157(more)h 15(than)h 16(once)h 17(within)h 16(the)h 17(same)h 16(exception)h 17(blo)h 1(c)h -1(k.)h 25(Both)h 17(these)h 0 1760(errors)s 17(are)h 16(detected)h 18(b)h -1(y)h 15(the)h 157(function)h 15(whic)h -1(h)h 16(tests)h 17(to)h 15(ensure)h 18(that)h 15(the)h 17(con)h -1(text)h 16(it)h 15(is)h 16(b)h 1(eing)h 15(ask)h -1(ed)h 16(to)h 16(p)h 1(op)h 0 1810(is)s 18(the)h 18(con)h -1(text)h 18(enclosing)h 18(the)h 161(call.)h 29(\(Note:)h 168(w)h -1(on't)h 17(compile)h 16(unless)h 19(it)h 17(is)h 18(called)h 17(from)h 16(within)h 17(an)h 0 1860(exception)s 15(blo)h 1(c)h -1(k,)h 13(so)h 14(there)h 15(is)h 14(no)h 13(c)h -1(hance)h 15(of)h 13(a)h 14(con)h -1(text)h 15(b)h 1(eing)h 14(p)h 1(opp)h 1(ed)h 14(from)h 12(an)h 14(external)h 14(function\).)h 714 1934(This)s 12(is)h 13(the)h 13(single)h 12(biggest)h 12(headac)h -1(he,)h 13(as)h 13(there)h 14(is)h 12(no)h 12(w)h -1(a)h -1(y)h 12(that)h 12(this)h 13(error)h 0 1984(can)s 18(b)h 1(e)h 18(detected)h 19(when)h 19(it)h 17(o)h 1(ccurs.)h 30(There)h 19(is)h 17(nothing)h 17(to)h 17(stop)h 18(the)h 18(clien)h -1(t)h 18(from)h 15(executing)h 19(a)h 165(or)h 17(explicit)h 165 2034(from)s 11(within)h 11(an)h 13(exception)h 13(blo)h 1(c)h -1(k,)h 12(and)h 12(if)h 12(the)h 13(clien)h -1(t)h 12(do)h 1(es,)h 14(the)h 13(exception)h 13(blo)h 1(c)h -1(k)h 12(will)h 11(still)h 12(b)h 1(e)h 13(registered)h 14(as)h 0 2084(the)s 14(top)h 14(con)h -1(text)h 14(on)h 14(the)h 14(stac)h -1(k)h 14(of)h 13(exception)h 14(con)h -1(texts,)h 15(and)h 13(con)h -1(trol)h 13(will)h 13(b)h 1(e)h 14(transferred)h 15(to)h 14(it)h 13(if)h 13(an)h 13(exception)h 15(go)h 1(es)h 0 2134(o\013,)s 13(and)h 13(if)h 12(this)h 14(happ)h 1(ens,)h 13(the)h 14(program)h 12(is)h 13(lik)h -1(ely)h 12(to)h 13(crash,)h 14(as)h 13(the)h 14(stac)h -1(k)h 13(frame)h 12(con)h -1(taining)h 12(the)h 14(exception)h 14(blo)h 1(c)h -1(k)h 13(no)h 0 2183(longer)s 14(exists.)h 0 2258(This)s 10(problem)h 9(cannot)h 10(b)h 1(e)h 10(solv)h -1(ed,)h 10(but)h 11(it)h 9(can)h 10(b)h 1(e)h 11(atten)h -1(uated)h 11(somewhat)h 9(using)h 10(the)h 10(three-pronged)h 12(approac)h -1(h)h 10(adopted)h 0 2308(in)s 13(this)h 14(pac)h -1(k)h -2(age:)h 0 2383(1\))s 18(Whenev)h -1(er)h 20(a)h 19(con)h -1(text)h 19(is)h 18(p)h 1(opp)h 1(ed,)h 20(a)h 19(c)h -1(hec)h -1(k)h 19(is)h 19(p)h 1(erformed)h 18(to)h 19(ensure)h 20(that)h 18(the)h 20(con)h -1(text)h 19(b)h 1(eing)h 19(p)h 1(opp)h 1(ed)h 19(is)h 18(the)h 0 2433(statically)s 12(enclosing)h 13(exception)h 14(blo)h 1(c)h -1(k.)h 17(If)h 13(it)h 13(isn't,)h 12(the)h 14(program)h 11(b)h 1(om)h -1(bs.)h 16(This)h 13(c)h -1(hec)h -1(k)h 14(means)h 13(that)h 13(the)h 13(stac)h -1(k)h 14(will)h 11(b)h 1(e)h 0 2482(prop)s 1(erly)h 14(aligned)h 13(follo)h -1(wing)h 12(eac)h -1(h)h 14(non-illegal)h 12(termination)h 12(of)h 13(eac)h -1(h)h 14(exception)h 15(blo)h 1(c)h -1(k.)h 0 2557(2\))s 11(Whenev)h -1(er)h 13(an)h 12(exception)h 12(is)h 12(raised,)h 11(a)h 12(c)h -1(hec)h -1(k)h 12(is)h 12(p)h 1(erformed)h 11(to)h 12(ensure)h 13(that)h 12(the)h 12(address)h 13(of)h 11(the)h 12(con)h -1(text)h 12(on)h 12(the)h 12(top)h 0 2607(of)s 14(the)h 15(con)h -1(text)h 15(stac)h -1(k)h 15(is)h 14(lo)h -1(w)h -1(er)h 14(than)h 14(that)h 15(of)h 14(the)h 15(start)h 15(of)h 13(the)h 15(stac)h -1(k)h 15(frame)h 13(of)h 14(the)h 15(function)h 14(raising)h 14(the)h 15(exception.)h 0 2657(If)s 14(it)h 13(is,)h 13(then)h 15(it)h 13(m)h -1(ust)h 13(b)h 1(e)h 15(an)h 13(erroneously)h 15(unp)h 1(opp)h 1(ed)h 15(con)h -1(text.)h 954 2770(42)s 14 2 124 42 r 14 2 689 166 r 14 2 905 266 r 14 2 720 390 r 14 2 764 440 r 14 2 1199 540 r 14 2 1790 540 r 14 2 845 976 r 14 2 905 976 r 14 2 1035 976 r 14 2 1095 976 r 14 2 1264 976 r 14 2 1324 976 r 14 2 262 1075 r 14 2 322 1075 r 14 2 450 1075 r 14 2 510 1075 r 14 2 638 1075 r 14 2 847 1075 r 14 2 723 1461 r 14 2 783 1461 r 14 2 1084 1536 r 14 2 51 1586 r 14 2 111 1586 r 14 2 1345 1660 r 14 2 722 1710 r 14 2 494 1760 r 14 2 576 1810 r 14 2 963 1810 r 42 @eop 43 @bop0 43 @bop1 cmbx10.432 sf 0 739(6.6)s 24(F)h -6(uture)h 23(Im)h -1(pro)h -2(v)h -2(em)h -1(e)h -1(n)h -2(ts)h cmr10.300 sf 0 42(3\))s 14(Corruptions)h 14(of)h 14(con)h -1(text)h 15(records)h 15(are)h 15(detected)h 16(b)h -1(y)h 14(ha)h -1(ving)h 13(t)h -1(w)h -1(o)h 14(magi)h -1(c)h 13(n)h -1(um)h -1(b)h 1(er)h 13(\014elds)h 15(in)h 13(the)h 15(record,)h 15(one)h 14(at)h 14(the)h 0 91(start)s 16(of)h 14(the)h 16(record)h 16(and)h 15(one)h 15(at)h 15(the)h 16(end.)h 22(If)h 15(a)h 15(record)h 16(is)h 15(corrupted,)h 17(the)h 15(corruption)h 16(is)h 15(lik)h -1(ely)h 13(to)h 15(b)h 1(e)h 16(detected)h 17(the)h 0 141(next)s 14(time)h 13(the)h 14(record)h 16(is)h 13(manipulated.)h 0 216(The)s 15(last)h 14(t)h -1(w)h -1(o)h 13(c)h -1(hec)h -1(ks)h 16(do)h 14(a)h 14(go)h 1(o)h 1(d)h 14(job)h 14(of)h 13(co)h -1(v)h -1(ering)h 14(the)h 15(t)h -1(w)h -1(o)h 14(main)h 12(cases)h 16(that)h 14(can)h 14(arise.)h 20(When)h 14(an)h 14(exception)h 15(blo)h 1(c)h -1(k)h 0 266(terminates)s 12(without)h 12(its)h 13(con)h -1(text)h 13(b)h 1(eing)h 12(p)h 1(opp)h 1(ed,)h 13(con)h -1(trol)h 13(will)h 11(often)h 12(lea)h -1(v)h -1(e)h 12(the)h 13(function.)h 18(If)h 12(it)h 12(do)h 1(es,)h 13(then)h 13(the)h 13(top)h 13(of)h 0 315(the)s 15(run-time)h 13(stac)h -1(k)h 15(will)h 13(b)h 1(e)h 15(higher)h 15(\(in)h 14(address)h 16(v)h -2(alue)h 14(for)h 14(stac)h -1(ks)h 15(that)h 15(gro)h -1(w)h 14(do)h -1(wn\))h 14(than)h 14(the)h 15(unp)h 1(opp)h 1(ed)h 16(con)h -1(text.)h 0 365(This)s 15(is)h 16(detected)h 17(b)h -1(y)h 15(the)h 16(second)h 17(test.)h 23(If,)h 15(later,)h 16(the)h 16(stac)h -1(k)h 15(gro)h -1(ws)h 16(again,)h 14(it)h 15(is)h 15(lik)h -1(ely)h 14(to)h 15(o)h -1(v)h -1(erwrite)h 16(the)h 16(unp)h 1(opp)h 1(ed)h 0 415(con)s -1(text,)h 15(including)h 14(the)h 15(magic)h 13(n)h -1(um)h -1(b)h 1(ers)h 14(it)h 14(con)h -1(tains.)h 20(If)h 15(this)h 14(happ)h 1(ens,)h 16(then)h 15(the)h 15(error)h 16(will)h 13(b)h 1(e)h 15(detecte)h 1(d)h 16(the)h 15(next)h 0 465(time)s 13(an)h 13(exception)h 15(is)h 14(raised)h 14(or)h 14(the)h 14(stac)h -1(k)h 15(is)h 13(p)h 1(opp)h 1(ed.)h 0 540(Ob)s -1(viously)h -3(,)h 13(there)h 15(are)h 15(w)h -1(a)h -1(ys)h 14(in)h 13(whic)h -1(h)h 14(a)h 14(computer)h 14(program)h 13(migh)h -1(t)h 12(satisfy)h 14(all)h 13(these)h 15(tests)h 16(and)h 14(still)h 13(b)h 1(e)h 15(erroneous,)h 0 589(but)s 14(at)h 14(least)h 14(these)h 15(tests)h 16(pro)h -1(vide)h 13(some)h 13(sort)h 15(of)h 13(safet)h -1(y)h 14(net.)h 0 826(This)s 14(section)h 14(giv)h -1(es)h 14(a)h 14(list)h 13(of)h 13(p)h 1(ossible)h 14(future)h 15(impro)h -1(v)h -1(em)h -1(en)h -1(ts)h 13(to)h 13(this)h 14(pac)h -1(k)h -2(age.)h 0 901(*)s 12(It)h 11(migh)h -1(t)h 10(b)h 1(e)h 13(useful)h 12(to)h 11(allo)h -1(w)h 10(the)h 13(clien)h -1(t)h 12(to)h 11(sp)h 1(ecify)h 13(a)h 11(blo)h 1(c)h -1(k)h 12(of)h 11(co)h 1(de)h 13(that)h 12(is)h 11(executed)h 14(after)h 12(an)h 12(exception)h 12(is)h 12(raised,)h 0 951(but)s 14(b)h 1(efore)h 15(the)h 14(handlers)h 15(are)h 14(scanned.)h 19(This)h 14(w)h -1(ould)h 13(allo)h -1(w)h 12(an)h 14(opp)h 1(ortunit)h -1(y)h 13(for)h 14(cleaning)h 13(up.)h 0 1025(*)s 14(Rew)h -1(ork)h 13(the)h 15(terminology)h 11(so)h 14(that)h 14(it)h 14(is)h 13(more)h 13(consisten)h -1(t.)h 0 1100(*)s 14(Hierarc)h -1(hical)h 13(exceptions.)h 0 1175(That's)s 14(the)h 14(end)h 15(of)h 13(this)h 14(pac)h -1(k)h -2(age!)h 954 2770(43)s 43 @eop @end