2
0

twpo7.pp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. { %wpoparas=devirtcalls,optvmts }
  2. { %wpopasses=1 }
  3. {$mode objfpc}
  4. type
  5. tu1 = class
  6. procedure u1proccalled; virtual;
  7. procedure u1proccalledinoverride; virtual;
  8. procedure u1proccallednotoverridden; virtual;
  9. procedure u1procnotcalled; virtual;
  10. procedure u1procaddrtaken; virtual;
  11. end;
  12. tu2 = class(tu1)
  13. procedure u1proccalledinoverride; override;
  14. end;
  15. procedure tu1.u1proccalled;
  16. begin
  17. writeln('u1proccalled in u1');
  18. end;
  19. procedure tu1.u1proccalledinoverride;
  20. begin
  21. writeln('u1proccalledinoverride in u1');
  22. if (self.classtype=tu1) then
  23. halt(3);
  24. end;
  25. procedure tu1.u1proccallednotoverridden;
  26. begin
  27. writeln('u1proccallednotoverridden in u1');
  28. if not(self.classtype = tu1) then
  29. halt(4);
  30. end;
  31. procedure tu1.u1procnotcalled;
  32. begin
  33. writeln('u1procnotcalled in u1');
  34. halt(1);
  35. end;
  36. procedure tu1.u1procaddrtaken;
  37. begin
  38. writeln('procvar called');
  39. end;
  40. procedure tu2.u1proccalledinoverride;
  41. begin
  42. writeln('u1proccalledinoverride in u2');
  43. if (self.classtype <> tu2) then
  44. halt(10);
  45. end;
  46. var
  47. u1: tu1;
  48. u2: tu2;
  49. p: procedure of object;
  50. begin
  51. u1:=tu1.create;
  52. u1.u1proccalled;
  53. u1.u1proccallednotoverridden;
  54. u1.free;
  55. u2:=tu2.create;
  56. p:[email protected];
  57. p();
  58. u2.u1proccalled;
  59. u2.u1proccalledinoverride;
  60. u2.free;
  61. end.