tw27185.pp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. program tw27185;
  2. {$mode objfpc}{$H+}
  3. uses
  4. {$IFDEF UNIX}{$IFDEF UseCThreads}
  5. cthreads,
  6. {$ENDIF}{$ENDIF}
  7. Classes
  8. { you can add units after this };
  9. var
  10. NormalClassInit: Boolean = False;
  11. NormalClassDone: Boolean = False;
  12. NestedTypeClassInit: Boolean = False;
  13. NestedTypeClassDone: Boolean = False;
  14. NestedTypeClassNestedClassInit: Boolean = False;
  15. NestedTypeClassNestedClassDone: Boolean = False;
  16. Type
  17. { TNormalClass }
  18. TNormalClass = class
  19. public
  20. class constructor Create;
  21. class destructor Destroy;
  22. end;
  23. { TNestedTypeClass }
  24. TNestedTypeClass = class
  25. private
  26. type
  27. { TNestedClass }
  28. TNestedClass = class
  29. public
  30. class constructor Create;
  31. class destructor Destroy;
  32. end;
  33. public
  34. class constructor Create;
  35. class destructor Destroy;
  36. end;
  37. { TNestedTypeClass }
  38. class constructor TNestedTypeClass.Create;
  39. begin
  40. NestedTypeClassInit := True;
  41. //WriteLn('class constructor TNestedTypeClass.Create');
  42. end;
  43. class destructor TNestedTypeClass.Destroy;
  44. begin
  45. NestedTypeClassDone := True;
  46. //WriteLn('class destructor TNestedTypeClass.Destroy');
  47. end;
  48. { TNormalClass }
  49. class constructor TNormalClass.Create;
  50. begin
  51. NormalClassInit := True;
  52. //WriteLn('class constructor TNormalClass.Create');
  53. end;
  54. class destructor TNormalClass.Destroy;
  55. begin
  56. NormalClassDone := False;
  57. //WriteLn('class destructor TNormalClass.Destroy');
  58. end;
  59. { TNestedTypeClass.TNestedClass }
  60. class constructor TNestedTypeClass.TNestedClass.Create;
  61. begin
  62. NestedTypeClassNestedClassInit := True;
  63. //WriteLn('class constructor TNestedTypeClass.TNestedClass.Create');
  64. end;
  65. class destructor TNestedTypeClass.TNestedClass.Destroy;
  66. begin
  67. NestedTypeClassNestedClassDone := True;
  68. //WriteLn('class destructor TNestedTypeClass.TNestedClass.Destroy');
  69. end;
  70. begin
  71. if not NormalClassInit then
  72. Halt(1);
  73. if not NestedTypeClassInit then
  74. Halt(2);
  75. if not NestedTypeClassNestedClassInit then
  76. Halt(3);
  77. end.