t_goto.mod 480 B

1234567891011121314151617181920212223
  1. MODULE TGoto;
  2. (* GOTO/labels: backward loop, forward jump, and a procedure-local label.
  3. Exit 42. *)
  4. VAR ExitCode, i, s : INTEGER;
  5. PROCEDURE P () : INTEGER;
  6. VAR i, s : INTEGER;
  7. BEGIN
  8. i := 0; s := 0;
  9. top:
  10. IF i < 4 THEN s := s + i; INC(i); GOTO top END;
  11. RETURN s
  12. END P;
  13. BEGIN
  14. i := 0; s := 0;
  15. loop:
  16. IF i < 5 THEN s := s + i; INC(i); GOTO loop END;
  17. GOTO done;
  18. s := 999;
  19. done:
  20. IF (s = 10) AND (P() = 6) THEN ExitCode := 42 ELSE ExitCode := s + P() END
  21. END TGoto.