mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-05 19:08:18 +02:00
99 lines
1.4 KiB
ObjectPascal
99 lines
1.4 KiB
ObjectPascal
program project1;
|
|
|
|
{$IFDEF FPC}
|
|
{$MODE DELPHI}
|
|
{$ENDIF}
|
|
{$IFDEF MSWINDOWS}
|
|
{$APPTYPE CONSOLE}
|
|
{$ENDIF}
|
|
|
|
{$r+}
|
|
|
|
uses SysUtils;
|
|
|
|
type
|
|
TSomeClass = class
|
|
public
|
|
procedure LoadSomething;
|
|
end;
|
|
|
|
TA = class
|
|
private
|
|
FSomeObject: TSomeClass;
|
|
public
|
|
constructor Create; virtual;
|
|
destructor Destroy; override;
|
|
procedure AfterConstruction; override;
|
|
procedure BeforeDestruction; override;
|
|
property SomeObject: TSomeClass read FSomeObject;
|
|
end;
|
|
|
|
var
|
|
i: longint;
|
|
order: array[1..4] of longint;
|
|
|
|
procedure TSomeClass.LoadSomething;
|
|
begin
|
|
raise Exception.Create('An exception loading something');
|
|
end;
|
|
|
|
constructor TA.Create;
|
|
begin
|
|
order[i]:=1;
|
|
inc(i);
|
|
WriteLn(1);
|
|
inherited Create;
|
|
end;
|
|
|
|
destructor TA.Destroy;
|
|
begin
|
|
order[i]:=2;
|
|
inc(i);
|
|
WriteLn(2);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TA.AfterConstruction;
|
|
begin
|
|
order[i]:=3;
|
|
inc(i);
|
|
WriteLn(3);
|
|
FSomeObject := TSomeClass.Create;
|
|
FSomeObject.LoadSomething;
|
|
end;
|
|
|
|
procedure TA.BeforeDestruction;
|
|
begin
|
|
order[i]:=4;
|
|
inc(i);
|
|
WriteLn(4);
|
|
FSomeObject.Free;
|
|
end;
|
|
|
|
var
|
|
VA: TA;
|
|
ok: boolean;
|
|
begin
|
|
i:=1;
|
|
ok:=false;
|
|
try
|
|
VA := TA.Create;
|
|
except
|
|
if order[1]<>1 then
|
|
halt(1);
|
|
if order[2]<>3 then
|
|
halt(2);
|
|
if order[3]<>4 then
|
|
halt(3);
|
|
if order[4]<>2 then
|
|
halt(4);
|
|
if i<>5 then
|
|
halt(5);
|
|
if assigned(va) then
|
|
halt(6);
|
|
ok:=true;
|
|
end;
|
|
if not ok then
|
|
halt(7);
|
|
end.
|