Browse Source

* Introduce TFPList.CheckIndex (bug ID 30887)

git-svn-id: trunk@34873 -
michael 8 years ago
parent
commit
2e3ab0d37e
2 changed files with 17 additions and 15 deletions
  1. 2 1
      rtl/objpas/classes/classesh.inc
  2. 15 14
      rtl/objpas/classes/lists.inc

+ 2 - 1
rtl/objpas/classes/classesh.inc

@@ -230,7 +230,8 @@ Type
     procedure Put(Index: Integer; Item: Pointer); {$ifdef CLASSESINLINE} inline; {$endif CLASSESINLINE}
     procedure Put(Index: Integer; Item: Pointer); {$ifdef CLASSESINLINE} inline; {$endif CLASSESINLINE}
     procedure SetCapacity(NewCapacity: Integer);
     procedure SetCapacity(NewCapacity: Integer);
     procedure SetCount(NewCount: Integer);
     procedure SetCount(NewCount: Integer);
-    Procedure RaiseIndexError(Index: Integer);
+    Procedure RaiseIndexError(Index: Integer); deprecated;
+    Procedure CheckIndex(AIndex : Integer); {$ifdef CLASSESINLINE} inline;{$ENDIF}
   public
   public
     Type
     Type
       TDirection = (FromBeginning, FromEnd);
       TDirection = (FromBeginning, FromEnd);

+ 15 - 14
rtl/objpas/classes/lists.inc

@@ -45,20 +45,26 @@ Const
 
 
 procedure TFPList.RaiseIndexError(Index : Integer);
 procedure TFPList.RaiseIndexError(Index : Integer);
 begin
 begin
+  // We should be able to remove this, but unfortunately it is marked protected.
   Error(SListIndexError, Index);
   Error(SListIndexError, Index);
 end;
 end;
 
 
+Procedure TFPList.CheckIndex(AIndex : Integer);
+
+begin
+  If (AIndex < 0) or (AIndex >= FCount) then
+    Error(SListIndexError, AIndex); // Don't use RaiseIndexError, exception address will be better if we use error.
+end;
+
 function TFPList.Get(Index: Integer): Pointer;
 function TFPList.Get(Index: Integer): Pointer;
 begin
 begin
-  If (Index < 0) or (Index >= FCount) then
-    RaiseIndexError(Index);
+  CheckIndex(Index);
   Result:=FList^[Index];
   Result:=FList^[Index];
 end;
 end;
 
 
 procedure TFPList.Put(Index: Integer; Item: Pointer);
 procedure TFPList.Put(Index: Integer; Item: Pointer);
 begin
 begin
-  if (Index < 0) or (Index >= FCount) then
-    RaiseIndexError(Index);
+  CheckIndex(Index);
   Flist^[Index] := Item;
   Flist^[Index] := Item;
 end;
 end;
 
 
@@ -140,8 +146,7 @@ end;
 
 
 procedure TFPList.Delete(Index: Integer);
 procedure TFPList.Delete(Index: Integer);
 begin
 begin
-  If (Index<0) or (Index>=FCount) then
-    Error (SListIndexError, Index);
+  CheckIndex(Index);
   FCount := FCount-1;
   FCount := FCount-1;
   System.Move (FList^[Index+1], FList^[Index], (FCount - Index) * SizeOf(Pointer));
   System.Move (FList^[Index+1], FList^[Index], (FCount - Index) * SizeOf(Pointer));
   // Shrink the list if appropriate:
   // Shrink the list if appropriate:
@@ -163,10 +168,8 @@ procedure TFPList.Exchange(Index1, Index2: Integer);
 var
 var
   Temp : Pointer;
   Temp : Pointer;
 begin
 begin
-  If ((Index1 >= FCount) or (Index1 < 0)) then
-    Error(SListIndexError, Index1);
-  If ((Index2 >= FCount) or (Index2 < 0)) then
-    Error(SListIndexError, Index2);
+  CheckIndex(Index1);
+  CheckIndex(Index2);
   Temp := FList^[Index1];
   Temp := FList^[Index1];
   FList^[Index1] := FList^[Index2];
   FList^[Index1] := FList^[Index2];
   FList^[Index2] := Temp;
   FList^[Index2] := Temp;
@@ -256,10 +259,8 @@ procedure TFPList.Move(CurIndex, NewIndex: Integer);
 var
 var
   Temp : Pointer;
   Temp : Pointer;
 begin
 begin
-  if ((CurIndex < 0) or (CurIndex > Count - 1)) then
-    Error(SListIndexError, CurIndex);
-  if ((NewIndex < 0) or (NewIndex > Count -1)) then
-    Error(SlistIndexError, NewIndex);
+  CheckIndex(CurIndex);
+  CheckIndex(NewIndex);
   Temp := FList^[CurIndex];
   Temp := FList^[CurIndex];
   if NewIndex > CurIndex then
   if NewIndex > CurIndex then
     System.Move(FList^[CurIndex+1], FList^[CurIndex], (NewIndex - CurIndex) * SizeOf(Pointer))
     System.Move(FList^[CurIndex+1], FList^[CurIndex], (NewIndex - CurIndex) * SizeOf(Pointer))