summaryrefslogtreecommitdiff
path: root/fpcsrc/tests/webtbs/tw10927.pp
blob: e7bca8a4f1b36d5592c351017a3fe46b69a58ff3 (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
{ %result=1 }

program project1;

{$mode objfpc}{$H+}

type

  { TOrgObject }

  TOriginal=class
  protected
    procedure SetReadOnly(const AValue: boolean); virtual;
  public
    property readonly:boolean write SetReadOnly;
  end;

  { TDerived }

  TDerived=class(TOriginal)
  protected
    procedure SetReadOnly(const AValue: boolean); override;
  end;

var
 count1, count2: longint;

{ TDerived }

procedure TDerived.SetReadOnly(const AValue: boolean);
begin
  if (count2>0) then
    halt(1);
  inc(count2);
  WriteLn('TDerived.SetReadOnly');
  inherited;
  inherited ReadOnly := AValue;
end;

{ TOrgObject }

procedure TOriginal.SetReadOnly(const AValue: boolean);
begin
  if (count1>1) then
    halt(2);
  inc(count1);
  WriteLn('TOriginal.SetReadOnly');
end;

var
  D: TDerived;
begin
  D := TDerived.Create;
  D.ReadOnly := True;
  D.Free;
  if (count1<>2) or
     (count2<>1) then
    halt(3);
end.