tobjc18.pp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. { %target=darwin }
  2. { %cpu=powerpc,i386 }
  3. {$mode objfpc}
  4. {$modeswitch objectivec1}
  5. type
  6. MyOverride = objcclass(NSObject)
  7. procedure release; override;
  8. class procedure testClassOverride; message 'testClassOverride';
  9. end;
  10. MyOverride2 = objcclass(MyOverride)
  11. procedure release; override;
  12. class procedure testClassOverride; override;
  13. end;
  14. var
  15. overridescalled: longint;
  16. procedure MyOverride.release;
  17. begin
  18. writeln('releasing override!');
  19. if (overridescalled<>3) then
  20. halt(1);
  21. inc(overridescalled);
  22. inherited release;
  23. end;
  24. class procedure MyOverride.testClassOverride;
  25. begin
  26. writeln('MyOverride.testClassOverride');
  27. if (overridescalled<>1) then
  28. halt(3);
  29. inc(overridescalled);
  30. end;
  31. procedure MyOverride2.release;
  32. begin
  33. inherited testClassOverride;
  34. writeln('releasing override2!');
  35. if (overridescalled<>2) then
  36. halt(2);
  37. inc(overridescalled);
  38. inherited release;
  39. end;
  40. class procedure MyOverride2.testClassOverride;
  41. begin
  42. if (overridescalled<>0) then
  43. halt(5);
  44. writeln('MyOverride2.testClassOverride');
  45. inc(overridescalled);
  46. inherited testClassOverride;
  47. end;
  48. var
  49. a: MyOverride;
  50. begin
  51. a:=MyOverride2.alloc;
  52. a:=a.init;
  53. MyOverride2.testClassOverride;
  54. if (overridescalled<>2) then
  55. halt(6);
  56. dec(overridescalled);
  57. MyOverride.testClassOverride;
  58. if (overridescalled<>2) then
  59. halt(7);
  60. overridescalled:=0;
  61. a.testClassOverride;
  62. overridescalled:=1;
  63. a.release;
  64. end.