RTTypesPrivate.Mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Rovner, June 28, 1983 3:21 pm
Russ Atkinson (RRA) February 11, 1985 12:25:49 pm PST
DIRECTORY
AMBridge USING [TVHeadType, WordSequence, RemoteRef, RemotePointer, nilRemotePointer, RemoteFrameHandle, RemoteGlobalFrameHandle],
AMTypes USING [Status, TypedVariable],
PrincOps USING [ProcDesc, SignalDesc, FrameHandle, GlobalFrameHandle, BytePC, EPRange, ControlLink, StateVector],
Rope USING [ROPE],
RTCommon USING [Field],
RTSymbolDefs USING [SymbolTableBase, SymbolIdIndex, BodyIndex, CallableBodyIndex],
SafeStorage USING [Type],
WorldVM USING [World];
RTTypesPrivate: DEFINITIONS
= BEGIN OPEN AMBridge, AMTypes, PrincOps, RTSymbolDefs, SafeStorage, WorldVM;
T Y P E S
TypedVariableRec: TYPE = RECORD[
referentType: TypeBundle,
head: TypedVariableHead,
status: Status ← mutable,
field: SELECT tag: * FROM
entire => [],
embedded => [fd: FieldDescriptor],
constant => [value: WordSequence]
ENDCASE
];
TypeBundle: TYPE = RECORD[type: Type, tag: TypedVariable ← NIL];
TypedVariableHead: TYPE = RECORD[
SELECT tag: TVHeadType FROM
reference => [ref: REF ANY],
remoteReference => [remoteRef: RemoteRef],
copiedRemoteObject => [
world: World ← ,
worldIncarnation: LONG CARDINAL,
copy: WordSequence
],
pointer => [ptr: LONG POINTER],
remotePointer => [remotePointer: RemotePointer],
gfh => [gfh: GlobalFrameHandle],
remoteGFH => [remoteGlobalFrameHandle: RemoteGlobalFrameHandle],
fh => [
fh: FrameHandle,
bti: BodyIndex,
evalStack: POINTER TO StateVector,
isCatchFrame: BOOLFALSE,
return: BOOL,
contextPC: BOOL
],
remoteFH => [
remoteFrameHandle: RemoteFrameHandle,
bti: BodyIndex,
evalStack: WordSequence ← ,
isCatchFrame: BOOLFALSE,
return: BOOL,
contextPC: BOOL
],
constant => [],
remoteConstant => [world: World ← , worldIncarnation: LONG CARDINAL]
ENDCASE
];
FieldDescriptor: TYPE = RECORD[
wordOffset: INTEGER,
extent: SELECT magnitude: * FROM
small => [field: RTCommon.Field],
large => [size: CARDINAL],
ENDCASE
];
EVRange: TYPE = [0..4*EPRange);
ValueAddress: TYPE = RECORD[
SELECT tag: * FROM
constant => [value: WordSequence ← ],
pointer => [
ptr: LONG POINTERNIL, --includes the word offset
fd: FieldDescriptor ← [wordOffset: 0, extent: large[size: 0]]
],
remotePointer => [
ptr: RemotePointer ← nilRemotePointer, --includes word offset
fd: FieldDescriptor ← [wordOffset: 0, extent: large[size: 0]]
],
copiedRemoteObject => [
ptr: LONG POINTERNIL, --includes the word offset
fd: FieldDescriptor ← [wordOffset: 0, extent: large[size: 0]]
]
ENDCASE
];
PROCEDURES
GetIdConstantValue: PROC [ tv: TypedVariable, stb: SymbolTableBase, isei: SymbolIdIndex] RETURNS [WordSequence];
BuildRecordFieldDescriptor: PROC [ parentTV: TypedVariable, fieldBitOffset, fieldBits, bitsForType: INT] RETURNS [fD: FieldDescriptor];
GetValueAddress: PROC [tv: TypedVariable, mutableOnly: BOOLFALSE] RETURNS [ValueAddress];
if mutableOnly then can raise Error[notMutable]
RecordComponentISEI: PROC [ type: Type, index: NAT, p: PROC [stb: SymbolTableBase, isei: SymbolIdIndex] ];
UnderClass[type]  {record}
ComponentISEI: PROC [ type: Type, index: NAT, p: PROC [stb: SymbolTableBase, isei: SymbolIdIndex] ];
UnderClass[type]  {record, union, enumerated}
PDToName: PROC [pd: ProcDesc] RETURNS [Rope.ROPE];
SEDToName: PROC [sed: SignalDesc] RETURNS [Rope.ROPE];
GFHToName: PROC [gfh: GlobalFrameHandle] RETURNS [Rope.ROPE];
GetCBTI: PROC [stb: SymbolTableBase, epn: CARDINAL] RETURNS [cbti: CallableBodyIndex];
ConvertCbti: PROC [ lastBti: BodyIndex, pc, start: BytePC, base: SymbolTableBase ] RETURNS [bti: BodyIndex];
GetEp: PROC [pc: BytePC, gf: GlobalFrameHandle, stb: SymbolTableBase] RETURNS [ep: EVRange, start: BytePC];
GetPc: PROC [gf: GlobalFrameHandle, i: EVRange] RETURNS [BytePC];
BitsForType: PROC [type: Type] RETURNS [bft: LONG CARDINAL, argumentRecord, interfaceRecord: BOOL];
GetOrigin: PROC [type: Type] RETURNS [origin: INTEGER];
UnderClass[type]  {subRange}
UnwindIndirectProcDesc: PROC [icl: ControlLink] RETURNS [ProcDesc];
END.