mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-14 11:59:27 +02:00

* typinfo.pp: the newly introduced records were added into {$PACKRECORDS 1} area of effect, which effectively made all records packed, entirely defeating FPC_REQUIRES_PROPER_ALIGNMENT purpose. * added alignment between TProcedureParam records, adjusted TProcedureSignature.GetParam() appropriately. * ncgrtti.pas: added two missing alignments and removed a redundant one. * tests/test/trtti9.pp: modified to use TProcedureSignature.GetParam() and endian-independent check for parameter flags. git-svn-id: trunk@24562 -
39 lines
953 B
ObjectPascal
39 lines
953 B
ObjectPascal
program trtti9;
|
|
|
|
{$mode delphi}
|
|
|
|
uses
|
|
typinfo;
|
|
|
|
type
|
|
PProcedureParam = ^TProcedureParam;
|
|
TProc = procedure(var A: Integer; S: String); stdcall;
|
|
|
|
function TestParam(Param: PProcedureParam; Flags: TParamFlags; ParamType: Pointer; Name: ShortString): Boolean;
|
|
begin
|
|
Result := (Param^.Flags = PByte(@Flags)^) and (Param^.ParamType = ParamType) and (Param^.Name = Name);
|
|
end;
|
|
|
|
var
|
|
Info: PTypeInfo;
|
|
Data: PTypeData;
|
|
Param: PProcedureParam;
|
|
begin
|
|
Info := TypeInfo(TProc);
|
|
if Info^.Kind <> tkProcedure then
|
|
halt(1);
|
|
Data := GetTypeData(Info);
|
|
if Data^.ProcSig.CC <> ccStdCall then
|
|
halt(2);
|
|
if Data^.ProcSig.ResultType <> nil then
|
|
halt(3);
|
|
if Data^.ProcSig.ParamCount <> 2 then
|
|
halt(4);
|
|
Param := Data^.ProcSig.GetParam(0);
|
|
if not TestParam(Param, [pfVar], TypeInfo(Integer), 'A') then
|
|
halt(5);
|
|
Param := Data^.ProcSig.GetParam(1);
|
|
if not TestParam(Param, [], TypeInfo(String), 'S') then
|
|
halt(6);
|
|
end.
|