Literals.mesa
Copyright Ó 1985, 1986, 1987, 1988, 1991 by Xerox Corporation. All rights reserved.
Satterthwaite, June 25, 1986 9:34:11 am PDT
Russ Atkinson (RRA) August 16, 1988 4:29:52 pm PDT
DIRECTORY
SmallCards,
Symbols USING [Type, UNSPEC],
Table USING [Base, Finger, IndexRep, Selector, Tag];
Literals: DEFINITIONS = {
OPEN SmallCards;
Base: TYPE = Table.Base;
Finger: TYPE = Table.Finger;
tag codes (0-2 reserved)
ltTag: Table.Tag = 3;
stTag: Table.Tag = 4;
literal constants
WordSequence: TYPE = RECORD [SEQUENCE COMPUTED CARDINAL OF Symbols.UNSPEC];
WordSequencePtr: TYPE = LONG POINTER TO WordSequence;
LTRecord: TYPE = MACHINE DEPENDENT RECORD [
link: LTIndex,
class: LitClass,
pad1: Card13 ¬ 0,
pad2: Card15 ¬ 0,
datum: SELECT kind: * FROM
short => [value: Symbols.UNSPEC],
32 bits and less
long => [
bits: INT,
codeIndex: Card16,
value: SEQUENCE max: Card16 OF Symbols.UNSPEC]
ENDCASE];
LitClass: TYPE = MACHINE DEPENDENT {
unknown (0), unsigned (1), signed (2), either (3), real (4), bits(5)
};
LTIndex: TYPE = Base RELATIVE LONG POINTER TO LTRecord;
LTFirst: LTIndex = LOOPHOLE[Table.IndexRep[tag: ltTag, highBits:0, lowBits:0]];
LTLast: LTIndex = LOOPHOLE[Table.IndexRep[tag: ltTag]];
LTNull: LTIndex = LTLast;
LTId: TYPE = RECORD [baseP: Finger, index: LTIndex];
LitDescriptor: TYPE = RECORD [
bits: INT,
class: LitClass,
words: [0..1024],
offset: Base RELATIVE LONG POINTER TO WordSequence];
This type does not appear in files.
string literals
STRecord: TYPE = MACHINE DEPENDENT RECORD [
link: MSTIndex,
cases: SELECT kind: * FROM
master => [
local: BOOL,
pad1: Card13 ¬ 0,
codeIndex: Card16,
info: CARD,
length: Card16,
string: PACKED SEQUENCE maxLength: Card16 OF CHAR],
copy => [
mark: BOOL,
pad1: Card13 ¬ 0, pad2: Card16 ¬ 0],
heap => [
pad1: Card14 ¬ 0, pad2: Card16 ¬ 0,
type: Symbols.Type,
info: CARD]
ENDCASE];
STIndex: TYPE = Base RELATIVE LONG POINTER TO STRecord;
STFirst: STIndex = LOOPHOLE[Table.IndexRep[tag: stTag, highBits:0, lowBits:0]];
STLast: STIndex = LOOPHOLE[Table.IndexRep[tag: stTag]];
STNull: STIndex = STLast;
MSTIndex: TYPE = Base RELATIVE LONG POINTER TO STRecord.master;
table allocation codes
ltType: Table.Selector = 7;
stType: Table.Selector = 8;
}.