% -*- Mode: TeX -*- %% Exit Extents % This text was originally duplicated in each of GO, RETURN-FROM, % and THROW. I thought it would be less redundant to centralize it here. % --sjl 7 Mar 92 \issue{EXIT-EXTENT:MINIMAL} When a transfer of control is initiated by \specref{go}, \specref{return-from}, or \specref{throw} the following events occur in order to accomplish the transfer of control. Note that for \specref{go}, the \term{exit point} is the \term{form} within the \specref{tagbody} that is being executed at the time the \specref{go} is performed; for \specref{return-from}, the \term{exit point} is the corresponding \specref{block} \term{form}; and for \specref{throw}, the \term{exit point} is the corresponding \specref{catch} \term{form}. \beginlist \itemitem{1.} Intervening \term{exit points} are ``abandoned'' (\ie their \term{extent} ends and it is no longer valid to attempt to transfer control through them). \itemitem{2.} The cleanup clauses of any intervening \specref{unwind-protect} clauses are evaluated. \itemitem{3.} % added condition handlers and restarts -- sjl 7 Mar 92 Intervening dynamic \term{bindings} of \declref{special} variables, \term{catch tags}, \term{condition handlers}, and \term{restarts} are undone. \itemitem{4.} The \term{extent} of the \term{exit point} being invoked ends, and control is passed to the target. \endlist The extent of an exit being ``abandoned'' because it is being passed over ends as soon as the transfer of control is initiated. That is, event 1 occurs at the beginning of the initiation of the transfer of control. The consequences are undefined if an attempt is made to transfer control to an \term{exit point} whose \term{dynamic extent} has ended. %Moon had me add the part about "interleaved" -kmp 13-Feb-92 Events 2 and 3 are actually performed interleaved, in the order corresponding to the reverse order in which they were established. The effect of this is that the cleanup clauses of an \specref{unwind-protect} see the same dynamic \term{bindings} of variables and \term{catch tags} as were visible when the \specref{unwind-protect} was entered. Event 4 occurs at the end of the transfer of control. \endissue{EXIT-EXTENT:MINIMAL}