pastojs: filer: GenericTemplateTypes

git-svn-id: trunk@42475 -
This commit is contained in:
Mattias Gaertner 2019-07-20 20:45:58 +00:00
parent 8206049dc1
commit 4d0e7cd1d4
2 changed files with 57 additions and 0 deletions

View File

@ -744,6 +744,7 @@ type
procedure WriteRecordValues(Obj: TJSONObject; Expr: TRecordValues; aContext: TPCUWriterContext); virtual;
procedure WriteArrayValues(Obj: TJSONObject; Expr: TArrayValues; aContext: TPCUWriterContext); virtual;
procedure WriteResString(Obj: TJSONObject; El: TPasResString; aContext: TPCUWriterContext); virtual;
procedure WriteGenericTemplateTypes(Obj: TJSONObject; Parent: TPasElement; GenericTemplateTypes: TFPList; aContext: TPCUWriterContext); virtual;
procedure WriteAliasType(Obj: TJSONObject; El: TPasAliasType; aContext: TPCUWriterContext); virtual;
procedure WritePointerType(Obj: TJSONObject; El: TPasPointerType; aContext: TPCUWriterContext); virtual;
procedure WriteSpecializeType(Obj: TJSONObject; El: TPasSpecializeType; aContext: TPCUWriterContext); virtual;
@ -947,6 +948,7 @@ type
procedure ReadRecordValues(Obj: TJSONObject; Expr: TRecordValues; aContext: TPCUReaderContext); virtual;
procedure ReadArrayValues(Obj: TJSONObject; Expr: TArrayValues; aContext: TPCUReaderContext); virtual;
procedure ReadResString(Obj: TJSONObject; El: TPasResString; aContext: TPCUReaderContext); virtual;
procedure ReadGenericTemplateTypes(Obj: TJSONObject; Parent: TPasElement; var GenericTemplateTypes: TFPList; aContext: TPCUReaderContext); virtual;
procedure ReadAliasType(Obj: TJSONObject; El: TPasAliasType; aContext: TPCUReaderContext); virtual;
procedure ReadPointerType(Obj: TJSONObject; El: TPasPointerType; aContext: TPCUReaderContext); virtual;
procedure ReadSpecializeType(Obj: TJSONObject; El: TPasSpecializeType; aContext: TPCUReaderContext); virtual;
@ -3276,6 +3278,28 @@ begin
WriteExpr(Obj,El,'Expr',El.Expr,aContext);
end;
procedure TPCUWriter.WriteGenericTemplateTypes(Obj: TJSONObject;
Parent: TPasElement; GenericTemplateTypes: TFPList;
aContext: TPCUWriterContext);
var
Arr: TJSONArray;
i: Integer;
Templ: TPasGenericTemplateType;
TemplObj: TJSONObject;
begin
if (GenericTemplateTypes=nil) or (GenericTemplateTypes.Count=0) then exit;
Arr:=TJSONArray.Create;
Obj.Add('GenericTemplateTypes',Arr);
for i:=0 to GenericTemplateTypes.Count-1 do
begin
Templ:=TPasGenericTemplateType(GenericTemplateTypes[i]);
TemplObj:=TJSONObject.Create;
Arr.Add(TemplObj);
TemplObj.Add('Name',Templ.Name);
WritePasExprArray(TemplObj,Parent,'Constraints',Templ.Constraints,aContext);
end;
end;
procedure TPCUWriter.WriteAliasType(Obj: TJSONObject; El: TPasAliasType;
aContext: TPCUWriterContext);
begin
@ -3317,6 +3341,7 @@ procedure TPCUWriter.WriteArrayType(Obj: TJSONObject; El: TPasArrayType;
aContext: TPCUWriterContext);
begin
WritePasElement(Obj,El,aContext);
WriteGenericTemplateTypes(Obj,El,El.GenericTemplateTypes,aContext);
WritePasExprArray(Obj,El,'Ranges',El.Ranges,aContext);
if El.PackMode<>pmNone then
Obj.Add('Packed',PCUPackModeNames[El.PackMode]);
@ -3380,6 +3405,7 @@ procedure TPCUWriter.WriteRecordType(Obj: TJSONObject; El: TPasRecordType;
aContext: TPCUWriterContext);
begin
WritePasElement(Obj,El,aContext);
WriteGenericTemplateTypes(Obj,El,El.GenericTemplateTypes,aContext);
if El.PackMode<>pmNone then
Obj.Add('Packed',PCUPackModeNames[El.PackMode]);
WriteElementList(Obj,El,'Members',El.Members,aContext);
@ -3532,6 +3558,7 @@ var
Scope: TPas2JSClassScope;
begin
WritePasElement(Obj,El,aContext);
WriteGenericTemplateTypes(Obj,El,El.GenericTemplateTypes,aContext);
if El.PackMode<>pmNone then
Obj.Add('Packed',PCUPackModeNames[El.PackMode]);
// ObjKind is the 'Type'
@ -6627,6 +6654,30 @@ begin
El.Expr:=ReadExpr(Obj,El,'Expr',aContext);
end;
procedure TPCUReader.ReadGenericTemplateTypes(Obj: TJSONObject;
Parent: TPasElement; var GenericTemplateTypes: TFPList;
aContext: TPCUReaderContext);
var
TemplArr: TJSONArray;
i: Integer;
TemplObj: TJSONObject;
GenTypeName: string;
GenType: TPasGenericTemplateType;
begin
if not ReadArray(Obj,'GenericTemplateTypes',TemplArr,Parent) then exit;
if GenericTemplateTypes=nil then
GenericTemplateTypes:=TFPList.Create;
for i:=0 to TemplArr.Count-1 do
begin
TemplObj:=CheckJSONObject(TemplArr[i],20190720224105);
if not ReadString(TemplObj,'Name',GenTypeName,Parent) or (GenTypeName='') then
RaiseMsg(20190720224130,Parent,IntToStr(i));
GenType:=TPasGenericTemplateType(CreateElement(TPasGenericTemplateType,GenTypeName,Parent));
GenericTemplateTypes.Add(GenType);
ReadPasExprArray(TemplObj,Parent,'Constraints',GenType.Constraints,aContext);
end;
end;
procedure TPCUReader.ReadAliasType(Obj: TJSONObject; El: TPasAliasType;
aContext: TPCUReaderContext);
begin
@ -6683,6 +6734,7 @@ procedure TPCUReader.ReadArrayType(Obj: TJSONObject; El: TPasArrayType;
aContext: TPCUReaderContext);
begin
ReadPasElement(Obj,El,aContext);
ReadGenericTemplateTypes(Obj,El,El.GenericTemplateTypes,aContext);
ReadPasExprArray(Obj,El,'Ranges',El.Ranges,aContext);
if El.PackMode<>pmNone then
Obj.Add('Packed',PCUPackModeNames[El.PackMode]);
@ -6778,6 +6830,7 @@ begin
El.CustomData:=Scope;
ReadPasElement(Obj,El,aContext);
ReadGenericTemplateTypes(Obj,El,El.GenericTemplateTypes,aContext);
El.PackMode:=ReadPackedMode(Obj,'Packed',El);
ReadElementList(Obj,El,'Members',El.Members,
{$IFDEF CheckPasTreeRefCount}'TPasRecordType.Members'{$ELSE}true{$ENDIF},
@ -7094,6 +7147,7 @@ begin
end;
ReadPasElement(Obj,El,aContext);
ReadGenericTemplateTypes(Obj,El,El.GenericTemplateTypes,aContext);
El.PackMode:=ReadPackedMode(Obj,'Packed',El);
// ObjKind is the 'Type'

View File

@ -1374,6 +1374,7 @@ procedure TCustomTestPrecompile.CheckRestoredArrayType(const Path: string;
Orig, Rest: TPasArrayType);
begin
CheckRestoredPasExprArray(Path+'.Ranges',Orig.Ranges,Rest.Ranges);
CheckRestoredElementList(Path+'.GenericTemplateTypes',Orig.GenericTemplateTypes,Rest.GenericTemplateTypes);
if Orig.PackMode<>Rest.PackMode then
Fail(Path+'.PackMode Orig='+PCUPackModeNames[Orig.PackMode]+' Rest='+PCUPackModeNames[Rest.PackMode]);
CheckRestoredElOrRef(Path+'.ElType',Orig,Orig.ElType,Rest,Rest.ElType);
@ -1414,6 +1415,7 @@ end;
procedure TCustomTestPrecompile.CheckRestoredRecordType(const Path: string;
Orig, Rest: TPasRecordType);
begin
CheckRestoredElementList(Path+'.GenericTemplateTypes',Orig.GenericTemplateTypes,Rest.GenericTemplateTypes);
if Orig.PackMode<>Rest.PackMode then
Fail(Path+'.PackMode Orig='+PCUPackModeNames[Orig.PackMode]+' Rest='+PCUPackModeNames[Rest.PackMode]);
CheckRestoredElementList(Path+'.Members',Orig.Members,Rest.Members);
@ -1425,6 +1427,7 @@ end;
procedure TCustomTestPrecompile.CheckRestoredClassType(const Path: string;
Orig, Rest: TPasClassType);
begin
CheckRestoredElementList(Path+'.GenericTemplateTypes',Orig.GenericTemplateTypes,Rest.GenericTemplateTypes);
if Orig.PackMode<>Rest.PackMode then
Fail(Path+'.PackMode Orig='+PCUPackModeNames[Orig.PackMode]+' Rest='+PCUPackModeNames[Rest.PackMode]);
if Orig.ObjKind<>Rest.ObjKind then