Browse Source

* Allow assign of pointer to TValue. Patch by Lipinast Lekrisov

Michaël Van Canneyt 7 months ago
parent
commit
1c816990c3

+ 6 - 1
packages/rtl-objpas/src/inc/rtti.pp

@@ -282,6 +282,7 @@ type
     class operator := (AValue: QWord): TValue; inline;
     class operator := (AValue: TObject): TValue; inline;
     class operator := (AValue: TClass): TValue; inline;
+    class operator := (AValue: Pointer): TValue; inline;
     class operator := (AValue: Boolean): TValue; inline;
     class operator := (AValue: IUnknown): TValue; inline;
     class operator := (AValue: TVarRec): TValue; inline;
@@ -2386,7 +2387,6 @@ begin
   Make(@AValue, System.TypeInfo(AValue), Result);
 end;
 
-
 class operator TValue.:=(const AValue: WideString): TValue;
 begin
   Make(@AValue, System.TypeInfo(AValue), Result);
@@ -2472,6 +2472,11 @@ begin
   Make(@AValue, System.TypeInfo(AValue), Result);
 end;
 
+class operator TValue.:=(AValue: Pointer): TValue;
+begin
+  Make(@AValue, System.TypeInfo(AValue), Result);
+end;
+
 class operator TValue.:=(AValue: Boolean): TValue;
 begin
   Make(@AValue, System.TypeInfo(AValue), Result);

+ 9 - 1
packages/rtl-objpas/tests/tests.rtti.value.pas

@@ -17,6 +17,7 @@ Type
     procedure TestReferenceRawDataEmpty;
     procedure TestIsManaged;
     procedure TestCasts; 
+    procedure TestAssignPointer;
   end;
 
   TTestValueSimple = Class(TTestCase)
@@ -1959,7 +1960,14 @@ begin
               .{$ifdef fpc}specialize{$endif} Cast<AnsiString>
               .{$ifdef fpc}specialize{$endif} AsType<AnsiString>, 'TValue.From<shortring>.Cast<AnsiString> failed');
 end;
-  
+
+procedure TTestValueGeneral.TestAssignPointer;
+var
+  V : TValue;
+begin
+  V:=Pointer(Nil);
+  AssertSame('Correct type info', TypeInfo(Pointer),V.TypeInfo);
+end;
 
 procedure TTestValueGeneral.TestReferenceRawData;
 var