2
0

tw26177.pp 577 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. program tw26177;
  2. {$MODE DELPHI}
  3. {$MODESWITCH TYPEHELPERS}
  4. uses
  5. Classes;
  6. type
  7. TInt32Helper = record helper for Int32
  8. procedure Foo(Sender: TObject);
  9. end;
  10. var
  11. value: Int32 = 0;
  12. procedure TInt32Helper.Foo(Sender: TObject);
  13. begin
  14. value := Self;
  15. end;
  16. var
  17. i: Int32 = 10;
  18. m: TNotifyEvent;
  19. begin
  20. m := i.Foo;
  21. // Data is equal 10 (!) but should be equal to @i
  22. //WriteLn(Int32(TMethod(m).Data));
  23. // TMethod(m).Data := @i; < workaround for bug
  24. try
  25. m(nil); // External SIGSEGV!
  26. if value <> 10 then
  27. Halt(2);
  28. except
  29. Halt(1);
  30. end;
  31. end.