Browse Source

* Make FreeAndNil type safe

Michaël Van Canneyt 2 months ago
parent
commit
3df8de1994

+ 1 - 1
packages/fcl-db/src/base/fieldmap.pp

@@ -641,7 +641,7 @@ end;
 destructor TFieldMap.Destroy;
 begin
   if FFreeDataset then
-    FreeAndNil(FFreeDataset);
+    FreeAndNil(FDataset);
   inherited Destroy;
 end;
 

+ 1 - 1
rtl/objpas/sysutils/sysutilh.inc

@@ -348,7 +348,7 @@ Type
   { Type Helpers}
   {$i syshelph.inc}
 
-  procedure FreeAndNil(var obj);
+  procedure FreeAndNil(constref obj : TObject);
   procedure FreeMemAndNil(var p);
 
   { interface handling }

+ 5 - 3
rtl/objpas/sysutils/sysutils.inc

@@ -157,12 +157,14 @@ end;
   { OS utility code }
   {$i osutil.inc}
 
-    procedure FreeAndNil(var obj);
+    procedure FreeAndNil(constref obj: TObject);
+      type
+        PObject = ^TObject;
       var
         temp: tobject;
       begin
-        temp:=tobject(obj);
-        pointer(obj):=nil;
+        temp:=obj;
+        PObject(@obj)^:=nil;
         temp.free;
       end;