| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- DEFINITION MODULE M3DL; (*NW 2.6.84 / 2.11.85*)
- FROM SYSTEM IMPORT ADDRESS;
- CONST WordSize = 16;
- nilval = 177777B;
- MaxCodeLength = 8;
- TYPE
- ObjPtr = POINTER TO Object;
- StrPtr = POINTER TO Structure;
- ParPtr = POINTER TO Parameter;
- PDPtr = POINTER TO PDesc;
- KeyPtr = POINTER TO Key;
- ObjClass = (Header, Const, Typ, Var, Field, Proc, Code, Module, Temp);
- StrForm = (Undef, Bool, Char, Card, Int, Double, Real, String,
- Enum, Range, Pointer, Set, Array, Record, ProcTyp, Opaque);
- ConstValue =
- RECORD
- CASE : StrForm OF
- Bool: B: BOOLEAN |
- Char: Ch: CHAR |
- Int: I: INTEGER |
- Card, Enum: C: CARDINAL; prev: ObjPtr |
- Set: S: BITSET |
- Double: D: LONGINT |
- Real: R: REAL |
- String: D0, D1, D2, D3: CARDINAL
- END
- END;
- Object =
- RECORD
- name: CARDINAL; (*index to name buffer*)
- typ: StrPtr;
- left, right, next: ObjPtr;
- exported: BOOLEAN;
- CASE class: ObjClass OF
- Header: kind: ObjClass; (*Proc, Module or Typ*)
- last, heap: ObjPtr; withadr: INTEGER |
- Const: conval: ConstValue |
- Typ: mod: ObjPtr |
- Var: param: BITSET;
- vmod, vlev: CARDINAL; vadr: INTEGER |
- Field: offset: INTEGER |
- Proc: pd: PDPtr;
- firstParam: ParPtr;
- firstLocal: ObjPtr;
- pmod: CARDINAL |
- Code: cd: PDPtr;
- firstArg: ParPtr;
- cnum, length: CARDINAL |
- Module: key: KeyPtr;
- firstObj, root: ObjPtr;
- modno: CARDINAL |
- Temp: baseref: CARDINAL
- END
- END;
- PDesc = RECORD
- CASE : BOOLEAN OF
- TRUE: num, lev: CARDINAL; adr, size: INTEGER |
- FALSE: cod: ARRAY [0..MaxCodeLength-1] OF CHAR
- END
- END;
- Structure =
- RECORD
- strobj: ObjPtr; (*object (type) naming structure*)
- size: INTEGER;
- ref: CARDINAL;
- CASE form: StrForm OF
- Undef, Bool, Char, Int, Card, Double, Real, String: |
- Enum: ConstLink: ObjPtr; NofConst: CARDINAL |
- Range: RBaseTyp: StrPtr;
- min, max: INTEGER |
- Pointer: PBaseTyp: StrPtr;
- BaseId: CARDINAL | (*to handle forward refs*)
- Set: SBaseTyp: StrPtr |
- Array: ElemTyp, IndexTyp: StrPtr;
- dyn: BOOLEAN |
- Record: firstFld: ObjPtr |
- ProcTyp: firstPar: ParPtr;
- resTyp: StrPtr |
- Opaque:
- END
- END;
- Parameter = RECORD name: CARDINAL; varpar: BOOLEAN;
- typ: StrPtr; next: ParPtr
- END;
- Key = RECORD k0, k1, k2: CARDINAL
- END;
- VAR mainmod, sysmod: ObjPtr;
- undftyp, booltyp, chartyp, inttyp, cardtyp, bitstyp, dbltyp, realtyp,
- proctyp, notyp, stringtyp, addrtyp, wordtyp: StrPtr;
- PROCEDURE ALLOCATE(VAR a: ADDRESS; n: CARDINAL);
- PROCEDURE Available(): CARDINAL;
- PROCEDURE ResetHeap(a: ADDRESS);
- END M3DL.
|