mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-15 04:19:30 +02:00

U compiler/msg/errore.msg --- Recording mergeinfo for merge of r40654 into '.': U . --- Merging r40656 into '.': U compiler/pdecvar.pas A tests/tbf/tb0266a.pp A tests/tbf/tb0266b.pp --- Recording mergeinfo for merge of r40656 into '.': G . --- Merging r41308 into '.': U tests/webtbs/tw35027.pp --- Recording mergeinfo for merge of r41308 into '.': G . --- Merging r41829 into '.': U compiler/htypechk.pas U compiler/ncal.pas A tests/tbs/tb0656.pp --- Recording mergeinfo for merge of r41829 into '.': G . --- Merging r42511 into '.': U packages/rtl-objpas/src/inc/rtti.pp U rtl/objpas/typinfo.pp U tests/test/trtti19.pp --- Recording mergeinfo for merge of r42511 into '.': G . # revisions: 40654,40656,41308,41829,42511 git-svn-id: branches/fixes_3_2@43410 -
86 lines
2.1 KiB
ObjectPascal
86 lines
2.1 KiB
ObjectPascal
program trtti19;
|
|
|
|
{$mode objfpc}
|
|
|
|
uses
|
|
TypInfo;
|
|
|
|
type
|
|
TTestProc = procedure(var arg1; out arg2; constref arg3);
|
|
TTestMethod = procedure(var arg1; out arg2; constref arg3) of object;
|
|
|
|
PParamFlags = ^TParamFlags;
|
|
PPPTypeInfo = ^PPTypeInfo;
|
|
|
|
var
|
|
ti: PTypeInfo;
|
|
td: PTypeData;
|
|
procparam: PProcedureParam;
|
|
pb: PByte;
|
|
i: SizeInt;
|
|
begin
|
|
// writeln(SizeOf(TparamFlags));
|
|
ti := PTypeInfo(TypeInfo(TTestProc));
|
|
td := GetTypeData(ti);
|
|
if td^.ProcSig.ParamCount <> 3 then
|
|
Halt(1);
|
|
procparam := td^.ProcSig.GetParam(0);
|
|
if Assigned(procparam^.ParamType) then
|
|
Halt(2);
|
|
if procparam^.ParamFlags * [pfVar] <> [pfVar] then
|
|
Halt(3);
|
|
procparam := td^.ProcSig.GetParam(1);
|
|
if Assigned(procparam^.ParamType) then
|
|
Halt(4);
|
|
if procparam^.ParamFlags * [pfOut] <> [pfOut] then
|
|
Halt(5);
|
|
procparam := td^.ProcSig.GetParam(2);
|
|
if Assigned(procparam^.ParamType) then
|
|
Halt(6);
|
|
if procparam^.ParamFlags * [pfConstRef] <> [pfConstRef] then
|
|
Halt(7);
|
|
|
|
ti := PTypeInfo(TypeInfo(TTestMethod));
|
|
td := GetTypeData(ti);
|
|
if td^.ParamCount <> 4 then
|
|
Halt(8);
|
|
pb := @td^.ParamList[0];
|
|
pb := AlignTParamFlags(pb);
|
|
if PParamFlags(pb)^ * [pfHidden, pfSelf] <> [pfHidden, pfSelf] then
|
|
Halt(9);
|
|
pb := pb + SizeOf(TParamFlags);
|
|
pb := pb + SizeOf(Byte) + pb^;
|
|
pb := pb + SizeOf(Byte) + pb^;
|
|
|
|
pb := AlignTParamFlags(pb);
|
|
if PParamFlags(pb)^ * [pfVar] <> [pfVar] then
|
|
Halt(10);
|
|
pb := pb + SizeOf(TParamFlags);
|
|
pb := pb + SizeOf(Byte) + pb^;
|
|
pb := pb + SizeOf(Byte) + pb^;
|
|
|
|
pb := AlignTParamFlags(pb);
|
|
if PParamFlags(pb)^ * [pfOut] <> [pfOut] then
|
|
Halt(11);
|
|
pb := pb + SizeOf(TParamFlags);
|
|
pb := pb + SizeOf(Byte) + pb^;
|
|
pb := pb + SizeOf(Byte) + pb^;
|
|
|
|
pb := AlignTParamFlags(pb);
|
|
if PParamFlags(pb)^ * [pfConstRef] <> [pfConstRef] then
|
|
Halt(12);
|
|
pb := pb + SizeOf(TParamFlags);
|
|
pb := pb + SizeOf(Byte) + pb^;
|
|
pb := pb + SizeOf(Byte) + pb^;
|
|
|
|
pb := AlignPTypeInfo(pb + SizeOf(TCallConv));
|
|
for i := 1 to td^.ParamCount - 1 do begin
|
|
if PPPTypeInfo(pb)[i] <> Nil then begin
|
|
Writeln(PPPTypeInfo(pb)[i]^^.Name);
|
|
Halt(12 + i);
|
|
end;
|
|
end;
|
|
|
|
Writeln('ok');
|
|
end.
|