erroru.pp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. {$J+}
  2. unit erroru;
  3. interface
  4. procedure do_error(l : longint);
  5. procedure error;
  6. procedure accept_error(num : longint);
  7. procedure require_error(num : longint);
  8. function DoMem (Var StartMem : sizeuint): int64;
  9. implementation
  10. const
  11. program_has_error : boolean = false;
  12. accepted_error_num : longint = 0;
  13. required_error_num : longint = 0;
  14. procedure do_error(l : longint);
  15. begin
  16. writeln('Error near: ',l);
  17. halt(100);
  18. end;
  19. procedure error;
  20. begin
  21. Writeln('Error' {$ifdef FPC_HAS_FEATURE_COMMANDARGS},' in ',paramstr(0){$endif FPC_HAS_FEATURE_COMMANDARGS});
  22. program_has_error:=true;
  23. end;
  24. procedure accept_error(num : longint);
  25. begin
  26. accepted_error_num:=num;
  27. end;
  28. procedure require_error(num : longint);
  29. begin
  30. required_error_num:=num;
  31. accepted_error_num:=num;
  32. end;
  33. procedure error_unit_exit;
  34. begin
  35. if exitcode<>0 then
  36. begin
  37. if (required_error_num<>0) and (exitcode<>required_error_num) then
  38. begin
  39. Write('Program'{$ifdef FPC_HAS_FEATURE_COMMANDARGS},' ',paramstr(0){$endif FPC_HAS_FEATURE_COMMANDARGS});
  40. Write(' exited with error ',exitcode,' whereas error ');
  41. Writeln(required_error_num,' was expected');
  42. Halt(1);
  43. end
  44. else if exitcode<>accepted_error_num then
  45. begin
  46. Write('Program'{$ifdef FPC_HAS_FEATURE_COMMANDARGS},' ',paramstr(0){$endif FPC_HAS_FEATURE_COMMANDARGS});
  47. Write(' exited with error ',exitcode,' whereas only error ');
  48. Writeln(accepted_error_num,' was expected');
  49. Halt(1);
  50. end;
  51. end
  52. else if required_error_num<>0 then
  53. begin
  54. Write('Program'{$ifdef FPC_HAS_FEATURE_COMMANDARGS},' ',paramstr(0){$endif FPC_HAS_FEATURE_COMMANDARGS});
  55. Write(' exited without error whereas error ');
  56. Writeln(required_error_num,' was expected');
  57. Halt(1);
  58. end;
  59. if program_has_error then
  60. Halt(1)
  61. else
  62. begin
  63. exitcode:=0;
  64. {$ifndef CPUJVM}
  65. erroraddr:=nil;
  66. {$endif ndef CPUJVM}
  67. end;
  68. end;
  69. function DoMem (Var StartMem : sizeuint): int64;
  70. function getsize(l:sizeuint):string;
  71. begin
  72. if l<16*1024 then
  73. begin
  74. str(l,getsize);
  75. getsize:=getsize+' bytes';
  76. end
  77. else
  78. begin
  79. str(l shr 10,getsize);
  80. getsize:=getsize+' Kb';
  81. end;
  82. end;
  83. {$ifndef CPUJVM}
  84. var
  85. hstatus : TFPCHeapstatus;
  86. {$endif ndef CPUJVM}
  87. begin
  88. {$ifndef CPUJVM}
  89. hstatus:=GetFPCHeapStatus;
  90. if StartMem=0 then
  91. begin
  92. Writeln ('[HEAP] Size: ',getsize(hstatus.CurrHeapSize),', Used: ',getsize(hstatus.CurrHeapUsed));
  93. DoMem:=0;
  94. end
  95. else
  96. begin
  97. Writeln ('[HEAP] Size: ',getsize(hstatus.CurrHeapSize),', Used: ',getsize(hstatus.CurrHeapUsed),
  98. ', Lost: ',getsize(hstatus.CurrHeapUsed-StartMem));
  99. DoMem:=hstatus.CurrHeapUsed-StartMem;
  100. end;
  101. StartMem:=hstatus.CurrHeapUsed;
  102. {$endif ndef CPUJVM}
  103. end;
  104. initialization
  105. finalization
  106. error_unit_exit;
  107. end.