mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-16 23:59:23 +02:00
pastojs: filer: GenericTemplateTypes
git-svn-id: trunk@42475 -
This commit is contained in:
parent
8206049dc1
commit
4d0e7cd1d4
@ -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'
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user