tclass5.pp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. { %RESULT=210 }
  2. {$R+}
  3. {$mode objfpc}
  4. program test_fail;
  5. type
  6. parrayobj = ^tarraycla;
  7. tarraycla = class
  8. ar : array [1..4] of real;
  9. constructor create(do_fail : boolean);
  10. procedure test;virtual;
  11. destructor done;virtual;
  12. end;
  13. pbigarrayobj = ^tbigarraycla;
  14. tbigarraycla = class(tarraycla)
  15. ar2 : array [1..10000] of real;
  16. constructor good_init;
  17. constructor wrong_init;
  18. procedure test;virtual;
  19. end;
  20. var
  21. ta1, ta2 : tarraycla;
  22. availmem : longint;
  23. constructor tarraycla.create(do_fail : boolean);
  24. begin
  25. ar[1]:=1;
  26. if do_fail then
  27. fail;
  28. ar[2]:=2;
  29. end;
  30. destructor tarraycla.done;
  31. begin
  32. end;
  33. procedure tarraycla.test;
  34. begin
  35. if ar[1]=1 then
  36. Writeln('Init called');
  37. if ar[2]=2 then
  38. Writeln('Init successful');
  39. end;
  40. constructor tbigarraycla.good_init;
  41. begin
  42. inherited create(false);
  43. Writeln('End of tbigarraycla.good_init');
  44. end;
  45. constructor tbigarraycla.wrong_init;
  46. begin
  47. inherited create(true);
  48. Writeln('End of tbigarraycla.wrong_init');
  49. end;
  50. procedure tbigarraycla.test;
  51. begin
  52. Writeln('tbigarraycla.test called');
  53. Inherited test;
  54. end;
  55. begin
  56. availmem:=memavail;
  57. ta1:=tarraycla.create(false);
  58. writeln('Call to ta1.test after successful init');
  59. ta1.test;
  60. ta2:=tarraycla.create(true);
  61. writeln('ta2 = ',longint(ta2),' after unsuccessful init');
  62. Writeln('Trying to call ta2.test (should generate a Run Time Error)');
  63. ta2.test;
  64. end.