From e61df9571c29a62c2331d98e34becb61b45fe587 Mon Sep 17 00:00:00 2001 From: Henrique Gottardi Werlang Date: Thu, 19 Aug 2021 17:26:23 -0300 Subject: [PATCH] Istype no TValue. Ajustado type cast com problemas. --- packages/rtl/rtti.pas | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/rtl/rtti.pas b/packages/rtl/rtti.pas index 43a6a17..0ba3c99 100644 --- a/packages/rtl/rtti.pas +++ b/packages/rtl/rtti.pas @@ -57,6 +57,8 @@ type function AsUnicodeString: UnicodeString; function Cast(ATypeInfo: TTypeInfo; const EmptyAsAnyType: Boolean = True): TValue; overload; generic function Cast(const EmptyAsAnyType: Boolean = True): TValue; overload; + function IsType(ATypeInfo: TTypeInfo; const EmptyAsAnyType: Boolean = True): Boolean; overload; + generic function IsType(const EmptyAsAnyType: Boolean = True): Boolean; overload; function GetArrayElement(aIndex: SizeInt): TValue; function GetArrayLength: SizeInt; function IsArray: boolean; @@ -615,6 +617,19 @@ begin Result := Cast(System.TypeInfo(T), EmptyAsAnyType); end; +function TValue.IsType(ATypeInfo: TTypeInfo; const EmptyAsAnyType: Boolean): Boolean; +var + AnyValue: TValue; + +begin + Result := TryCast(ATypeInfo, AnyValue, EmptyAsAnyType); +end; + +generic function TValue.IsType(const EmptyAsAnyType: Boolean): Boolean; +begin + Result := IsType(System.TypeInfo(T), EmptyAsAnyType); +end; + function TValue.TryCast(ATypeInfo: TTypeInfo; out AResult: TValue; const EmptyAsAnyType: Boolean): Boolean; function ConversionAccepted: TTypeKinds; @@ -626,7 +641,7 @@ function TValue.TryCast(ATypeInfo: TTypeInfo; out AResult: TValue; const EmptyAs tkEnumeration: Exit([tkInteger, tkEnumeration]); - else Exit([ATypeInfo.Kind]); + else Exit([TypeInfo.Kind]); end; end;