erroru.pp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. unit erroru;
  2. interface
  3. procedure do_error(l : longint);
  4. procedure error;
  5. procedure accept_error(num : longint);
  6. procedure require_error(num : longint);
  7. implementation
  8. const
  9. program_has_error : boolean = false;
  10. accepted_error_num : longint = 0;
  11. required_error_num : longint = 0;
  12. procedure do_error(l : longint);
  13. begin
  14. writeln('Error near: ',l);
  15. halt(100);
  16. end;
  17. procedure error;
  18. begin
  19. Writeln('Error in ',paramstr(0));
  20. program_has_error:=true;
  21. end;
  22. procedure accept_error(num : longint);
  23. begin
  24. accepted_error_num:=num;
  25. end;
  26. procedure require_error(num : longint);
  27. begin
  28. required_error_num:=num;
  29. accepted_error_num:=num;
  30. end;
  31. procedure error_unit_exit;
  32. begin
  33. if exitcode<>0 then
  34. begin
  35. if (required_error_num<>0) and (exitcode<>required_error_num) then
  36. begin
  37. Write('Program ',paramstr(0));
  38. Write(' exited with error ',exitcode,' whereas error ');
  39. Writeln(required_error_num,' was expected');
  40. Halt(1);
  41. end
  42. else if exitcode<>accepted_error_num then
  43. begin
  44. Write('Program ',paramstr(0));
  45. Write(' exited with error ',exitcode,' whereas only error ');
  46. Writeln(accepted_error_num,' was expected');
  47. Halt(1);
  48. end;
  49. end
  50. else if required_error_num<>0 then
  51. begin
  52. Write('Program ',paramstr(0));
  53. Write(' exited without error whereas error ');
  54. Writeln(required_error_num,' was expected');
  55. Halt(1);
  56. end;
  57. if program_has_error then
  58. Halt(1)
  59. else
  60. begin
  61. exitcode:=0;
  62. erroraddr:=nil;
  63. end;
  64. end;
  65. finalization
  66. error_unit_exit;
  67. end.