|
@@ -0,0 +1,59 @@
|
|
|
+{ Source provided for Free Pascal Bug Report 2421 }
|
|
|
+{ Submitted by "N. Hug" on 2003-03-16 }
|
|
|
+{ e-mail: [email protected] }
|
|
|
+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.
|