Adriaan van Os wrote:
Frank Heckenbach wrote:
(Or send me test programs if you prefer -- though it might not be easy to write them in a general way, and checking for internals ...)
Maybe the following trick works (it does on Mac OS X). Pass a global variable to a routine and then check if @globalvar=@parameter. Repeat this for several types.
Good idea. I've added this test now (passes). Any more types I should check?
{$setlimit 10000}
program fjf1089d (Output);
type th = String (1); ti= String (100); tj = set of 1 .. 4; tk = set of -1000 .. 5000; tl = record a: Byte end; tm = record i: Integer; j: array [1 .. 1000] of Real end; tn = array [1 .. 2] of Char; tp = array [-400 .. 10000] of Real; tq = packed array [0 .. 255] of Char; tr = packed array [1 .. 5] of Boolean; ts = object a: Boolean end; tt = object s: String (10000) end; tu = (aa, bb, cc, dd, ee); tv = ^Integer;
var a: Char; b: Boolean; c: Byte; d: Integer; e: LongestCard; f: Real; g: LongestReal; h: th; i: ti; j: tj; k: tk; l: tl; m: tm; n: tn; p: tp; q: tq; r: tr; s: ts; t: tt; u: tu; v: tv;
procedure o (const var pa: Char; const var pb: Boolean; const var pc: Byte; const var pd: Integer; const var pe: LongestCard; const var pf: Real; const var pg: LongestReal; const var ph: th; const var pi: ti; const var pj: tj; const var pk: tk; const var pl: tl; const var pm: tm; const var pn: tn; const var pp: tp; const var pq: tq; const var pr: tr; const var ps: ts; const var pt: tt; const var pu: tu; const var pv: tv); begin if (@pa = @a) and (@pb = @b) and (@pc = @c) and (@pd = @d) and (@pe = @e) and (@pf = @f) and (@pg = @g) and (@ph = @h) and (@pi = @i) and (@pj = @j) and (@pk = @k) and (@pl = @l) and (@pm = @m) and (@pn = @n) and (@pp = @p) and (@pq = @q) and (@pr = @r) and (@ps = @s) and (@pt = @t) and (@pu = @u) and (@pv = @v) then WriteLn ('OK') else WriteLn ('failed') end;
begin o (a, b, c, d, e, f, g, h, i, j, k, l, m, n, p, q, r, s, t, u, v) end.
Frank