summaryrefslogtreecommitdiff
path: root/fpcsrc/tests/test/tgeneric15.pp
blob: a11701d792e5159507d08c6e45721e0141520ab6 (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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
program Project1;

{$mode objfpc}{$H+}

type

  { TStack }

  generic TStack<T> = class(TObject)
   public
    procedure Clear; virtual;
    destructor Destroy; override;
  end;

  { TIntegerStack }

  TIntegerStack = class(specialize TStack<Integer>)
   public
    procedure Clear; override;
  end;

  { TIntegerStack2 }

  TIntegerStack2 = class(specialize TStack<Integer>)
   public
    procedure Clear; override;
  end;

var
  Idx : Longint;

{ TIntegerStack }

procedure TIntegerStack.Clear;
begin
  Writeln('new clear');
  Idx:=Idx or 1;
end;

{ TIntegerStack2 }

procedure TIntegerStack2.Clear;
begin
  Writeln('new clear2');
  Idx:=Idx or 2;
end;

{ TStack }

procedure TStack.Clear;
begin
  Writeln('old clear');
end;

destructor TStack.Destroy;
begin
  Writeln('old destroy');
  Clear;
end;


var
  s: TIntegerStack;
  s2: TIntegerStack2;
begin
  Idx:=0;

  s := TIntegerStack.Create;
  Writeln(s.ClassName);
  s.Free;

  s2 := TIntegerStack2.Create;
  Writeln(s2.ClassName);
  s2.Free;

  if Idx<>3 then
    halt(1);
end.