testpvar.pp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. {
  2. $Id$
  3. This program tries to test any aspect of procedure variables and related
  4. stuff in FPC mode
  5. }
  6. {$ifdef go32v2}
  7. uses
  8. dpmiexcp;
  9. {$endif go32v2}
  10. procedure do_error(i : longint);
  11. begin
  12. writeln('Error near: ',i);
  13. halt(1);
  14. end;
  15. var
  16. globalvar : longint;
  17. type
  18. tpoo_rec = record
  19. procpointer : pointer;
  20. s : pointer;
  21. end;
  22. procedure callmethodparam(s : pointer;addr : pointer;param : longint);
  23. var
  24. p : procedure(param : longint) of object;
  25. begin
  26. tpoo_rec(p).procpointer:=addr;
  27. tpoo_rec(p).s:=s;
  28. p(param);
  29. end;
  30. type
  31. to1 = object
  32. procedure test1;
  33. procedure test2(l : longint);
  34. end;
  35. procedure to1.test1;
  36. var
  37. p:pointer;
  38. begin
  39. // useless only a semantic test
  40. p:[email protected];
  41. // this do we use to do some testing
  42. p:[email protected];
  43. globalvar:=0;
  44. callmethodparam(@self,p,1234);
  45. if globalvar<>1234 then
  46. do_error(1000);
  47. end;
  48. procedure to1.test2(l : longint);
  49. begin
  50. globalvar:=l;
  51. end;
  52. const
  53. constmethodaddr : pointer = @to1.test2;
  54. var
  55. o1 : to1;
  56. p : procedure(l : longint) of object;
  57. begin
  58. { }
  59. { Procedures of objects }
  60. { }
  61. writeln('Procedures of objects');
  62. p:[email protected];
  63. globalvar:=0;
  64. p(12);
  65. if globalvar<>12 then
  66. do_error(1002);
  67. writeln('Ok');
  68. { }
  69. { Pointers and addresses of procedures }
  70. { }
  71. writeln('Getting an address of a method as pointer');
  72. o1.test1;
  73. globalvar:=0;
  74. callmethodparam(@o1,constmethodaddr,34);
  75. if globalvar<>34 then
  76. do_error(1001);
  77. writeln('Ok');
  78. end.
  79. {
  80. $Log$
  81. Revision 1.1 1999-09-11 19:45:33 florian
  82. * first version, please keep it up-to-date
  83. }