DIRECTORY M2D: TYPE USING [SET, ObjPtr, HeaderPtr, ModulePtr, ProcPtr, PDPtr, ParPtr, StrPtr, ConstValue], M2S: TYPE USING [Symbol], M2I: TYPE USING [Relation]; M2G: CEDAR DEFINITIONS = BEGIN ItemMode: TYPE = { typMd, procMd, codMd, varMd, conMd, linxMd, sinxMd, ladrMd, sadrMd, opnMd, regMd, stkMd, jmpMd }; ItemPtr: TYPE = REF Item; Item: TYPE = RECORD [ mode: ItemMode _ stkMd, contxt: M2D.PDPtr _NIL, obj: M2D.ObjPtr _ NIL, typ: M2D.StrPtr _ NIL, val: M2D.ConstValue _ [Int [0]], lev: CARDINAL _ 0, off: CARDINAL _ 0, opr: CARDINAL _ 0, opt, opt2: [0..1] _ 0, reg, reg2: CARDINAL _ 0, expRegs: M2D.SET _ ALL [FALSE], rel: M2I.Relation _ false, Fjmp, Tjmp: CARDINAL _ 0 ]; NofCases: CARDINAL = 128; LabelRange: TYPE = RECORD [ low, high: LONG INTEGER, label: CARDINAL ]; LabelTabPtr: TYPE = REF LabelTable; LabelTable: TYPE = ARRAY [0..NofCases) OF LabelRange; GenItem: PROC [x: ItemPtr, y: M2D.ObjPtr, Scope: M2D.HeaderPtr]; -- Scope for fields in WITH stmts -- GenIndex: PROC [x, y: ItemPtr]; GenField: PROC [x: ItemPtr, f: M2D.ObjPtr]; GenDeRef: PROC [x: ItemPtr]; GenSingSet: PROC [x, e: ItemPtr]; GenSet: PROC [x, e1, e2: ItemPtr]; PrepAss: PUBLIC PROC [x: ItemPtr]; PrepCall: PROC [x: ItemPtr] RETURNS [fpar: M2D.ParPtr]; GenAssign: PUBLIC PROC [x, y: ItemPtr]; GenParam: PROC [ap: ItemPtr, f: M2D.ParPtr]; GenCall: PROC [x: ItemPtr]; GenEnterM: PROC [mod: M2D.ModulePtr]; GenInitM: PROC [mod: M2D.ModulePtr, modno: CARDINAL] RETURNS [loc: CARDINAL]; GenEnterP: PROC [proc: M2D.ProcPtr] RETURNS [loc1, loc2: CARDINAL]; GenInitP: PROC [proc: M2D.ProcPtr] RETURNS [loc1, loc2, cell: CARDINAL]; GenReturn: PROC [x: ItemPtr, ancestor: M2D.ObjPtr, loc: CARDINAL] RETURNS [Loc: CARDINAL]; GenTrap: PROC [n: CARDINAL]; GenCase1: PROC [x: ItemPtr] RETURNS [L0: CARDINAL]; GenCase2: PROC [l3: CARDINAL] RETURNS [L2: CARDINAL]; GenCase3: PROC [L0, L1, L2, n: CARDINAL, tab: LabelTabPtr]; GenFor1: PROC [v, e1: ItemPtr]; GenFor2: PROC [v, e2: ItemPtr]; GenFor3: PROC [v, e2, e3: ItemPtr] RETURNS [L0, L1: CARDINAL]; GenFor4: PROC [v, e3: ItemPtr, L0, L1: CARDINAL]; GenWith: PUBLIC PROC [v, x: ItemPtr]; rngchk: BOOLEAN; LoadAdr: PROC [x: ItemPtr]; LoadAdrStk: PROC [x: ItemPtr]; Load: PROC [x: ItemPtr]; LoadStk: PROC [x: ItemPtr]; GenFJ: PROC [loc: CARDINAL] RETURNS [Loc: CARDINAL]; GenCFJ: PROC [x: ItemPtr] RETURNS [loc: CARDINAL]; GenBJ: PROC [loc: CARDINAL]; GenCBJ: PROC [x: ItemPtr, loc: CARDINAL]; GenIn: PROC [x, y: ItemPtr]; GenNeg: PROC [x: ItemPtr]; GenNot: PROC [x: ItemPtr]; GenAnd: PROC [x: ItemPtr]; GenOr: PROC [x: ItemPtr]; GenOp: PROC [op: M2S.Symbol, x, y: ItemPtr]; GenStParam: PROC [p, x: ItemPtr, fctno, parno: CARDINAL]; GenStFct: PROC [p: ItemPtr, fctno, parno: CARDINAL]; END. ΈFILE: M2G.mesa Modula-2 Code-Generator Part 1 Last Edited by: Gutknecht, September 18, 1985 0:20:44 am PDT Satterthwaite December 11, 1985 9:42:41 am PST statements expressions ΚŠ˜Jšœ™Jšœ™šœ<™Jšžœœœ˜1J˜Jšžœœœ˜%J˜—šœ ™ J˜Jšœœ˜J˜Jšžœœ˜Jšž œœ˜Jšžœœ˜Jšžœœ˜J˜Jš žœœœœœ˜4Jšžœœœœ˜2Jšžœœœ˜Jšžœœœ˜)J˜Jšžœœ˜Jšžœœ˜Jšžœœ˜Jšžœœ˜Jšžœœ˜Jšžœœ!˜,J˜Jšž œœœ˜9Jšžœœœ˜4J˜J˜J˜—Jšœ˜J˜—…— ξ0