UNSAFE INTERFACEThis interface defines the low-level routines and data structures used by the exception runtime.RTExFrame ; IMPORT Csetjmp, RT0;
----------------------------------------- compiler generated descriptors --
TYPE
ScopeKind = { Except, ExceptElse,
Finally, FinallyProc,
Raises, RaisesNone,
Lock };
TYPE
Frame = UNTRACED REF EF;
TYPE
ExceptionList = UNTRACED REF (*ARRAY OF*) RT0.ExceptionUID;
FinallyProc = PROCEDURE (VAR a: RT0.RaiseActivation) RAISES ANY;
TYPE (* RaisesNone *)
EF = RECORD
next : Frame;
class : INTEGER; (* ORD(ScopeKind) *)
END;
TYPE (* Except, ExceptElse, Finally *)
PF1 = UNTRACED REF EF1;
EF1 = RECORD
next : Frame;
class : INTEGER; (* ORD(ScopeKind) *)
handles : ExceptionList; (* NIL-terminated list of exceptions handled *)
info : RT0.RaiseActivation; (* current exception being dispatched *)
jmpbuf : Csetjmp.jmp_buf;
END;
TYPE (* FinallyProc *)
PF2 = UNTRACED REF EF2;
EF2 = RECORD
next : Frame;
class : INTEGER; (* ORD(ScopeKind) *)
handler : ADDRESS; (* the procedure *)
frame : ADDRESS; (* static link for the handler *)
END;
TYPE (* Raises *)
PF3 = UNTRACED REF EF3;
EF3 = RECORD
next : Frame;
class : INTEGER; (* ORD(ScopeKind) *)
raises : ExceptionList; (* NIL-terminated list of exceptions allowed *)
END;
TYPE (* Lock *)
PF4 = UNTRACED REF EF4;
EF4 = RECORD
next : Frame;
class : INTEGER; (* ORD(ScopeKind) *)
mutex : MUTEX; (* the locked mutex *)
END;
END RTExFrame.