mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-09-11 20:09:04 +02:00
fcl-passrc: made helpers deterministic
This commit is contained in:
parent
f810306aae
commit
da53f15c45
@ -2126,8 +2126,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;
|
||||||
@ -2704,27 +2702,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;
|
||||||
@ -17385,40 +17362,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;
|
NewEntry: TPRHelperEntry;
|
||||||
i: Integer;
|
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);
|
Added:=length(List);
|
||||||
// keep list sorted for 1. HelperForType and 2. Added
|
NewEntry.Added:=Added;
|
||||||
i:=0;
|
SetLength(List,Added+1);
|
||||||
while i<length(List) do
|
List[Added]:=NewEntry;
|
||||||
begin
|
|
||||||
Entry:=List[i];
|
|
||||||
if ComparePRHelperEntries(NewEntry,Entry)<=0 then break;
|
|
||||||
inc(i);
|
|
||||||
end;
|
|
||||||
Insert(NewEntry,List,i);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TPasResolver.AddActiveHelper(Helper: TPasClassType);
|
procedure TPasResolver.AddActiveHelper(Helper: TPasClassType);
|
||||||
|
Loading…
Reference in New Issue
Block a user