Browse Source

* Replace labeltable with dynamic array

Michaël Van Canneyt 5 months ago
parent
commit
07a2c6b37e
2 changed files with 7 additions and 11 deletions
  1. 4 7
      compiler/aopt.pas
  2. 3 4
      compiler/aoptobj.pas

+ 4 - 7
compiler/aopt.pas

@@ -142,8 +142,7 @@ Unit aopt;
         begin
           If (LabelDif <> 0) Then
             Begin
-              GetMem(LabelTable, LabelDif*SizeOf(TLabelTableItem));
-              FillChar(LabelTable^, LabelDif*SizeOf(TLabelTableItem), 0);
+              SetLength(LabelTable, LabelDif);
             end;
           p := BlockStart;
           While (P <> BlockEnd) Do
@@ -158,7 +157,7 @@ Unit aopt;
                         LabelIdx:=tai_label(p).labsym.labelnr-LowLabel;
                         if LabelIdx>int64(LabelDif) then
                           internalerror(200604202);
-                        LabelTable^[LabelIdx].PaiObj := p;
+                        LabelTable[LabelIdx].PaiObj := p;
                       end;
                   end;
                 ait_regAlloc:
@@ -255,8 +254,7 @@ Unit aopt;
       begin
         if assigned(LabelInfo^.labeltable) then
           begin
-            freemem(LabelInfo^.labeltable);
-            LabelInfo^.labeltable := nil;
+            LabelInfo^.labeltable:=Nil;
           end;
         LabelInfo^.labeldif:=0;
         LabelInfo^.lowlabel:=high(longint);
@@ -317,8 +315,7 @@ Unit aopt;
     Destructor TAsmOptimizer.Destroy;
       Begin
         ReleaseUsedRegs(TmpUsedRegs);
-        if assigned(LabelInfo^.LabelTable) then
-          Freemem(LabelInfo^.LabelTable);
+        LabelInfo^.LabelTable:=nil;
         Dispose(LabelInfo);
         inherited Destroy;
       End;

+ 3 - 4
compiler/aoptobj.pas

@@ -222,8 +222,7 @@ Unit AoptObj;
         PaiObj: Tai;
       End;
 
-      TLabelTable = Array[0..2500000] Of TLabelTableItem;
-      PLabelTable = ^TLabelTable;
+      TLabelTable = Array Of TLabelTableItem;
       PLabelInfo = ^TLabelInfo;
       TLabelInfo = Record
         { the highest and lowest label number occurring in the current code }
@@ -232,7 +231,7 @@ Unit AoptObj;
         LabelDif: cardinal;
         { table that contains the addresses of the Pai_Label objects associated
           with each label number                                                }
-        LabelTable: PLabelTable;
+        LabelTable: TLabelTable;
       End;
 
     { ************************************************************************* }
@@ -1667,7 +1666,7 @@ Unit AoptObj;
       begin
         if (int64(sym.labelnr) >= int64(labelinfo^.lowlabel)) and
            (int64(sym.labelnr) <= int64(labelinfo^.highlabel)) then   { range check, a jump can go past an assembler block! }
-          getlabelwithsym := labelinfo^.labeltable^[sym.labelnr-labelinfo^.lowlabel].paiobj
+          getlabelwithsym := labelinfo^.labeltable[sym.labelnr-labelinfo^.lowlabel].paiobj
         else
           getlabelwithsym := nil;
       end;