tclass5.pp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. constructor tarraycla.create(do_fail : boolean);
  23. begin
  24. ar[1]:=1;
  25. if do_fail then
  26. fail;
  27. ar[2]:=2;
  28. end;
  29. destructor tarraycla.done;
  30. begin
  31. end;
  32. procedure tarraycla.test;
  33. begin
  34. if ar[1]=1 then
  35. Writeln('Init called');
  36. if ar[2]=2 then
  37. Writeln('Init successful');
  38. end;
  39. constructor tbigarraycla.good_init;
  40. begin
  41. inherited create(false);
  42. Writeln('End of tbigarraycla.good_init');
  43. end;
  44. constructor tbigarraycla.wrong_init;
  45. begin
  46. inherited create(true);
  47. Writeln('End of tbigarraycla.wrong_init');
  48. end;
  49. procedure tbigarraycla.test;
  50. begin
  51. Writeln('tbigarraycla.test called');
  52. Inherited test;
  53. end;
  54. begin
  55. ta1:=tarraycla.create(false);
  56. writeln('Call to ta1.test after successful init');
  57. ta1.test;
  58. ta2:=tarraycla.create(true);
  59. writeln('ta2 = ',ptrint(ta2),' after unsuccessful init');
  60. Writeln('Trying to call ta2.test (should generate a Run Time Error)');
  61. ta2.test;
  62. end.