blob: a56663ad71d408dbf176e2a4e5767a3822d845c2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
{ Source provided for Free Pascal Bug Report 2421 }
{ Submitted by "N. Hug" on 2003-03-16 }
{ e-mail: hug__@t-online.de }
PROGRAM Bug;
{$ifdef fpc}{$MODE DELPHI}{$endif}
TYPE TTestEvent =PROCEDURE OF OBJECT;
TYPE TTest =CLASS
FOnTest :TTestEvent;
PROPERTY OnTest:TTestEvent READ FOnTest WRITE FOnTest;
END;
TYPE THost =CLASS
PRIVATE
FTest :TTest;
PROCEDURE DoTest;
PUBLIC
CONSTRUCTOR Create;
END;
PROCEDURE THost.DoTest;
BEGIN
// Accessing instance data results in a crash.
// It shows that SELF is not properly set.
IF FTest = NIL THEN begin
END;
END;
CONSTRUCTOR THost.Create;
BEGIN
INHERITED;
FTest := TTest.Create;
// Buggy code:
FTest.OnTest := DoTest;
// Non buggy alternatives:
// FTest.OnTest := SELF.DoTest;
// FTest.FOnTest := DoTest;
// Now call it.
FTest.OnTest;
END;
VAR M :THost;
BEGIN
M := THost.Create;
M.Free;
END.
|