pastojs: filer: restore method decl SelfArg

git-svn-id: trunk@47706 -
This commit is contained in:
Mattias Gaertner 2020-12-06 22:18:05 +00:00
parent bf5a2a46de
commit 54627fe1e7
2 changed files with 13 additions and 16 deletions

View File

@ -21166,7 +21166,12 @@ var
if ProcScope.ImplProc<>nil then if ProcScope.ImplProc<>nil then
ProcScope:=ProcScope.ImplProc.CustomData as TPas2JSProcedureScope; ProcScope:=ProcScope.ImplProc.CustomData as TPas2JSProcedureScope;
if ProcScope.SelfArg=nil then if ProcScope.SelfArg=nil then
begin
{$IFDEF VerbosePas2JS}
writeln('CreateReference Proc=',GetObjPath(Proc),' Left=',GetObjPath(Left),' LeftResolved=',GetResolverResultDbg(LeftResolved),' ProcScope.DeclarationProc=',GetObjPath(ProcScope.DeclarationProc));
{$ENDIF}
RaiseNotSupported(PosEl,AContext,20190209214906,GetObjName(Proc)); RaiseNotSupported(PosEl,AContext,20190209214906,GetObjName(Proc));
end;
Result:=CreateProcCallArgRef(Left,LeftResolved,ProcScope.SelfArg,AContext); Result:=CreateProcCallArgRef(Left,LeftResolved,ProcScope.SelfArg,AContext);
end; end;
end; end;

View File

@ -4576,10 +4576,9 @@ begin
RaiseMsg(20180219135933,Scope.Element); RaiseMsg(20180219135933,Scope.Element);
AddReferenceToObj(Obj,'ImplProc',Scope.ImplProc); AddReferenceToObj(Obj,'ImplProc',Scope.ImplProc);
AddReferenceToObj(Obj,'Overridden',Scope.OverriddenProc); AddReferenceToObj(Obj,'Overridden',Scope.OverriddenProc);
// ClassOrRecordScope: TPasClassScope; auto derived // ClassOrRecordScope is auto derived
if Scope.SelfArg<>nil then // SelfArg is auto derived
RaiseMsg(20180211180457,Scope.Element); // SelfArg only valid for method implementation // Mode is auto derived
// Mode: TModeSwitch: auto derived
WriteProcScopeFlags(Obj,'SFlags',Scope.Flags,[]); WriteProcScopeFlags(Obj,'SFlags',Scope.Flags,[]);
WriteBoolSwitches(Obj,'BoolSwitches',Scope.BoolSwitches,aContext.BoolSwitches); WriteBoolSwitches(Obj,'BoolSwitches',Scope.BoolSwitches,aContext.BoolSwitches);
WriteModeSwitches(Obj,'ModeSwitches',Scope.ModeSwitches,aContext.ModeSwitches); WriteModeSwitches(Obj,'ModeSwitches',Scope.ModeSwitches,aContext.ModeSwitches);
@ -9492,12 +9491,15 @@ begin
Scope.ClassRecScope:=Proc.Parent.CustomData as TPasClassOrRecordScope // no AddRef Scope.ClassRecScope:=Proc.Parent.CustomData as TPasClassOrRecordScope // no AddRef
else else
; // set via Set_ProcedureScope_ImplProc ; // set via Set_ProcedureScope_ImplProc
// Scope.SelfArg only valid for method implementation
Scope.Flags:=ReadProcScopeFlags(Obj,Proc,'SFlags',[]); Scope.Flags:=ReadProcScopeFlags(Obj,Proc,'SFlags',[]);
Scope.BoolSwitches:=ReadBoolSwitches(Obj,Proc,'BoolSwitches',aContext.BoolSwitches); Scope.BoolSwitches:=ReadBoolSwitches(Obj,Proc,'BoolSwitches',aContext.BoolSwitches);
Scope.ModeSwitches:=ReadModeSwitches(Obj,Proc,'ModeSwitches',aContext.ModeSwitches); Scope.ModeSwitches:=ReadModeSwitches(Obj,Proc,'ModeSwitches',aContext.ModeSwitches);
// Scope.SelfArg
if (Scope.ClassRecScope<>nil) and (Scope.DeclarationProc=nil) then
Resolver.CreateProcSelfArg(Proc);
//ReadIdentifierScope(Obj,Scope,aContext); //ReadIdentifierScope(Obj,Scope,aContext);
end; end;
@ -9628,17 +9630,6 @@ begin
El.ProcType:=TPasProcedureType(CreateElement(TPasProcedureTypeClass(DeclProc.ProcType.ClassType),'',El)); El.ProcType:=TPasProcedureType(CreateElement(TPasProcedureTypeClass(DeclProc.ProcType.ClassType),'',El));
El.Modifiers:=ReadProcedureModifiers(Obj,El,'PMods',DeclProc.Modifiers*PCUProcedureModifiersImplProc); El.Modifiers:=ReadProcedureModifiers(Obj,El,'PMods',DeclProc.Modifiers*PCUProcedureModifiersImplProc);
if HasBody then
begin
// not a precompiled proc -> copy signature
//if El.ProcType is TPasFunctionType then
// begin
// FuncType:=TPasFunctionType(El.ProcType);
// FuncType.ResultEl:=TPasResultElement(CreateElement(TPasResultElement,
// TPasFunctionType(DeclProc.ProcType).ResultEl.Name,FuncType));
// end;
end;
end end
else else
begin begin
@ -9671,6 +9662,7 @@ begin
end; end;
DefProcMods:=GetDefaultProcModifiers(El); DefProcMods:=GetDefaultProcModifiers(El);
El.Modifiers:=ReadProcedureModifiers(Obj,El,'PMods',DefProcMods); El.Modifiers:=ReadProcedureModifiers(Obj,El,'PMods',DefProcMods);
// read ProcType after El.Modifiers // read ProcType after El.Modifiers
El.ProcType:=TPasProcedureType(ReadElementProperty( El.ProcType:=TPasProcedureType(ReadElementProperty(
Obj,El,'ProcType',TPasProcedureType,aContext)); Obj,El,'ProcType',TPasProcedureType,aContext));