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];
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: BOOL ← FALSE,
return: BOOL,
contextPC: BOOL
],
remoteFH => [
remoteFrameHandle: RemoteFrameHandle,
bti: BodyIndex,
evalStack: WordSequence ← ,
isCatchFrame: BOOL ← FALSE,
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 POINTER ← NIL, --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 POINTER ← NIL, --includes the word offset
fd: FieldDescriptor ← [wordOffset: 0, extent: large[size: 0]]
]
ENDCASE
];
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:
BOOL ←
FALSE]
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];