M3GL.DEF 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. DEFINITION MODULE M3GL; (*NW 19.5.83 / 18.10.84*)
  2. FROM FileSystem IMPORT File;
  3. FROM M3DL IMPORT ObjPtr, StrPtr, ParPtr, ConstValue, KeyPtr;
  4. TYPE ItemMode =
  5. (conMd, cldMd, typMd, varMd, fldMd, procMd, codMd, expMd, adrMd, inxMd);
  6. TYPE Item =
  7. RECORD typ: StrPtr;
  8. CASE mode: ItemMode OF
  9. conMd, cldMd: val: ConstValue |
  10. typMd: |
  11. varMd: var: ObjPtr |
  12. fldMd: off: INTEGER |
  13. procMd: proc: ObjPtr; sp: INTEGER |
  14. codMd: cod: ObjPtr |
  15. expMd, adrMd, inxMd:
  16. END
  17. END ;
  18. TYPE LabelRange = RECORD low, high: INTEGER; label: CARDINAL END ;
  19. VAR pc, curLev, curPrio: CARDINAL; rngchk: BOOLEAN;
  20. PROCEDURE load(VAR x: Item); (*force loading of x*)
  21. PROCEDURE loadAdr(VAR x: Item); (*force loading of adr(x) *)
  22. PROCEDURE fixup(loc: CARDINAL); (*enter current label at loc*)
  23. PROCEDURE fixupC(loc: CARDINAL); (*enter current label at loc*)
  24. PROCEDURE FixupEnter(L: CARDINAL; size: INTEGER);
  25. PROCEDURE AllocString(s: CARDINAL; VAR adr, length: CARDINAL);
  26. PROCEDURE GenItem(VAR x: Item; y, Scope: ObjPtr);
  27. (*Scope is used for fields in with statements*)
  28. PROCEDURE GenIndex(VAR x, y: Item); (*x := x[y]*)
  29. PROCEDURE GenField(VAR x: Item; f: ObjPtr); (*x := x.f*)
  30. PROCEDURE GenWith(VAR x: Item; adr: INTEGER);
  31. PROCEDURE GenDeRef(VAR x: Item); (*x := x^ *)
  32. PROCEDURE GenNeg(VAR x: Item); (*x := -x*)
  33. PROCEDURE GenNot(VAR x: Item); (*x := ~x*)
  34. PROCEDURE GenAnd(VAR x: Item);
  35. PROCEDURE GenOr(VAR x: Item);
  36. PROCEDURE GenIn(VAR x, y: Item); (*x := x IN y*)
  37. PROCEDURE GenSet(VAR x, e1, e2: Item); (*x := {e1..e2}*)
  38. PROCEDURE GenSingSet(VAR x, e: Item); (*x := {e}*)
  39. PROCEDURE GenOp(op: CARDINAL; VAR x, y: Item); (*x := x*y*)
  40. PROCEDURE PrepAss(VAR x: Item);
  41. PROCEDURE GenAssign(VAR x, y: Item);
  42. PROCEDURE GenFJ(VAR loc: CARDINAL); (*forward jump; loc := label*)
  43. PROCEDURE GenCFJ(VAR x: Item; VAR loc: CARDINAL);
  44. PROCEDURE GenBJ(loc: CARDINAL); (*backward jump to loc*)
  45. PROCEDURE GenCBJ(VAR x: Item; loc: CARDINAL);
  46. PROCEDURE PrepCall(VAR x: Item; VAR fpar: ParPtr);
  47. PROCEDURE GenParam(VAR x: Item; fp: ParPtr);
  48. PROCEDURE GenCall(VAR x: Item);
  49. PROCEDURE GenEnter(VAR L: CARDINAL; proc: ObjPtr);
  50. PROCEDURE GenResult(VAR x: Item; proc: ObjPtr);
  51. PROCEDURE GenEnterMod(mod: ObjPtr);
  52. PROCEDURE GenReturn;
  53. PROCEDURE GenCase1(VAR x: Item; VAR L0: CARDINAL);
  54. PROCEDURE GenCase2;
  55. PROCEDURE GenCase3(L0, L1, n: CARDINAL; VAR tab: ARRAY OF LabelRange);
  56. PROCEDURE GenTrap(n: CARDINAL);
  57. PROCEDURE GenFor1(VAR v, e1: Item);
  58. PROCEDURE GenFor2(VAR v, e2: Item);
  59. PROCEDURE GenFor3(VAR e3: Item; VAR L0, L1: CARDINAL);
  60. PROCEDURE GenFor4(VAR e3: Item; L0, L1: CARDINAL);
  61. PROCEDURE GenStParam(VAR p, x: Item; fctno, parno: CARDINAL);
  62. PROCEDURE GenStFct(VAR x: Item; fctno, parno: CARDINAL);
  63. PROCEDURE CheckStack;
  64. PROCEDURE GenEndDecl(ancestor: ObjPtr; modno: CARDINAL);
  65. PROCEDURE InitGenerator;
  66. PROCEDURE OutCodeFile(VAR name: ARRAY OF CHAR; stamp: KeyPtr;
  67. adr: INTEGER; pno, progid, modNo: CARDINAL; ModList: ObjPtr);
  68. END M3GL.