<> <> <> <> <> DragonRuntimeSupport: CEDAR DEFINITIONS = BEGIN <> <> ProcAny: TYPE = PROC ANY RETURNS ANY; ProcPtr: TYPE = LONG POINTER TO ProcAny; Comparison: TYPE = MACHINE DEPENDENT {less(0), equal(1), greater(2)}; PTR: TYPE = LONG POINTER TO Word; Word: TYPE = PACKED ARRAY [0..bitsPerWord) OF BOOL; bitsPerWord: NAT = 32; <> RefPtr: TYPE = LONG POINTER TO REF; Type: TYPE = MACHINE DEPENDENT { <> nullType (0), lastType (177777B) }; <> <> <<>> RegArrayPtr: TYPE = LONG POINTER TO RegArray; RegArray: TYPE = ARRAY [0..15] OF Word; ExceptAny: TYPE = SIGNAL ANY RETURNS ANY; <> <> <> <<>> LockPtr: TYPE = LONG POINTER TO LockRep; LockRep: TYPE; -- for MONITORLOCK CondPtr: TYPE = LONG POINTER TO CondRep; CondRep: TYPE; -- for CONDITION Process: TYPE = LONG POINTER TO ProcessRep; -- for PROCESS ProcessRep: TYPE; <> <> MixedMul: PROC [x: CARD, y: INT] RETURNS [INT]; <> <> <> <> <> <> <<>> IntMul: PROC [x, y: INT] RETURNS [INT]; <> <> <> <<>> IntDiv: PROC [x, y: INT] RETURNS [INT]; <> <> <> <> <<>> IntMod: PROC [x,y: INT] RETURNS [INT]; <> <> <> <> <<(i.e. FIRST[INT]/-1)>> <<>> <> <> <> <> CardMul: PROC [x, y: CARD] RETURNS [CARD]; <> <> <> <<>> CardDiv: PROC [x, y: CARD] RETURNS [CARD]; <> <> <> <> <> <<>> CardMod: PROC [x, y: CARD] RETURNS [CARD]; <> <> <> <> <> <<>> <> <> <> <> RealCompare: PROC [x, y: REAL] RETURNS [Comparison]; <> <> <<>> RealAdd: PROC [x, y: REAL] RETURNS [REAL]; <> <> <<>> RealSub: PROC [x, y: REAL] RETURNS [REAL]; <> <> <<>> RealMul: PROC [x, y: REAL] RETURNS [REAL]; <> <> <<>> RealDiv: PROC [x, y: REAL] RETURNS [REAL]; <> <> <<>> RealMod: PROC [x, y: REAL] RETURNS [REAL]; <> <> <<>> RealScale: PROC [r: REAL, scale: INTEGER] RETURNS [REAL]; <> <> <<>> Float: PROC [int: INT] RETURNS [REAL]; <> <> <<>> Fix: PROC [r: REAL, mode: RoundingMode _ rn] RETURNS [INT]; <> <> RoundingMode: TYPE = MACHINE DEPENDENT {rn, rz, rm, rp}; <> <> <> <> <<>> <> ArithmeticOverflow: ERROR; <> <<>> ZeroDivisor: ERROR; <> <<>> BoundsFault: ERROR; <> <<>> <> <<(The compiler does not know the details, and does not use this error explictly).>> <> <> <> <<>> MoveWords: PROC [src: PTR, dst: PTR, nWords: INT]; <> <<>> MoveWordsDisjoint: PROC [src: PTR, dst: PTR, nWords: INT]; <> <> <> <<>> FillWords: PROC [src: Word, dst: PTR, nWords: INT]; <> FillMultiWords: PROC [src: PTR, srcSize: INT, dst: PTR, nTimes: INT]; <> <> <> <<>> EqualWords: PROC [x: PTR, y: PTR, nWords: INT] RETURNS [BOOL]; <> <> <> <<>> ExtractField: PROC [base: PTR, offset: INT, bits: [0..bitsPerWord]] RETURNS [Word]; <> <<>> DepositField: PROC [base: PTR, offset: INT, bits: [0..bitsPerWord], word: Word]; <> <<>> MoveFields: PROC [ src: PTR, srcOffset: INT, dst: PTR, dstOffset: PTR, bits: [0..bitsPerWord], times: INT]; <> <<>> FillFields: PROC [dst: PTR, dstOffset: PTR, bits: [0..bitsPerWord], times: INT, value: Word]; <> <> Fork: PROC [proc: ProcAny, args: PTR] RETURNS [Process]; <> Join: PROC [process: Process] RETURNS [rets: PTR]; <> Wait: PROC [cond: CondPtr, lock: LockPtr]; <> Notify: PROC [cond: CondPtr, lock: LockPtr]; <> Broadcast: PROC [cond: CondPtr, lock: LockPtr]; <> MonitorEntry: PROC [lock: LockPtr]; <> MonitorExit: PROC [lock: LockPtr]; <> <> <> <<>> ExtensionAlloc: PROC [nWords: INT] RETURNS [PTR]; <> ExtensionFree: PROC [ptr: PTR] RETURNS [PTR _ NIL]; <> <> <> <<>> CopyModule: PROC; <> <<>> StartModule: PROC [module: PTR, args: PTR]; <> RestartModule: PROC [module: PTR, args: PTR]; <> StopModule: PROC; <> <> <> <<>> <> <<>> HandlerAction: TYPE = {reject, resume, exit}; BytePC: TYPE = WORD; HandlerType: TYPE = PROC [regsPtr: RegArrayPtr, except: ExceptAny, rtnPtr: PTR, argPtr: PTR] RETURNS[action: HandlerAction, pc: BytePC, levels: NAT]; <> <> <> < CONTINUE]>> <> <<>> RaiseSignal: PROC [which: ExceptAny, rtns: PTR, args: PTR]; <> <<>> RaiseError: PROC [which: ExceptAny, args: PTR]; <> <<>> ExceptionBody: PROC; <> <<>> AbortedError: ERROR; <> UnwindError: ERROR; <> UnnamedError: ERROR; <> UnnamedSignal: SIGNAL; <> UncaughtError: ERROR; <> <> <> <<>> AssignRef: PROC [dstPtr: RefPtr, src: REF]; <> AssignNil: PROC [dstPtr: RefPtr]; <> AssignRefComposite: PROC [dst: PTR, src: PTR, type: Type]; <> AssignRefCompositeFault: ERROR; <> IncRC: PROC [ref: REF]; <> DecRC: PROC [ref: REF]; <> GetReferentType: PROC [ref: REF] RETURNS [Type]; <> Narrow: PROC [ref: REF, type: Type] RETURNS [REF]; <> <<>> NarrowFault: ERROR [ref: REF, type: Type]; <> <<>> AssignProc: PROC [dstPtr: ProcPtr, src: ProcAny]; <> <<>> CheckProc: PROC [proc: ProcAny]; <> <<>> NestedProcError: ERROR [proc: ProcAny]; <> <<>> NewObject: PROC [nWords: INT, type: Type] RETURNS [REF]; <> <<>> END.