showcase10.mod 684 B

123456789101112131415161718192021222324252627282930313233343536
  1. MODULE Showcase10;
  2. // Step 4.2 tour: nested procedures, static-link display,
  3. // siblings sharing parent state, nested recursion, up-level
  4. // writes, calls. Exit 86.
  5. VAR ExitCode : INTEGER;
  6. PROCEDURE Calc(base : INTEGER);
  7. VAR acc : INTEGER;
  8. PROCEDURE AddN(n : INTEGER);
  9. BEGIN
  10. acc := acc + n
  11. END AddN;
  12. PROCEDURE Run(k : INTEGER);
  13. VAR inner : INTEGER;
  14. PROCEDURE Down(m : INTEGER);
  15. BEGIN
  16. IF m <= 0 THEN RETURN END;
  17. inner := inner + m;
  18. Down(m - 1)
  19. END Down;
  20. BEGIN
  21. inner := 0;
  22. Down(k);
  23. acc := acc + inner
  24. END Run;
  25. BEGIN
  26. acc := base;
  27. AddN(10);
  28. Run(4);
  29. Run(3);
  30. ExitCode := acc
  31. END Calc;
  32. BEGIN
  33. Calc(60)
  34. END Showcase10.