mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-21 05:58:22 +02:00
161 lines
4.9 KiB
ObjectPascal
161 lines
4.9 KiB
ObjectPascal
const
|
|
types: array[1..19] of string[20] =
|
|
('formal','comp','int64','currency','longint','cardinal','word','smallint',
|
|
'byte','shortint',
|
|
'shortstring','ansistring','single','double','extended','char','boolean',
|
|
'widestring','widechar');
|
|
compidx=2;
|
|
int64idx=3;
|
|
doubleidx=14;
|
|
extendedidx=15;
|
|
curridx=4;
|
|
|
|
function tostr(i: longint): string;
|
|
begin
|
|
str(i,tostr);
|
|
end;
|
|
|
|
{$i+}
|
|
var
|
|
k: longint;
|
|
i,j: byte;
|
|
t: text;
|
|
begin
|
|
k := 1;
|
|
for i := low(types) to high(types)-1 do
|
|
for j := succ(i) to high(types) do
|
|
begin
|
|
assign(t,'tvarol'+tostr(k)+'.pp');
|
|
rewrite(t);
|
|
writeln(t,'{$ifndef bigfile}');
|
|
writeln(t,'{$ifdef fpc}');
|
|
writeln(t,'{$mode delphi}');
|
|
writeln(t,'{$else fpc}');
|
|
writeln(t,'{$define FPC_HAS_TYPE_EXTENDED}');
|
|
writeln(t,'{$endif fpc}');
|
|
writeln(t,'{$endif bigfile}');
|
|
writeln(t);
|
|
|
|
types[compidx]:='comp'+tostr(k);
|
|
writeln(t,'type ');
|
|
writeln(t,'{$ifdef FPC_COMP_IS_INT64}');
|
|
if not(j in [doubleidx,extendedidx]) then
|
|
writeln(t,' ',types[compidx],' = double;')
|
|
else
|
|
writeln(t,' ',types[compidx],' = currency;');
|
|
writeln(t,'{$else FPC_COMP_IS_INT64}');
|
|
writeln(t,' ',types[compidx],' = comp;');
|
|
writeln(t,'{$endif FPC_COMP_IS_INT64}');
|
|
|
|
if (i in [curridx,compidx,doubleidx]) and
|
|
(j=extendedidx) then
|
|
writeln(t,'{$ifdef FPC_HAS_TYPE_EXTENDED}');
|
|
|
|
if (i <> low(types)) then
|
|
writeln(t,'procedure test',tostr(k),'(a: ',types[i],'); overload;')
|
|
else
|
|
writeln(t,'procedure test',tostr(k),'(var a); overload;');
|
|
writeln(t,' begin');
|
|
{
|
|
if (i=compidx) then
|
|
begin
|
|
writeln(t,'{$ifdef FPC_COMP_IS_INT64}');
|
|
writeln(t,' writeln(''COMPFAILQ'');');
|
|
writeln(t,'{$endif FPC_COMP_IS_INT64}')
|
|
end;
|
|
}
|
|
writeln(t,' writeln(''',types[i],' called instead of ',types[j],''');');
|
|
writeln(t,' writeln(''XXX'')');
|
|
writeln(t,' end;');
|
|
writeln(t);
|
|
writeln(t,'procedure test',tostr(k),'(a: ',types[j],'); overload;');
|
|
writeln(t,' begin');
|
|
{
|
|
if (i=compidx) then
|
|
begin
|
|
writeln(t,'{$ifdef FPC_COMP_IS_INT64}');
|
|
writeln(t,' writeln(''COMPFAILV'');');
|
|
writeln(t,'{$endif FPC_COMP_IS_INT64}')
|
|
end;
|
|
}
|
|
writeln(t,' writeln(''',types[j],' called instead of ',types[i],''');');
|
|
writeln(t,' writeln(''YYY'')');
|
|
writeln(t,' end;');
|
|
writeln(t);
|
|
{ global to avoid problems with invalid floats }
|
|
{ due to uninitialised variables, and to avoid }
|
|
{ having to generate type-specific init code }
|
|
writeln(t,'var');
|
|
if (i <> low(types)) then
|
|
writeln(t,' x',tostr(k),': ',types[i],';')
|
|
else
|
|
writeln(t,' x',tostr(k),': longint;');
|
|
writeln(t);
|
|
writeln(t,' y',tostr(k),': ',types[j],';');
|
|
writeln(t,'procedure dotest',tostr(k),';');
|
|
writeln(t,'var');
|
|
writeln(t,' v: variant;');
|
|
writeln(t);
|
|
writeln(t,'begin');
|
|
writeln(t,' try');
|
|
writeln(t,' v := x',tostr(k),';');
|
|
writeln(t,' test',tostr(k),'(v);');
|
|
writeln(t,' except');
|
|
writeln(t,' on E : TObject do');
|
|
writeln(t,' writeln(''QQQ'');');
|
|
writeln(t,' end;');
|
|
writeln(t);
|
|
writeln(t,' try');
|
|
writeln(t,' v := y',tostr(k),';');
|
|
writeln(t,' test',tostr(k),'(v);');
|
|
writeln(t,' except');
|
|
writeln(t,' on E : TObject do');
|
|
writeln(t,' writeln(''VVV'');');
|
|
writeln(t,' end;');
|
|
writeln(t,'end;');
|
|
writeln(t);
|
|
|
|
writeln(t,'{$ifndef bigfile} begin');
|
|
writeln(t,' dotest',tostr(k),';');
|
|
writeln(t,'end. {$endif not bigfile}');
|
|
if (((i in [curridx,compidx,doubleidx]) and
|
|
(j=extendedidx))) then
|
|
begin
|
|
writeln(t,'{$else FPC_HAS_TYPE_EXTENDED}');
|
|
writeln(t,'begin');
|
|
if (i=doubleidx) and
|
|
(j=curridx) then
|
|
{ compilation has to fail }
|
|
writeln(t,' abc');
|
|
writeln(t,'end.');
|
|
writeln(t,'{$endif FPC_HAS_TYPE_EXTENDED}');
|
|
end;
|
|
|
|
(*
|
|
if ({(i=compidx) and
|
|
((j=int64idx) or
|
|
(j=doubleidx)) or
|
|
}
|
|
((i in [curridx,compidx,doubleidx]) and
|
|
(j=extendedidx))) then
|
|
begin
|
|
writeln(t,'{$else}');
|
|
writeln(t,'begin');
|
|
|
|
if (i=doubleidx) and
|
|
(j=curridx) then
|
|
{ compilation has to fail }
|
|
writeln(t,' abc');
|
|
|
|
// writeln(t,' halt(COMPFAIL);');
|
|
writeln(t,'{$endif}');
|
|
end;
|
|
|
|
writeln(t,'end.');
|
|
*)
|
|
close(t);
|
|
|
|
inc(k);
|
|
end;
|
|
end.
|