Bladeren bron

* fixed olevariant -> variant conversion

git-svn-id: trunk@5131 -
florian 19 jaren geleden
bovenliggende
commit
5c9b39549a
4 gewijzigde bestanden met toevoegingen van 18 en 2 verwijderingen
  1. 11 0
      compiler/defcmp.pas
  2. 1 0
      compiler/options.pas
  3. 2 2
      rtl/inc/variant.inc
  4. 4 0
      rtl/inc/varianth.inc

+ 11 - 0
compiler/defcmp.pas

@@ -827,6 +827,17 @@ implementation
                                eq:=te_convert_l1;
                             end;
                        end;
+                     variantdef :
+                       begin
+                         { doing this in the compiler avoids a lot of unncessary
+                           copying }
+                         if (tvariantdef(def_from).varianttype=vt_olevariant) and
+                           (tvariantdef(def_to).varianttype=vt_normalvariant) then
+                           begin
+                             doconv:=tc_equal;
+                             eq:=te_convert_l1;
+                           end;
+                       end;
                    end;
                  end;
              end;

+ 1 - 0
compiler/options.pas

@@ -1898,6 +1898,7 @@ begin
   def_system_macro('PARAOUTFILE');
   def_system_macro('RESSTRSECTIONS');
   def_system_macro('FPC_HASFIXED64BITVARIANT');
+  def_system_macro('FPC_HASINTERNALOLEVARIANT2VARIANTCAST');
 {$ifdef x86}
 {  def_system_macro('INTERNAL_BACKTRACE');}
 {$endif}

+ 2 - 2
rtl/inc/variant.inc

@@ -495,12 +495,12 @@ operator :=(const source : variant) dest : tdatetime;{$ifdef SYSTEMINLINE}inline
     dest:=variantmanager.vartotdatetime(source);
   end;
 
-
+{$ifndef FPC_HASINTERNALOLEVARIANT2VARIANTCAST}
 operator :=(const source : olevariant) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
     tvardata(result):=tvardata(source);
   end;
-
+{$endif FPC_HASINTERNALOLEVARIANT2VARIANTCAST}
 
 operator :=(const source : variant) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin

+ 4 - 0
rtl/inc/varianth.inc

@@ -303,7 +303,11 @@ operator :=(const source : variant) dest : comp;{$ifdef SYSTEMINLINE}inline;{$en
 operator :=(const source : variant) dest : real;{$ifdef SYSTEMINLINE}inline;{$endif}
 {$endif VER2_0}
 
+{ done by the compiler now }
+{$ifndef FPC_HASINTERNALOLEVARIANT2VARIANTCAST}
 operator :=(const source : olevariant) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
+{$endif FPC_HASINTERNALOLEVARIANT2VARIANTCAST}
+
 operator :=(const source : variant) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif}
 
 { Misc. }