pastojs: specialize procedure using pascal name

git-svn-id: trunk@46796 -
This commit is contained in:
Mattias Gaertner 2020-09-07 19:44:04 +00:00
parent 2f661371fe
commit ce9d7f9995

View File

@ -1513,7 +1513,6 @@ type
function GenerateGUID(El: TPasClassType): string; virtual; function GenerateGUID(El: TPasClassType): string; virtual;
protected protected
// generic/specialize // generic/specialize
function CreateSpecializedTypeName(Item: TPRSpecializedItem): string; override;
procedure SpecializeGenericIntf(SpecializedItem: TPRSpecializedItem); procedure SpecializeGenericIntf(SpecializedItem: TPRSpecializedItem);
override; override;
procedure SpecializeGenericImpl(SpecializedItem: TPRSpecializedItem); procedure SpecializeGenericImpl(SpecializedItem: TPRSpecializedItem);
@ -5024,22 +5023,6 @@ begin
Result:=Result+'}'; Result:=Result+'}';
end; end;
function TPas2JSResolver.CreateSpecializedTypeName(Item: TPRSpecializedItem): string;
var
C: TClass;
begin
C:=Item.GenericEl.ClassType;
if (C=TPasProcedureType)
or (C=TPasFunctionType)
or (C=TPasArrayType)
or (C=TPasRecordType)
or (C=TPasClassType)
then
Result:=inherited CreateSpecializedTypeName(Item)
else
Result:=Item.GenericEl.Name+'$G'+IntToStr(Item.Index+1);
end;
procedure TPas2JSResolver.SpecializeGenericIntf( procedure TPas2JSResolver.SpecializeGenericIntf(
SpecializedItem: TPRSpecializedItem); SpecializedItem: TPRSpecializedItem);
begin begin
@ -19418,8 +19401,10 @@ var
C: TClass; C: TClass;
NewEl: TJSElement; NewEl: TJSElement;
Members: TFPList; Members: TFPList;
aResolver: TPas2JSResolver;
begin begin
Result:=false; Result:=false;
aResolver:=FuncContext.Resolver;
if El.ClassType=TPasRecordType then if El.ClassType=TPasRecordType then
mt:=mtRecord mt:=mtRecord
else if El.ClassType=TPasClassType then else if El.ClassType=TPasClassType then
@ -19457,7 +19442,11 @@ begin
if C=TPasVariable then if C=TPasVariable then
NewEl:=CreateRTTIMemberField(Members,i,MembersFuncContext) NewEl:=CreateRTTIMemberField(Members,i,MembersFuncContext)
else if C.InheritsFrom(TPasProcedure) then else if C.InheritsFrom(TPasProcedure) then
NewEl:=CreateRTTIMemberMethod(Members,i,MembersFuncContext) begin
if aResolver.GetProcTemplateTypes(TPasProcedure(P))<>nil then
continue; // parametrized functions cannot be published
NewEl:=CreateRTTIMemberMethod(Members,i,MembersFuncContext);
end
else if C=TPasProperty then else if C=TPasProperty then
NewEl:=CreateRTTIMemberProperty(Members,i,MembersFuncContext) NewEl:=CreateRTTIMemberProperty(Members,i,MembersFuncContext)
else if C.InheritsFrom(TPasType) else if C.InheritsFrom(TPasType)