summaryrefslogtreecommitdiff
path: root/packages/pastojs
diff options
context:
space:
mode:
authormattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-10-29 18:29:57 +0000
committermattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-10-29 18:29:57 +0000
commit67ace3475521e74bd10f25c1c829ae694cfeff02 (patch)
tree703f1e12e9c0adca52493da6042deb8033d09d4a /packages/pastojs
parent05c3ce0c77ee87e6ae5eeec8236e31351f306bc7 (diff)
downloadfpc-67ace3475521e74bd10f25c1c829ae694cfeff02.tar.gz
pastojs: fixed pcu canonical class-of
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@43329 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/pastojs')
-rw-r--r--packages/pastojs/src/pas2jsfiler.pp18
1 files changed, 16 insertions, 2 deletions
diff --git a/packages/pastojs/src/pas2jsfiler.pp b/packages/pastojs/src/pas2jsfiler.pp
index b5b4fdccfa..14748b4911 100644
--- a/packages/pastojs/src/pas2jsfiler.pp
+++ b/packages/pastojs/src/pas2jsfiler.pp
@@ -694,6 +694,7 @@ type
procedure AddReferenceToArray(Arr: TJSONArray; El: TPasElement; WriteNull: boolean = true); virtual;
procedure AddReferenceToObj(Obj: TJSONObject; const PropName: string;
El: TPasElement; WriteNil: boolean = false); virtual;
+ procedure CreateAutoElReferenceId(Ref: TPCUFilerElementRef); virtual;
procedure CreateElReferenceId(Ref: TPCUFilerElementRef); virtual;
function CreateElementRef(El: TPasElement): TPCUFilerElementRef; override;
procedure AddedBuiltInRef(Ref: TPCUFilerElementRef); override;
@@ -2086,12 +2087,17 @@ begin
end;
end;
-procedure TPCUWriter.CreateElReferenceId(Ref: TPCUFilerElementRef);
+procedure TPCUWriter.CreateAutoElReferenceId(Ref: TPCUFilerElementRef);
begin
if Ref.Id<>0 then
RaiseMsg(20180207114300,Ref.Element,IntToStr(Ref.Id));
inc(FElementIdCounter);
Ref.Id:=FElementIdCounter;
+end;
+
+procedure TPCUWriter.CreateElReferenceId(Ref: TPCUFilerElementRef);
+begin
+ CreateAutoElReferenceId(Ref);
Ref.Obj.Add('Id',Ref.Id);
end;
@@ -3528,6 +3534,7 @@ var
ScopeIntf: TFPList;
o: TObject;
SubObj: TJSONObject;
+ Ref: TPCUFilerElementRef;
begin
WriteIdentifierScope(Obj,Scope,aContext);
aClass:=Scope.Element as TPasClassType;
@@ -3549,6 +3556,10 @@ begin
RaiseMsg(20180217143857,aClass);
if CanonicalClassOf.SourceLinenumber<>aClass.SourceLinenumber then
RaiseMsg(20180217143905,aClass);
+ Ref:=GetElementReference(CanonicalClassOf);
+ CreateAutoElReferenceId(Ref);
+ Obj.Add('ClassOf',Ref.Id);
+ ResolvePendingElRefs(Ref);
end
else if CanonicalClassOf<>nil then
RaiseMsg(20180329110817,aClass,GetObjName(CanonicalClassOf));
@@ -7213,10 +7224,11 @@ procedure TPCUReader.ReadClassScope(Obj: TJSONObject; Scope: TPas2JSClassScope;
var
aClass: TPasClassType;
CanonicalClassOf: TPasClassOfType;
+ CanonicalClassOfId: integer;
begin
aClass:=Scope.Element as TPasClassType;
- if aClass.ObjKind=okClass then
+ if aClass.ObjKind in ([okClass]+okAllHelpers) then
begin
CanonicalClassOf:=TPasClassOfType(CreateElement(TPasClassOfType,'Self',aClass));
Scope.CanonicalClassOf:=CanonicalClassOf;
@@ -7225,6 +7237,8 @@ begin
CanonicalClassOf.SourceLinenumber:=aClass.SourceLinenumber;
CanonicalClassOf.DestType:=aClass;
aClass.AddRef{$IFDEF CheckPasTreeRefCount}('TPasClassScope.CanonicalClassOf'){$ENDIF};
+ if ReadInteger(Obj,'ClassOf',CanonicalClassOfId,CanonicalClassOf) then
+ AddElReference(CanonicalClassOfId,CanonicalClassOf,CanonicalClassOf);
end;
ReadElementReference(Obj,Scope,'NewInstanceFunction',@Set_ClassScope_NewInstanceFunction);