tobject1.pp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. {$R+}
  2. program test_fail;
  3. uses
  4. erroru;
  5. type
  6. parrayobj = ^tarrayobj;
  7. tarrayobj = object
  8. ar : array [1..4] of real;
  9. constructor init(do_fail : boolean);
  10. procedure test;virtual;
  11. destructor done;virtual;
  12. end;
  13. pbigarrayobj = ^tbigarrayobj;
  14. tbigarrayobj = object(tarrayobj)
  15. ar2 : array [1..10000] of real;
  16. constructor good_init;
  17. constructor wrong_init;
  18. procedure test;virtual;
  19. end;
  20. var
  21. pa1, pa2 : parrayobj;
  22. ta1, ta2 : tarrayobj;
  23. constructor tarrayobj.init(do_fail : boolean);
  24. begin
  25. ar[1]:=1;
  26. if do_fail then
  27. fail;
  28. ar[2]:=2;
  29. end;
  30. destructor tarrayobj.done;
  31. begin
  32. end;
  33. procedure tarrayobj.test;
  34. begin
  35. Writeln('@self = ',ptrint(@self));
  36. Writeln('typeof = ',ptrint(typeof(self)));
  37. if ar[1]=1 then
  38. Writeln('Init called');
  39. if ar[2]=2 then
  40. Writeln('Init successful');
  41. end;
  42. constructor tbigarrayobj.good_init;
  43. begin
  44. inherited init(false);
  45. Writeln('End of tbigarrayobj.good_init');
  46. end;
  47. constructor tbigarrayobj.wrong_init;
  48. begin
  49. inherited init(true);
  50. Writeln('End of tbigarrayobj.wrong_init');
  51. end;
  52. procedure tbigarrayobj.test;
  53. begin
  54. Writeln('tbigarrayobj.test called');
  55. Inherited test;
  56. end;
  57. var
  58. mem : sizeint;
  59. begin
  60. require_error(210);
  61. mem:=0;
  62. DoMem(mem);
  63. new(pa1,init(false));
  64. writeln('After successful new(pa1,init)');
  65. new(pa2,init(true));
  66. writeln('After unsuccessful new(pa2,init)');
  67. writeln('pa1 = ',ptrint(pa1),' pa2 = ',ptrint(pa2));
  68. writeln('Call to pa1^.test after successful init');
  69. pa1^.test;
  70. dispose(pa1,done);
  71. writeln('After release of pa1');
  72. DoMem(mem);
  73. pa1:=new(pbigarrayobj,good_init);
  74. writeln('After successful pa1:=new(pbigarrayobj,good_init)');
  75. pa2:=new(pbigarrayobj,wrong_init);
  76. writeln('After unsuccessful pa2:=new(pbigarrayobj,wrong_init)');
  77. writeln('pa1 = ',ptrint(pa1),' pa2 = ',ptrint(pa2));
  78. writeln('Call to pa1^.test after successful init');
  79. pa1^.test;
  80. ta1.init(false);
  81. writeln('Call to ta1.test after successful init');
  82. ta1.test;
  83. ta2.init(true);
  84. writeln('typeof(ta2) = ',ptrint(typeof(ta2)),' after unsuccessful init');
  85. Writeln('Trying to call ta2.test (should generate a Run Time Error)');
  86. ta2.test;
  87. end.