-- JaMMasterDefs.mesa
-- Written by: John Warnock, January 1979.
-- Last changed by Doug Wyatt, February 10, 1981 2:00 PM

DIRECTORY
StreamDefs USING [StreamHandle];

-- Basic definitions required by the JaM Machine.

JaMMasterDefs: DEFINITIONS = {

Object: TYPE = MACHINE DEPENDENT RECORD [
litflag(0:0..0): MACHINE DEPENDENT {lit(0),nolit(1)},
DataField(0:1..63): SELECT Type(0:1..15): MType FROM
IntegerType => [IntegerVal(1:0..15): INTEGER],
LongIntegerType => [LongIntegerVal(1:0..31): LONG INTEGER],
RealType => [RealVal(1:0..31): REAL],
BooleanType => [BooleanVal(1:0..15): BOOLEAN],
StringType => [Offset(1:0..0): [0..1],
Length(1:1..15): [0..77777B],
Address(2:0..31): LONG POINTER],
StreamType => [SHandle(1:0..15): StreamDefs.StreamHandle],
CommandType => [Command(1:0..15): CommandIndex],
DictType => [Address(1:0..31): LONG POINTER],
ArrayType => [Length(1:0..15): CARDINAL,
ArrayPtr(2:0..31): LONG POINTER],
StackType => [StkPtr(1:0..15): Stack],
FrameType => [FrmPtr(1:0..15): POINTER TO Frame],
MarkType => [],
UserType => [Type(1:0..15): CARDINAL,
Address(2:0..31): LONG POINTER],
NullType => [],
ENDCASE];

MType: TYPE = MACHINE DEPENDENT {
IntegerType(0), LongIntegerType(1), RealType(2),
BooleanType(3), StringType(4), StreamType(5), CommandType(6),
DictType(7), ArrayType(8), StackType(9), FrameType(10),
MarkType(11), UserType(12), NullType(13)};

CommandIndex: TYPE = CARDINAL;

-- Basic stack definitions.

Frame: TYPE = MACHINE DEPENDENT RECORD [opstk,dictstk,execstk:Stack];
Stack: TYPE = POINTER TO StackLink;
StackLink: TYPE = POINTER TO StackEntry;
StackEntry: TYPE = MACHINE DEPENDENT RECORD [ob:Object,nextEntry:StackLink];

}.