Browse Source

pastojs: filer: fixed restoring overload names of specialized methods

git-svn-id: trunk@47674 -
Mattias Gaertner 4 years ago
parent
commit
0eac775cea

+ 1 - 1
packages/fcl-passrc/src/pasresolver.pp

@@ -1871,7 +1871,7 @@ type
     procedure SpecializeElArray(GenEl, SpecEl: TPasElement;
     procedure SpecializeElArray(GenEl, SpecEl: TPasElement;
       GenList: TPasElementArray; var SpecList: TPasElementArray; AllowReferences: boolean
       GenList: TPasElementArray; var SpecList: TPasElementArray; AllowReferences: boolean
       {$IFDEF CheckPasTreeRefCount}; const RefId: string{$ENDIF});
       {$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 SpecializeOperator(GenEl, SpecEl: TPasOperator);
     procedure SpecializeProcedureType(GenEl, SpecEl: TPasProcedureType; SpecializedItem: TPRSpecializedItem);
     procedure SpecializeProcedureType(GenEl, SpecEl: TPasProcedureType; SpecializedItem: TPRSpecializedItem);
     procedure SpecializeProcedureBody(GenEl, SpecEl: TProcedureBody);
     procedure SpecializeProcedureBody(GenEl, SpecEl: TProcedureBody);

+ 18 - 0
packages/pastojs/src/fppas2js.pp

@@ -1559,6 +1559,8 @@ type
       override;
       override;
     procedure SpecializeGenericImpl(SpecializedItem: TPRSpecializedItem);
     procedure SpecializeGenericImpl(SpecializedItem: TPRSpecializedItem);
       override;
       override;
+    procedure SpecializeProcedure(GenEl, SpecEl: TPasProcedure;
+      SpecializedItem: TPRSpecializedItem); override;
     function SpecializeParamsNeedDelay(SpecializedItem: TPRSpecializedItem): TPasElement; virtual;
     function SpecializeParamsNeedDelay(SpecializedItem: TPRSpecializedItem): TPasElement; virtual;
     function IsSpecializedNonStaticMethod(ProcType: TPasProcedureType): boolean;
     function IsSpecializedNonStaticMethod(ProcType: TPasProcedureType): boolean;
   protected
   protected
@@ -5267,6 +5269,22 @@ begin
     end;
     end;
 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(
 function TPas2JSResolver.SpecializeParamsNeedDelay(
   SpecializedItem: TPRSpecializedItem): TPasElement;
   SpecializedItem: TPRSpecializedItem): TPasElement;
 // finds first specialize param defined later than the generic
 // finds first specialize param defined later than the generic

+ 2 - 1
packages/pastojs/src/pas2jsfiler.pp

@@ -4596,6 +4596,7 @@ var
   OldInGeneric: Boolean;
   OldInGeneric: Boolean;
 begin
 begin
   WritePasElement(Obj,El,aContext);
   WritePasElement(Obj,El,aContext);
+
   Scope:=El.CustomData as TPas2JSProcedureScope;
   Scope:=El.CustomData as TPas2JSProcedureScope;
   //writeln('TPCUWriter.WriteProcedure ',GetObjName(El),' ',GetObjName(Scope),' ',Resolver.GetElementSourcePosStr(El));
   //writeln('TPCUWriter.WriteProcedure ',GetObjName(El),' ',GetObjName(Scope),' ',Resolver.GetElementSourcePosStr(El));
 
 
@@ -6698,7 +6699,7 @@ begin
   if not ReadInteger(Obj,'Id',Id,GenEl) then
   if not ReadInteger(Obj,'Id',Id,GenEl) then
     RaiseMsg(20200531085133,GenEl);
     RaiseMsg(20200531085133,GenEl);
   if not ReadString(Obj,'SpecName',SpecName,GenEl) then
   if not ReadString(Obj,'SpecName',SpecName,GenEl) then
-    RaiseMsg(20200531085133,GenEl);
+    RaiseMsg(20200531085134,GenEl);
 
 
   PendSpec:=PromiseSpecialize(Id,SpecName,nil,GenEl);
   PendSpec:=PromiseSpecialize(Id,SpecName,nil,GenEl);
   PendSpec.Obj:=Obj;
   PendSpec.Obj:=Obj;