|
@@ -0,0 +1,99 @@
|
|
|
+program tw27185;
|
|
|
+
|
|
|
+{$mode objfpc}{$H+}
|
|
|
+
|
|
|
+uses
|
|
|
+ {$IFDEF UNIX}{$IFDEF UseCThreads}
|
|
|
+ cthreads,
|
|
|
+ {$ENDIF}{$ENDIF}
|
|
|
+ Classes
|
|
|
+ { you can add units after this };
|
|
|
+
|
|
|
+var
|
|
|
+ NormalClassInit: Boolean = False;
|
|
|
+ NormalClassDone: Boolean = False;
|
|
|
+ NestedTypeClassInit: Boolean = False;
|
|
|
+ NestedTypeClassDone: Boolean = False;
|
|
|
+ NestedTypeClassNestedClassInit: Boolean = False;
|
|
|
+ NestedTypeClassNestedClassDone: Boolean = False;
|
|
|
+
|
|
|
+Type
|
|
|
+
|
|
|
+ { TNormalClass }
|
|
|
+
|
|
|
+ TNormalClass = class
|
|
|
+ public
|
|
|
+ class constructor Create;
|
|
|
+ class destructor Destroy;
|
|
|
+ end;
|
|
|
+
|
|
|
+ { TNestedTypeClass }
|
|
|
+
|
|
|
+ TNestedTypeClass = class
|
|
|
+ private
|
|
|
+ type
|
|
|
+
|
|
|
+ { TNestedClass }
|
|
|
+
|
|
|
+ TNestedClass = class
|
|
|
+ public
|
|
|
+ class constructor Create;
|
|
|
+ class destructor Destroy;
|
|
|
+ end;
|
|
|
+
|
|
|
+ public
|
|
|
+ class constructor Create;
|
|
|
+ class destructor Destroy;
|
|
|
+ end;
|
|
|
+
|
|
|
+{ TNestedTypeClass }
|
|
|
+
|
|
|
+class constructor TNestedTypeClass.Create;
|
|
|
+begin
|
|
|
+ NestedTypeClassInit := True;
|
|
|
+ //WriteLn('class constructor TNestedTypeClass.Create');
|
|
|
+end;
|
|
|
+
|
|
|
+class destructor TNestedTypeClass.Destroy;
|
|
|
+begin
|
|
|
+ NestedTypeClassDone := True;
|
|
|
+ //WriteLn('class destructor TNestedTypeClass.Destroy');
|
|
|
+end;
|
|
|
+
|
|
|
+{ TNormalClass }
|
|
|
+
|
|
|
+class constructor TNormalClass.Create;
|
|
|
+begin
|
|
|
+ NormalClassInit := True;
|
|
|
+ //WriteLn('class constructor TNormalClass.Create');
|
|
|
+end;
|
|
|
+
|
|
|
+class destructor TNormalClass.Destroy;
|
|
|
+begin
|
|
|
+ NormalClassDone := False;
|
|
|
+ //WriteLn('class destructor TNormalClass.Destroy');
|
|
|
+end;
|
|
|
+
|
|
|
+{ TNestedTypeClass.TNestedClass }
|
|
|
+
|
|
|
+class constructor TNestedTypeClass.TNestedClass.Create;
|
|
|
+begin
|
|
|
+ NestedTypeClassNestedClassInit := True;
|
|
|
+ //WriteLn('class constructor TNestedTypeClass.TNestedClass.Create');
|
|
|
+end;
|
|
|
+
|
|
|
+class destructor TNestedTypeClass.TNestedClass.Destroy;
|
|
|
+begin
|
|
|
+ NestedTypeClassNestedClassDone := True;
|
|
|
+ //WriteLn('class destructor TNestedTypeClass.TNestedClass.Destroy');
|
|
|
+end;
|
|
|
+
|
|
|
+begin
|
|
|
+ if not NormalClassInit then
|
|
|
+ Halt(1);
|
|
|
+ if not NestedTypeClassInit then
|
|
|
+ Halt(2);
|
|
|
+ if not NestedTypeClassNestedClassInit then
|
|
|
+ Halt(3);
|
|
|
+end.
|
|
|
+
|