Browse Source

fcl-passrc: made helpers deterministic

git-svn-id: trunk@42895 -
Mattias Gaertner 6 years ago
parent
commit
cdd4d0e04f
1 changed files with 6 additions and 50 deletions
  1. 6 50
      packages/fcl-passrc/src/pasresolver.pp

+ 6 - 50
packages/fcl-passrc/src/pasresolver.pp

@@ -2326,8 +2326,6 @@ function IsValidIdent(const Ident: string; AllowDots: Boolean = False; StrictDot
 function DotExprToName(Expr: TPasExpr): string;
 function DotExprToName(Expr: TPasExpr): string;
 function NoNil(o: TObject): TObject;
 function NoNil(o: TObject): TObject;
 
 
-function ComparePRHelperEntries(Entry1, Entry2: TPRHelperEntry): integer;
-
 function dbgs(const Flags: TPasResolverComputeFlags): string; overload;
 function dbgs(const Flags: TPasResolverComputeFlags): string; overload;
 function dbgs(const a: TResolvedRefAccess): string; overload;
 function dbgs(const a: TResolvedRefAccess): string; overload;
 function dbgs(const Flags: TResolvedReferenceFlags): string; overload;
 function dbgs(const Flags: TResolvedReferenceFlags): string; overload;
@@ -2904,27 +2902,6 @@ begin
 end;
 end;
 {$ENDIF}
 {$ENDIF}
 
 
-function ComparePRHelperEntries(Entry1, Entry2: TPRHelperEntry): integer;
-var
-  HelperForType1, HelperForType2: TPasType;
-begin
-  HelperForType1:=Entry1.HelperForType;
-  HelperForType2:=Entry2.HelperForType;
-  {$IFDEF Pas2js}
-  if HelperForType1.PasElementId<HelperForType2.PasElementId then
-    exit(1)
-  else if HelperForType1.PasElementId>HelperForType2.PasElementId then
-    exit(-1)
-  {$ELSE}
-  if Pointer(HelperForType1)>Pointer(HelperForType2) then
-    exit(1)
-  else if Pointer(HelperForType1)<Pointer(HelperForType2) then
-    exit(-1)
-  {$ENDIF}
-  else
-    Result:=Entry1.Added-Entry2.Added;
-end;
-
 function dbgs(const Flags: TPasResolverComputeFlags): string;
 function dbgs(const Flags: TPasResolverComputeFlags): string;
 var
 var
   s: string;
   s: string;
@@ -20716,40 +20693,19 @@ end;
 
 
 procedure TPasResolver.AddHelper(Helper: TPasClassType;
 procedure TPasResolver.AddHelper(Helper: TPasClassType;
   var List: TPRHelperEntryArray);
   var List: TPRHelperEntryArray);
-  {$IF defined(fpc) and (FPC_FULLVERSION<30101)}
-  procedure Insert(Item: TPRHelperEntry; var A: TPRHelperEntryArray; Index: integer); overload;
-  var
-    i: Integer;
-  begin
-    if Index<0 then
-      RaiseInternalError(20190118211455);
-    if Index>length(A) then
-      RaiseInternalError(20190119122624);
-    SetLength(A,length(A)+1);
-    for i:=length(A)-1 downto Index+1 do
-      A[i]:=A[i-1];
-    A[Index]:=Item;
-  end;
-  {$ENDIF}
 var
 var
-  NewEntry, Entry: TPRHelperEntry;
-  i: Integer;
+  NewEntry: TPRHelperEntry;
+  Added: Integer;
   HelperForType: TPasType;
   HelperForType: TPasType;
 begin
 begin
   HelperForType:=ResolveAliasType(Helper.HelperForType,false);
   HelperForType:=ResolveAliasType(Helper.HelperForType,false);
   NewEntry:=TPRHelperEntry.Create;
   NewEntry:=TPRHelperEntry.Create;
   NewEntry.Helper:=Helper;
   NewEntry.Helper:=Helper;
   NewEntry.HelperForType:=HelperForType;
   NewEntry.HelperForType:=HelperForType;
-  NewEntry.Added:=length(List);
-  // keep list sorted for 1. HelperForType and 2. Added
-  i:=0;
-  while i<length(List) do
-    begin
-    Entry:=List[i];
-    if ComparePRHelperEntries(NewEntry,Entry)<=0 then break;
-    inc(i);
-    end;
-  Insert(NewEntry,List,i);
+  Added:=length(List);
+  NewEntry.Added:=Added;
+  SetLength(List,Added+1);
+  List[Added]:=NewEntry;
 end;
 end;
 
 
 procedure TPasResolver.AddActiveHelper(Helper: TPasClassType);
 procedure TPasResolver.AddActiveHelper(Helper: TPasClassType);