# revisions: 42717,42718,42719,42754

git-svn-id: branches/fixes_3_2@43403 -
This commit is contained in:
marco 2019-11-05 16:46:30 +00:00
parent f1ba9ac665
commit f131ff18ad

View File

@ -244,11 +244,38 @@ type
TRttiFloatType = class(TRttiType)
private
function GetFloatType: TFloatType;
function GetFloatType: TFloatType; inline;
protected
function GetTypeSize: integer; override;
public
property FloatType: TFloatType read GetFloatType;
end;
TRttiOrdinalType = class(TRttiType)
private
function GetMaxValue: LongInt; inline;
function GetMinValue: LongInt; inline;
function GetOrdType: TOrdType; inline;
protected
function GetTypeSize: Integer; override;
public
property OrdType: TOrdType read GetOrdType;
property MinValue: LongInt read GetMinValue;
property MaxValue: LongInt read GetMaxValue;
end;
TRttiInt64Type = class(TRttiType)
private
function GetMaxValue: Int64; inline;
function GetMinValue: Int64; inline;
function GetUnsigned: Boolean; inline;
protected
function GetTypeSize: integer; override;
public
property MinValue: Int64 read GetMinValue;
property MaxValue: Int64 read GetMaxValue;
property Unsigned: Boolean read GetUnsigned;
end;
TRttiStringKind = (skShortString, skAnsiString, skWideString, skUnicodeString);
@ -881,7 +908,6 @@ begin
for cc := Low(TCallConv) to High(TCallConv) do
FuncCallMgr[cc] := NoFunctionCallManager;
end;
{ TRttiPool }
function TRttiPool.GetTypes: specialize TArray<TRttiType>;
@ -924,6 +950,11 @@ begin
tkClass : Result := TRttiInstanceType.Create(ATypeInfo);
tkInterface: Result := TRttiRefCountedInterfaceType.Create(ATypeInfo);
tkInterfaceRaw: Result := TRttiRawInterfaceType.Create(ATypeInfo);
tkInt64,
tkQWord: Result := TRttiInt64Type.Create(ATypeInfo);
tkInteger,
tkChar,
tkWChar: Result := TRttiOrdinalType.Create(ATypeInfo);
tkSString,
tkLString,
tkAString,
@ -1993,7 +2024,7 @@ end;
function Invoke(const aName: String; aCodeAddress: CodePointer; aCallConv: TCallConv; aStatic: Boolean; aInstance: TValue; constref aArgs: array of TValue; const aParams: specialize TArray<TRttiParameter>; aReturnType: TRttiType): TValue;
var
arrparam, param: TRttiParameter;
param: TRttiParameter;
unhidden, highs, i: SizeInt;
args: TFunctionCallParameterArray;
highargs: array of SizeInt;
@ -2473,6 +2504,63 @@ begin
Result := FParams;
end;
{ TRttiInt64Type }
function TRttiInt64Type.GetMaxValue: Int64;
begin
Result := FTypeData^.MaxInt64Value;
end;
function TRttiInt64Type.GetMinValue: Int64;
begin
Result := FTypeData^.MinInt64Value;
end;
function TRttiInt64Type.GetUnsigned: Boolean;
begin
Result := FTypeData^.OrdType = otUQWord;
end;
function TRttiInt64Type.GetTypeSize: integer;
begin
Result := SizeOf(QWord);
end;
{ TRttiOrdinalType }
function TRttiOrdinalType.GetMaxValue: LongInt;
begin
Result := FTypeData^.MaxValue;
end;
function TRttiOrdinalType.GetMinValue: LongInt;
begin
Result := FTypeData^.MinValue;
end;
function TRttiOrdinalType.GetOrdType: TOrdType;
begin
Result := FTypeData^.OrdType;
end;
function TRttiOrdinalType.GetTypeSize: Integer;
begin
case OrdType of
otSByte,
otUByte:
Result := SizeOf(Byte);
otSWord,
otUWord:
Result := SizeOf(Word);
otSLong,
otULong:
Result := SizeOf(LongWord);
otSQWord,
otUQWord:
Result := SizeOf(QWord);
end;
end;
{ TRttiFloatType }
function TRttiFloatType.GetFloatType: TFloatType;
@ -2480,6 +2568,22 @@ begin
result := FTypeData^.FloatType;
end;
function TRttiFloatType.GetTypeSize: integer;
begin
case FloatType of
ftSingle:
Result := SizeOf(Single);
ftDouble:
Result := SizeOf(Double);
ftExtended:
Result := SizeOf(Extended);
ftComp:
Result := SizeOf(Comp);
ftCurr:
Result := SizeOf(Currency);
end;
end;
{ TRttiParameter }
function TRttiParameter.ToString: String;