tpvar.pp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. program tpvar;
  2. {$mode objfpc}
  3. uses
  4. jdk15;
  5. type
  6. tmprec = record
  7. b: byte;
  8. end;
  9. tmethodclass = class
  10. l: longint;
  11. procedure test(x: longint; w: word; r: tmprec; var ro: tmprec);
  12. class procedure classproc(b: longint);
  13. class procedure callclassproc;
  14. end;
  15. tmethodclass2 = class(tmethodclass)
  16. class procedure classproc(b: longint);
  17. end;
  18. tmypvar = procedure(x: longint; w: word; r: tmprec; var ro: tmprec) of object;
  19. procedure tmethodclass.test(x: longint; w: word; r: tmprec; var ro: tmprec);
  20. begin
  21. jlsystem.fout.print('l: ');
  22. jlsystem.fout.println(l);
  23. jlsystem.fout.print('x: ');
  24. jlsystem.fout.println(x);
  25. jlsystem.fout.print('w: ');
  26. jlsystem.fout.println(w);
  27. jlsystem.fout.print('r.b: ');
  28. jlsystem.fout.println(r.b);
  29. jlsystem.fout.print('ro.b: ');
  30. jlsystem.fout.println(ro.b);
  31. if l<>6 then
  32. raise jlexception.create('l wrong on input');
  33. if x<>1 then
  34. raise jlexception.create('x wrong on input');
  35. if w<>$ffff then
  36. raise jlexception.create('w wrong on input');
  37. if r.b<>21 then
  38. raise jlexception.create('r.b wrong on input');
  39. if ro.b<>42 then
  40. raise jlexception.create('ro.b wrong on input');
  41. r.b:=123;
  42. ro.b:=123;
  43. end;
  44. class procedure tmethodclass.classproc(b: longint);
  45. begin
  46. jlsystem.fout.println('tmethodclass.classproc');
  47. end;
  48. class procedure tmethodclass.callclassproc;
  49. type
  50. pv = procedure(l: longint) of object;
  51. var
  52. v: pv;
  53. begin
  54. v:=@classproc;
  55. v(3);
  56. end;
  57. class procedure tmethodclass2.classproc(b: longint);
  58. begin
  59. jlsystem.fout.println('tmethodclass2.classproc');
  60. end;
  61. type
  62. tcc = class of tmethodclass;
  63. var
  64. mypvar: tmypvar;
  65. c: tmethodclass;
  66. r, ro: tmprec;
  67. cc: tcc;
  68. begin
  69. r.b:=21;
  70. ro.b:=42;
  71. c:=tmethodclass2.create;
  72. c.l:=6;
  73. mypvar:[email protected];
  74. mypvar(1,$ffff,r,ro);
  75. if r.b<>21 then
  76. raise jlexception.create('r changed');
  77. if ro.b<>123 then
  78. raise jlexception.create('ro not changed');
  79. c.free;
  80. tmethodclass.callclassproc;
  81. tmethodclass2.callclassproc;
  82. cc:=tmethodclass;
  83. cc.callclassproc;
  84. cc:=tmethodclass2;
  85. cc.callclassproc;
  86. end.