t_proctype.mod 665 B

123456789101112131415161718192021222324
  1. MODULE TProcType;
  2. // Procedure types: alias, procedure-typed variable, assignment of a
  3. // procedure name, and indirect call. Both the named parameter form
  4. // (a, b : INTEGER) and the type-only shorthand (INTEGER) are used.
  5. // Exit 42.
  6. TYPE BinOp = PROCEDURE (a, b : INTEGER) : INTEGER;
  7. TYPE UnOp = PROCEDURE (INTEGER) : INTEGER;
  8. VAR ExitCode : INTEGER;
  9. VAR f : BinOp;
  10. VAR g : UnOp;
  11. PROCEDURE Add (a, b : INTEGER) : INTEGER;
  12. BEGIN RETURN a + b END Add;
  13. PROCEDURE Neg (x : INTEGER) : INTEGER;
  14. BEGIN RETURN -x END Neg;
  15. BEGIN
  16. f := Add;
  17. ExitCode := f(40, 2); // 42
  18. g := Neg;
  19. ExitCode := ExitCode + g(-5) - 5 // 42 + 5 - 5 = 42
  20. END TProcType.