Преглед на файлове

* patch by Sergey Larin to handle Native(U)Int conversions from/to variants, resolves #37339

git-svn-id: trunk@45797 -
florian преди 5 години
родител
ревизия
a57f3ba396
променени са 4 файла, в които са добавени 42 реда и са изтрити 0 реда
  1. 1 0
      .gitattributes
  2. 25 0
      rtl/inc/variant.inc
  3. 4 0
      rtl/inc/varianth.inc
  4. 12 0
      tests/webtbs/tw37339.pp

+ 1 - 0
.gitattributes

@@ -18353,6 +18353,7 @@ tests/webtbs/tw37272a.pp svneol=native#text/pascal
 tests/webtbs/tw37301.pp svneol=native#text/pascal
 tests/webtbs/tw37322.pp svneol=native#text/pascal
 tests/webtbs/tw37323.pp svneol=native#text/pascal
+tests/webtbs/tw37339.pp svneol=native#text/pascal
 tests/webtbs/tw3742.pp svneol=native#text/plain
 tests/webtbs/tw3751.pp svneol=native#text/plain
 tests/webtbs/tw3758.pp svneol=native#text/plain

+ 25 - 0
rtl/inc/variant.inc

@@ -203,6 +203,19 @@ begin
   Variantmanager.varfromInt64(Dest,Source);
 end;
 
+
+operator :=(const source : NativeInt) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
+begin
+  dest:=PtrInt(source);
+end;
+
+
+operator :=(const source : NativeUInt) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
+begin
+  dest:=PtrUInt(source);
+end;
+
+
 { Boolean }
 
 operator :=(const source : boolean) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
@@ -395,6 +408,18 @@ begin
 end;
 
 
+operator :=(const source : variant) dest : NativeInt;{$ifdef SYSTEMINLINE}inline;{$endif}
+begin
+  PtrInt(dest):=source;
+end;
+
+
+operator :=(const source : variant) dest : NativeUInt;{$ifdef SYSTEMINLINE}inline;{$endif}
+begin
+  PtrUInt(dest):=source;
+end;
+
+
 { Boolean }
 
 operator :=(const source : variant) dest : boolean;{$ifdef SYSTEMINLINE}inline;{$endif}

+ 4 - 0
rtl/inc/varianth.inc

@@ -242,6 +242,8 @@ operator :=(const source : dword) dest : variant;{$ifdef SYSTEMINLINE}inline;{$e
 operator :=(const source : longint) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
 operator :=(const source : qword) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
 operator :=(const source : int64) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
+operator :=(const source : NativeInt) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
+operator :=(const source : NativeUInt) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
 
 { Boolean }
 operator :=(const source : boolean) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
@@ -299,6 +301,8 @@ operator :=(const source : variant) dest : dword;{$ifdef SYSTEMINLINE}inline;{$e
 operator :=(const source : variant) dest : longint;{$ifdef SYSTEMINLINE}inline;{$endif}
 operator :=(const source : variant) dest : qword;{$ifdef SYSTEMINLINE}inline;{$endif}
 operator :=(const source : variant) dest : int64;{$ifdef SYSTEMINLINE}inline;{$endif}
+operator :=(const source : variant) dest : NativeInt;{$ifdef SYSTEMINLINE}inline;{$endif}
+operator :=(const source : variant) dest : NativeUInt;{$ifdef SYSTEMINLINE}inline;{$endif}
 
 { Boolean }
 operator :=(const source : variant) dest : boolean;{$ifdef SYSTEMINLINE}inline;{$endif}

+ 12 - 0
tests/webtbs/tw37339.pp

@@ -0,0 +1,12 @@
+{$mode objfpc}
+uses
+  variants;
+   
+function VarToObj(const Value: Variant): TObject;
+begin
+  Result := TObject(Pointer(NativeInt(Value)));
+end; 
+
+begin
+end.
+