program pptest3; type pointer = ^arecord; arecord = record firstfield: pointer; secondfield: integer; a: array [1 .. 10] of pointer; p: pointer end; var p, q: pointer; i: integer; begin { basic operations } new(p); dispose(p); p := nil; p := q; p^ := q^; p^.firstfield := nil; { optimised first field } p^.secondfield := 0; i := p^.secondfield; { optimization } q := p; q^.secondfield := 1; i := p^.secondfield; { second level operations } p^.p^.firstfield := q; p^.p^.secondfield := 0; { deeply nested references } p^.p^.p^.p^.secondfield := 0; p^.firstfield^.firstfield := p^.firstfield^.firstfield^.firstfield; { compound references } p^.a[4]^.secondfield := 1; i := p^.a[i]^.p^.secondfield; end { pptest3}.