From 381f6f7f23cf2b8f091905f8840ab40e288482b4 Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Thu, 3 Dec 2020 10:44:32 +0000 Subject: [PATCH] pastojs: filer: fixed restoring overload names of specialized methods git-svn-id: trunk@47674 - (cherry picked from commit 0eac775cead23ff361fd0228c92a946334f10b5d) --- packages/fcl-passrc/src/pasresolver.pp | 2 +- packages/pastojs/src/fppas2js.pp | 18 ++++++++++++++++++ packages/pastojs/src/pas2jsfiler.pp | 3 ++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/fcl-passrc/src/pasresolver.pp b/packages/fcl-passrc/src/pasresolver.pp index 28319a9809..e9d6220254 100644 --- a/packages/fcl-passrc/src/pasresolver.pp +++ b/packages/fcl-passrc/src/pasresolver.pp @@ -1871,7 +1871,7 @@ type procedure SpecializeElArray(GenEl, SpecEl: TPasElement; GenList: TPasElementArray; var SpecList: TPasElementArray; AllowReferences: boolean {$IFDEF CheckPasTreeRefCount}; const RefId: string{$ENDIF}); - procedure SpecializeProcedure(GenEl, SpecEl: TPasProcedure; SpecializedItem: TPRSpecializedItem); + procedure SpecializeProcedure(GenEl, SpecEl: TPasProcedure; SpecializedItem: TPRSpecializedItem); virtual; procedure SpecializeOperator(GenEl, SpecEl: TPasOperator); procedure SpecializeProcedureType(GenEl, SpecEl: TPasProcedureType; SpecializedItem: TPRSpecializedItem); procedure SpecializeProcedureBody(GenEl, SpecEl: TProcedureBody); diff --git a/packages/pastojs/src/fppas2js.pp b/packages/pastojs/src/fppas2js.pp index e7149b0584..d2cd0e4e44 100644 --- a/packages/pastojs/src/fppas2js.pp +++ b/packages/pastojs/src/fppas2js.pp @@ -1559,6 +1559,8 @@ type override; procedure SpecializeGenericImpl(SpecializedItem: TPRSpecializedItem); override; + procedure SpecializeProcedure(GenEl, SpecEl: TPasProcedure; + SpecializedItem: TPRSpecializedItem); override; function SpecializeParamsNeedDelay(SpecializedItem: TPRSpecializedItem): TPasElement; virtual; function IsSpecializedNonStaticMethod(ProcType: TPasProcedureType): boolean; protected @@ -5267,6 +5269,22 @@ begin end; end; +procedure TPas2JSResolver.SpecializeProcedure(GenEl, SpecEl: TPasProcedure; + SpecializedItem: TPRSpecializedItem); +var + GenProcScope, SpecProcScope: TPas2JSProcedureScope; +begin + GenProcScope:=GenEl.CustomData as TPas2JSProcedureScope; + SpecProcScope:=SpecEl.CustomData as TPas2JSProcedureScope; + if SpecializedItem=nil then + begin + SpecProcScope.OverloadName:=GenProcScope.OverloadName; + SpecProcScope.JSName:=GenProcScope.JSName; + // SpecProcScope.ResultVarName is set on demand + end; + inherited SpecializeProcedure(GenEl, SpecEl, SpecializedItem); +end; + function TPas2JSResolver.SpecializeParamsNeedDelay( SpecializedItem: TPRSpecializedItem): TPasElement; // finds first specialize param defined later than the generic diff --git a/packages/pastojs/src/pas2jsfiler.pp b/packages/pastojs/src/pas2jsfiler.pp index 4be2756766..20082af60b 100644 --- a/packages/pastojs/src/pas2jsfiler.pp +++ b/packages/pastojs/src/pas2jsfiler.pp @@ -4596,6 +4596,7 @@ var OldInGeneric: Boolean; begin WritePasElement(Obj,El,aContext); + Scope:=El.CustomData as TPas2JSProcedureScope; //writeln('TPCUWriter.WriteProcedure ',GetObjName(El),' ',GetObjName(Scope),' ',Resolver.GetElementSourcePosStr(El)); @@ -6698,7 +6699,7 @@ begin if not ReadInteger(Obj,'Id',Id,GenEl) then RaiseMsg(20200531085133,GenEl); if not ReadString(Obj,'SpecName',SpecName,GenEl) then - RaiseMsg(20200531085133,GenEl); + RaiseMsg(20200531085134,GenEl); PendSpec:=PromiseSpecialize(Id,SpecName,nil,GenEl); PendSpec.Obj:=Obj;