mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 21:09:07 +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 WriteRecordValues(Obj: TJSONObject; Expr: TRecordValues; aContext: TPCUWriterContext); virtual;
|
||||||
procedure WriteArrayValues(Obj: TJSONObject; Expr: TArrayValues; aContext: TPCUWriterContext); virtual;
|
procedure WriteArrayValues(Obj: TJSONObject; Expr: TArrayValues; aContext: TPCUWriterContext); virtual;
|
||||||
procedure WriteResString(Obj: TJSONObject; El: TPasResString; 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 WriteAliasType(Obj: TJSONObject; El: TPasAliasType; aContext: TPCUWriterContext); virtual;
|
||||||
procedure WritePointerType(Obj: TJSONObject; El: TPasPointerType; aContext: TPCUWriterContext); virtual;
|
procedure WritePointerType(Obj: TJSONObject; El: TPasPointerType; aContext: TPCUWriterContext); virtual;
|
||||||
procedure WriteSpecializeType(Obj: TJSONObject; El: TPasSpecializeType; 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 ReadRecordValues(Obj: TJSONObject; Expr: TRecordValues; aContext: TPCUReaderContext); virtual;
|
||||||
procedure ReadArrayValues(Obj: TJSONObject; Expr: TArrayValues; aContext: TPCUReaderContext); virtual;
|
procedure ReadArrayValues(Obj: TJSONObject; Expr: TArrayValues; aContext: TPCUReaderContext); virtual;
|
||||||
procedure ReadResString(Obj: TJSONObject; El: TPasResString; 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 ReadAliasType(Obj: TJSONObject; El: TPasAliasType; aContext: TPCUReaderContext); virtual;
|
||||||
procedure ReadPointerType(Obj: TJSONObject; El: TPasPointerType; aContext: TPCUReaderContext); virtual;
|
procedure ReadPointerType(Obj: TJSONObject; El: TPasPointerType; aContext: TPCUReaderContext); virtual;
|
||||||
procedure ReadSpecializeType(Obj: TJSONObject; El: TPasSpecializeType; aContext: TPCUReaderContext); virtual;
|
procedure ReadSpecializeType(Obj: TJSONObject; El: TPasSpecializeType; aContext: TPCUReaderContext); virtual;
|
||||||
@ -3276,6 +3278,28 @@ begin
|
|||||||
WriteExpr(Obj,El,'Expr',El.Expr,aContext);
|
WriteExpr(Obj,El,'Expr',El.Expr,aContext);
|
||||||
end;
|
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;
|
procedure TPCUWriter.WriteAliasType(Obj: TJSONObject; El: TPasAliasType;
|
||||||
aContext: TPCUWriterContext);
|
aContext: TPCUWriterContext);
|
||||||
begin
|
begin
|
||||||
@ -3317,6 +3341,7 @@ procedure TPCUWriter.WriteArrayType(Obj: TJSONObject; El: TPasArrayType;
|
|||||||
aContext: TPCUWriterContext);
|
aContext: TPCUWriterContext);
|
||||||
begin
|
begin
|
||||||
WritePasElement(Obj,El,aContext);
|
WritePasElement(Obj,El,aContext);
|
||||||
|
WriteGenericTemplateTypes(Obj,El,El.GenericTemplateTypes,aContext);
|
||||||
WritePasExprArray(Obj,El,'Ranges',El.Ranges,aContext);
|
WritePasExprArray(Obj,El,'Ranges',El.Ranges,aContext);
|
||||||
if El.PackMode<>pmNone then
|
if El.PackMode<>pmNone then
|
||||||
Obj.Add('Packed',PCUPackModeNames[El.PackMode]);
|
Obj.Add('Packed',PCUPackModeNames[El.PackMode]);
|
||||||
@ -3380,6 +3405,7 @@ procedure TPCUWriter.WriteRecordType(Obj: TJSONObject; El: TPasRecordType;
|
|||||||
aContext: TPCUWriterContext);
|
aContext: TPCUWriterContext);
|
||||||
begin
|
begin
|
||||||
WritePasElement(Obj,El,aContext);
|
WritePasElement(Obj,El,aContext);
|
||||||
|
WriteGenericTemplateTypes(Obj,El,El.GenericTemplateTypes,aContext);
|
||||||
if El.PackMode<>pmNone then
|
if El.PackMode<>pmNone then
|
||||||
Obj.Add('Packed',PCUPackModeNames[El.PackMode]);
|
Obj.Add('Packed',PCUPackModeNames[El.PackMode]);
|
||||||
WriteElementList(Obj,El,'Members',El.Members,aContext);
|
WriteElementList(Obj,El,'Members',El.Members,aContext);
|
||||||
@ -3532,6 +3558,7 @@ var
|
|||||||
Scope: TPas2JSClassScope;
|
Scope: TPas2JSClassScope;
|
||||||
begin
|
begin
|
||||||
WritePasElement(Obj,El,aContext);
|
WritePasElement(Obj,El,aContext);
|
||||||
|
WriteGenericTemplateTypes(Obj,El,El.GenericTemplateTypes,aContext);
|
||||||
if El.PackMode<>pmNone then
|
if El.PackMode<>pmNone then
|
||||||
Obj.Add('Packed',PCUPackModeNames[El.PackMode]);
|
Obj.Add('Packed',PCUPackModeNames[El.PackMode]);
|
||||||
// ObjKind is the 'Type'
|
// ObjKind is the 'Type'
|
||||||
@ -6627,6 +6654,30 @@ begin
|
|||||||
El.Expr:=ReadExpr(Obj,El,'Expr',aContext);
|
El.Expr:=ReadExpr(Obj,El,'Expr',aContext);
|
||||||
end;
|
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;
|
procedure TPCUReader.ReadAliasType(Obj: TJSONObject; El: TPasAliasType;
|
||||||
aContext: TPCUReaderContext);
|
aContext: TPCUReaderContext);
|
||||||
begin
|
begin
|
||||||
@ -6683,6 +6734,7 @@ procedure TPCUReader.ReadArrayType(Obj: TJSONObject; El: TPasArrayType;
|
|||||||
aContext: TPCUReaderContext);
|
aContext: TPCUReaderContext);
|
||||||
begin
|
begin
|
||||||
ReadPasElement(Obj,El,aContext);
|
ReadPasElement(Obj,El,aContext);
|
||||||
|
ReadGenericTemplateTypes(Obj,El,El.GenericTemplateTypes,aContext);
|
||||||
ReadPasExprArray(Obj,El,'Ranges',El.Ranges,aContext);
|
ReadPasExprArray(Obj,El,'Ranges',El.Ranges,aContext);
|
||||||
if El.PackMode<>pmNone then
|
if El.PackMode<>pmNone then
|
||||||
Obj.Add('Packed',PCUPackModeNames[El.PackMode]);
|
Obj.Add('Packed',PCUPackModeNames[El.PackMode]);
|
||||||
@ -6778,6 +6830,7 @@ begin
|
|||||||
El.CustomData:=Scope;
|
El.CustomData:=Scope;
|
||||||
|
|
||||||
ReadPasElement(Obj,El,aContext);
|
ReadPasElement(Obj,El,aContext);
|
||||||
|
ReadGenericTemplateTypes(Obj,El,El.GenericTemplateTypes,aContext);
|
||||||
El.PackMode:=ReadPackedMode(Obj,'Packed',El);
|
El.PackMode:=ReadPackedMode(Obj,'Packed',El);
|
||||||
ReadElementList(Obj,El,'Members',El.Members,
|
ReadElementList(Obj,El,'Members',El.Members,
|
||||||
{$IFDEF CheckPasTreeRefCount}'TPasRecordType.Members'{$ELSE}true{$ENDIF},
|
{$IFDEF CheckPasTreeRefCount}'TPasRecordType.Members'{$ELSE}true{$ENDIF},
|
||||||
@ -7094,6 +7147,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
ReadPasElement(Obj,El,aContext);
|
ReadPasElement(Obj,El,aContext);
|
||||||
|
ReadGenericTemplateTypes(Obj,El,El.GenericTemplateTypes,aContext);
|
||||||
El.PackMode:=ReadPackedMode(Obj,'Packed',El);
|
El.PackMode:=ReadPackedMode(Obj,'Packed',El);
|
||||||
// ObjKind is the 'Type'
|
// ObjKind is the 'Type'
|
||||||
|
|
||||||
|
@ -1374,6 +1374,7 @@ procedure TCustomTestPrecompile.CheckRestoredArrayType(const Path: string;
|
|||||||
Orig, Rest: TPasArrayType);
|
Orig, Rest: TPasArrayType);
|
||||||
begin
|
begin
|
||||||
CheckRestoredPasExprArray(Path+'.Ranges',Orig.Ranges,Rest.Ranges);
|
CheckRestoredPasExprArray(Path+'.Ranges',Orig.Ranges,Rest.Ranges);
|
||||||
|
CheckRestoredElementList(Path+'.GenericTemplateTypes',Orig.GenericTemplateTypes,Rest.GenericTemplateTypes);
|
||||||
if Orig.PackMode<>Rest.PackMode then
|
if Orig.PackMode<>Rest.PackMode then
|
||||||
Fail(Path+'.PackMode Orig='+PCUPackModeNames[Orig.PackMode]+' Rest='+PCUPackModeNames[Rest.PackMode]);
|
Fail(Path+'.PackMode Orig='+PCUPackModeNames[Orig.PackMode]+' Rest='+PCUPackModeNames[Rest.PackMode]);
|
||||||
CheckRestoredElOrRef(Path+'.ElType',Orig,Orig.ElType,Rest,Rest.ElType);
|
CheckRestoredElOrRef(Path+'.ElType',Orig,Orig.ElType,Rest,Rest.ElType);
|
||||||
@ -1414,6 +1415,7 @@ end;
|
|||||||
procedure TCustomTestPrecompile.CheckRestoredRecordType(const Path: string;
|
procedure TCustomTestPrecompile.CheckRestoredRecordType(const Path: string;
|
||||||
Orig, Rest: TPasRecordType);
|
Orig, Rest: TPasRecordType);
|
||||||
begin
|
begin
|
||||||
|
CheckRestoredElementList(Path+'.GenericTemplateTypes',Orig.GenericTemplateTypes,Rest.GenericTemplateTypes);
|
||||||
if Orig.PackMode<>Rest.PackMode then
|
if Orig.PackMode<>Rest.PackMode then
|
||||||
Fail(Path+'.PackMode Orig='+PCUPackModeNames[Orig.PackMode]+' Rest='+PCUPackModeNames[Rest.PackMode]);
|
Fail(Path+'.PackMode Orig='+PCUPackModeNames[Orig.PackMode]+' Rest='+PCUPackModeNames[Rest.PackMode]);
|
||||||
CheckRestoredElementList(Path+'.Members',Orig.Members,Rest.Members);
|
CheckRestoredElementList(Path+'.Members',Orig.Members,Rest.Members);
|
||||||
@ -1425,6 +1427,7 @@ end;
|
|||||||
procedure TCustomTestPrecompile.CheckRestoredClassType(const Path: string;
|
procedure TCustomTestPrecompile.CheckRestoredClassType(const Path: string;
|
||||||
Orig, Rest: TPasClassType);
|
Orig, Rest: TPasClassType);
|
||||||
begin
|
begin
|
||||||
|
CheckRestoredElementList(Path+'.GenericTemplateTypes',Orig.GenericTemplateTypes,Rest.GenericTemplateTypes);
|
||||||
if Orig.PackMode<>Rest.PackMode then
|
if Orig.PackMode<>Rest.PackMode then
|
||||||
Fail(Path+'.PackMode Orig='+PCUPackModeNames[Orig.PackMode]+' Rest='+PCUPackModeNames[Rest.PackMode]);
|
Fail(Path+'.PackMode Orig='+PCUPackModeNames[Orig.PackMode]+' Rest='+PCUPackModeNames[Rest.PackMode]);
|
||||||
if Orig.ObjKind<>Rest.ObjKind then
|
if Orig.ObjKind<>Rest.ObjKind then
|
||||||
|
Loading…
Reference in New Issue
Block a user