File: tgeneric94.pp

package info (click to toggle)
fpc 3.2.2%2Bdfsg-49
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 341,452 kB
  • sloc: pascal: 3,820,194; xml: 194,356; ansic: 9,637; asm: 8,482; java: 5,346; sh: 4,813; yacc: 3,956; makefile: 2,705; lex: 2,661; javascript: 2,454; sql: 929; php: 474; cpp: 145; perl: 136; sed: 132; csh: 34; tcl: 7
file content (66 lines) | stat: -rw-r--r-- 1,167 bytes parent folder | download | duplicates (10)
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
program tgeneric94;

{$mode objfpc}

type
  generic TTest<T> = record
    f: T;
  end;

  TRec = record
    x, y: LongInt;
  end;

type
  TTestTRec_Global = specialize TTest<TRec>;
const
  TRecSize_Global = SizeOf(TRec);

procedure DoTest;
type
  TRec = packed record
    a, b: Byte;
  end;
  TTestTRec_DoTest = specialize TTest<TRec>;
const
  TRecSize_DoTest = SizeOf(TRec);

  procedure Nested(out aActual, aExpected: LongInt);
  type
    TRec = packed record
      f1, f2: Word;
    end;
    TTestTRec_Nested = specialize TTest<TRec>;
  const
    TRecSize_Nested = SizeOf(TRec);
  var
    t: TTestTRec_Nested;
  begin
    aActual := SizeOf(t.f);
    aExpected := TRecSize_Nested;
  end;

procedure DoError(const aMessage: String);
begin
  Writeln(aMessage);
  ExitCode := 1;
  Halt;
end;

var
  tg: TTestTRec_Global;
  tt: TTestTRec_DoTest;
  act, expt: LongInt;
begin
  if SizeOf(tg.f) <> TRecSize_Global then
    DoError('Unexpected size of global TRec');
  if SizeOf(tt.f) <> TRecSize_DoTest then
    DoError('Unexpected size of DoTest TRec');
  Nested(act, expt);
  if act <> expt then
    DoError('Unexpected size of Nested TRec');
end;

begin
  DoTest;
end.