File: tgeneric_declaration_nest.pp

package info (click to toggle)
lazarus 4.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 275,760 kB
  • sloc: pascal: 2,341,904; xml: 509,420; makefile: 348,726; cpp: 93,608; sh: 3,387; java: 609; perl: 297; sql: 222; ansic: 137
file content (54 lines) | stat: -rw-r--r-- 1,079 bytes parent folder | download | duplicates (3)
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
program tgeneric_declaration_nest;
{$mode objfpc}{$H+}
type

  TBase = class
    procedure DoBase;
  end;

  generic TGen<B> = class
    FData: B;
  end;

  TTestClass = class
  protected type
    generic TInnerGen<T: TBase> = class
      f: T;
      procedure Bar;
    end;
  protected type
    TBar = specialize TInnerGen<TTestClass>;
  public
    procedure Foo;
  end;

  TOuterBar = specialize TTestClass.TInnerGen<TTestClass>;


var
  tc: TTestClass;
  tg: TOuterBar;

{ TTestClass.TInnerGen }

procedure TTestClass.TInnerGen{declaration:TTestClass.TInnerGen}.Bar{declaration:TTestClass.TInnerGen.Bar};
var a: t{declaration:TTestClass.TInnerGen.T};
begin
  Bar{declaration:TTestClass.TInnerGen.Bar};
  c{guesstype:TBase} := f.Create{declaration:system.TObject.Create};
  f.{completion:DoBase,Create,AfterConstruction}DoBase{declaration:TBase.DoBase};
end;

{ TTestClass }

procedure TTestClass.Foo;
begin

end;


begin
  tc.Foo{declaration:TTestClass.Foo};
  tg.Bar{declaration:TTestClass.TInnerGen.Bar};
  x{ TODO guesstype:TTestClass.TBar} := TTestClass.TBar.Create;
end.