>>
<
>
<>
<>
<>
<>
Table: DEFINITIONS = {
Base: TYPE = LONG ORDERED BASE POINTER;
Finger: TYPE = LONG POINTER TO Base;
Index: TYPE = Base RELATIVE LONG POINTER;
OrderedIndex: TYPE = Base RELATIVE LONG ORDERED POINTER;
<>
Tag: TYPE = BYTE;
HighBits: TYPE = BYTE;
LowBits: TYPE = CARD16;
tagBitLo: NAT = IF BITS[WORD] = 16 THEN 16 ELSE 0;
tagBitHi: NAT = tagBitLo+BITS[Tag]-1;
restBitLo: NAT = tagBitHi+1;
restBitHi: NAT = restBitLo+BITS[HighBits]-1;
lowBitLo: NAT = IF BITS[WORD] = 16 THEN 0 ELSE 16;
lowBitHi: NAT = lowBitLo+BITS[LowBits]-1;
IndexRep: TYPE = MACHINE DEPENDENT RECORD [
tag (0: tagBitLo..tagBitHi): Tag ¬ 0,
highBits (0: restBitLo..restBitHi): HighBits ¬ HighBits.LAST,
lowBits (0: lowBitLo..lowBitHi): LowBits ¬ LowBits.LAST];
IPointer: TYPE = LONG POINTER;
Selector: TYPE = NAT;
chunkType: Selector = Selector.FIRST;
}.