mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 14:29:14 +02:00
# revisions: 42717,42718,42719,42754
git-svn-id: branches/fixes_3_2@43403 -
This commit is contained in:
parent
f1ba9ac665
commit
f131ff18ad
@ -244,11 +244,38 @@ type
|
|||||||
|
|
||||||
TRttiFloatType = class(TRttiType)
|
TRttiFloatType = class(TRttiType)
|
||||||
private
|
private
|
||||||
function GetFloatType: TFloatType;
|
function GetFloatType: TFloatType; inline;
|
||||||
|
protected
|
||||||
|
function GetTypeSize: integer; override;
|
||||||
public
|
public
|
||||||
property FloatType: TFloatType read GetFloatType;
|
property FloatType: TFloatType read GetFloatType;
|
||||||
end;
|
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);
|
TRttiStringKind = (skShortString, skAnsiString, skWideString, skUnicodeString);
|
||||||
|
|
||||||
@ -881,7 +908,6 @@ begin
|
|||||||
for cc := Low(TCallConv) to High(TCallConv) do
|
for cc := Low(TCallConv) to High(TCallConv) do
|
||||||
FuncCallMgr[cc] := NoFunctionCallManager;
|
FuncCallMgr[cc] := NoFunctionCallManager;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TRttiPool }
|
{ TRttiPool }
|
||||||
|
|
||||||
function TRttiPool.GetTypes: specialize TArray<TRttiType>;
|
function TRttiPool.GetTypes: specialize TArray<TRttiType>;
|
||||||
@ -924,6 +950,11 @@ begin
|
|||||||
tkClass : Result := TRttiInstanceType.Create(ATypeInfo);
|
tkClass : Result := TRttiInstanceType.Create(ATypeInfo);
|
||||||
tkInterface: Result := TRttiRefCountedInterfaceType.Create(ATypeInfo);
|
tkInterface: Result := TRttiRefCountedInterfaceType.Create(ATypeInfo);
|
||||||
tkInterfaceRaw: Result := TRttiRawInterfaceType.Create(ATypeInfo);
|
tkInterfaceRaw: Result := TRttiRawInterfaceType.Create(ATypeInfo);
|
||||||
|
tkInt64,
|
||||||
|
tkQWord: Result := TRttiInt64Type.Create(ATypeInfo);
|
||||||
|
tkInteger,
|
||||||
|
tkChar,
|
||||||
|
tkWChar: Result := TRttiOrdinalType.Create(ATypeInfo);
|
||||||
tkSString,
|
tkSString,
|
||||||
tkLString,
|
tkLString,
|
||||||
tkAString,
|
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;
|
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
|
var
|
||||||
arrparam, param: TRttiParameter;
|
param: TRttiParameter;
|
||||||
unhidden, highs, i: SizeInt;
|
unhidden, highs, i: SizeInt;
|
||||||
args: TFunctionCallParameterArray;
|
args: TFunctionCallParameterArray;
|
||||||
highargs: array of SizeInt;
|
highargs: array of SizeInt;
|
||||||
@ -2473,6 +2504,63 @@ begin
|
|||||||
Result := FParams;
|
Result := FParams;
|
||||||
end;
|
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 }
|
{ TRttiFloatType }
|
||||||
|
|
||||||
function TRttiFloatType.GetFloatType: TFloatType;
|
function TRttiFloatType.GetFloatType: TFloatType;
|
||||||
@ -2480,6 +2568,22 @@ begin
|
|||||||
result := FTypeData^.FloatType;
|
result := FTypeData^.FloatType;
|
||||||
end;
|
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 }
|
{ TRttiParameter }
|
||||||
|
|
||||||
function TRttiParameter.ToString: String;
|
function TRttiParameter.ToString: String;
|
||||||
|
Loading…
Reference in New Issue
Block a user