Codetools: Match generic params with the correct specialize. In case of specialize inside of a generic params were mismatched.

This commit is contained in:
Martin 2023-03-06 00:29:08 +01:00
parent 63039e34f5
commit ddc435d313
2 changed files with 155 additions and 120 deletions

View File

@ -554,8 +554,14 @@ type
{ TGenericParams }
TGenericParams = record
// values given in "specialize" statement
ParamValuesTool: TFindDeclarationTool;
SpecializeParamsNode: TCodeTreeNode;
// "generic" definition to which those values can be applied
GenericTool: TFindDeclarationTool;
GenericNode: TCodeTreeNode;
// *chain* of earlier params, in case of nested generic
// there will always be 0 or 1 entry. This acts like a pointer, only with automatic FreeMem
OuterGenParam: array of TGenericParams;
end;
@ -607,7 +613,8 @@ type
ParamCompatibilityList: TTypeCompatibilityList);
private
procedure SetGenericParamValues(SpecializeParamsTool: TFindDeclarationTool;
SpecializeNode: TCodeTreeNode);
SpecializeNode: TCodeTreeNode;
GenericTool: TFindDeclarationTool; GenericNode: TCodeTreeNode);
function FindGenericParamType: Boolean;
procedure AddOperandPart(aPart: string);
property ExtractedOperand: string read FExtractedOperand;
@ -5620,7 +5627,6 @@ begin
NameNode:=SpecializeNode.FirstChild;
Result.Node:=NameNode;
if Result.Node=nil then break;
Params.SetGenericParamValues(Self, SpecializeNode);
SearchIdentifier(SpecializeNode,NameNode.StartPos,IsPredefined,Result);
if (Result.Node=nil) or (Result.Node.Desc<>ctnGenericType) then begin
// not a generic
@ -5629,6 +5635,7 @@ begin
RaiseExceptionFmt(20170421200156,ctsStrExpectedButAtomFound,
[ctsGenericIdentifier,GetAtom]);
end;
Params.SetGenericParamValues(Self, SpecializeNode, Result.Tool, Result.Node);
end else
break;
end;
@ -7667,8 +7674,10 @@ begin
Params:=TFindDeclarationParams.Create;
Params.GenParams := ResultParams.GenParams;
if IdentifierNode.Desc=ctnSpecialize then begin
SpecializeNode:=IdentifierNode;
Params.SetGenericParamValues(Self, SpecializeNode);
if AncestorContext.Node.Desc <> ctnGenericType then
RaiseExpected('generic type');
SpecializeNode:=IdentifierNode;
Params.SetGenericParamValues(Self, SpecializeNode, AncestorContext.Tool, AncestorContext.Node);
end;
try
Params.Flags:=fdfDefaultForExpressions+[fdfFindChildren];
@ -14038,8 +14047,8 @@ begin
end;
procedure TFindDeclarationParams.SetGenericParamValues(
SpecializeParamsTool: TFindDeclarationTool;
SpecializeNode: TCodeTreeNode);
SpecializeParamsTool: TFindDeclarationTool; SpecializeNode: TCodeTreeNode;
GenericTool: TFindDeclarationTool; GenericNode: TCodeTreeNode);
var
GenP: TGenericParams;
begin
@ -14054,6 +14063,8 @@ begin
GenParams.ParamValuesTool := SpecializeParamsTool;
GenParams.SpecializeParamsNode := SpecializeNode.FirstChild.NextBrother;
GenParams.GenericTool := GenericTool;
GenParams.GenericNode := GenericNode;
end;
function TFindDeclarationParams.FindGenericParamType: Boolean;
@ -14080,12 +14091,37 @@ begin
Result := SearchInGenericRestrictions;
exit;
end;
// n := Find the index of the param in the generic list
n:=0;
GenParamType:=NewNode;
while GenParamType<>nil do begin
GenParamType:=GenParamType.PriorBrother;
inc(n);
end;
OldGenParam := GenParams;
while (GenParams.ParamValuesTool <> nil) and
( (NewNode.StartPos < GenParams.GenericNode.StartPos) or
(NewNode.EndPos > GenParams.GenericNode.EndPos) or
(NewCodeTool <> GenParams.GenericTool)
)
do begin
if Length(GenParams.OuterGenParam) > 0 then
GenParams := GenParams.OuterGenParam[0]
else begin
GenParams.ParamValuesTool:=nil;
GenParams.SpecializeParamsNode:=nil;
end;
end;
if (GenParams.ParamValuesTool = nil) then begin
GenParams := OldGenParam;
Result := SearchInGenericRestrictions;
exit;
end;
with GenParams.ParamValuesTool do begin
MoveCursorToNodeStart(GenParams.SpecializeParamsNode);
ReadNextAtom;
@ -14108,7 +14144,6 @@ begin
Identifier:=@Src[CurPos.StartPos];
IdentifierTool:=GenParams.ParamValuesTool;
ContextNode:=GenParams.SpecializeParamsNode;
OldGenParam := GenParams;
if Length(GenParams.OuterGenParam) > 0 then
GenParams := GenParams.OuterGenParam[0]
else begin

View File

@ -47,12 +47,12 @@ type
procedure Foo;
end;
TFld1 = class(specialize GEN_Field<TRec1>)
fx: _REC { TODO,WRONG: declaration:GEN_1._REC};
fx: _REC {declaration:GEN_1._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
TFld2 = class(specialize GEN_Field<TRec2>) // Global TRec2
fx: _REC { TODO,WRONG: declaration:GEN_1._REC};
fx: _REC {declaration:GEN_1._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
@ -70,18 +70,18 @@ type
generic GENB_1<_B1: TObject; _REC> = class(_B1)
public type
TFldB0 = class(specialize GEN_Field<_REC>)
fx: _REC { TODO: declaration:GENB_1._REC};
fy: T_F1 { TODO: declaration:GEN_Field.T_F1};
fx: _REC {declaration:GENB_1._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
TFldB1 = class(specialize GEN_Field<TRec1>) // Global (can be specialized to TClass2.TRec1)
fx: _REC { TODO: declaration:GENB_1._REC};
fy: T_F1 { TODO: declaration:GEN_Field.T_F1};
fx: _REC {declaration:GENB_1._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
TFldB2 = class(specialize GEN_Field<TRec2>) // Global TRec2 (can be specialized to TClass1.TRec2)
fx: _REC { TODO: declaration:GENB_1._REC};
fy: T_F1 { TODO: declaration:GEN_Field.T_F1};
fx: _REC {declaration:GENB_1._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
//TFldB3 = class(specialize GEN_Field<TRec3>) // not yet known
@ -99,23 +99,23 @@ type
generic GENB_2<_B2: TClass1; _REC> = class(_B2)
public type
TFldB0 = class(specialize GEN_Field<_REC>)
fx: _REC { TODO: declaration:GENB_2._REC};
fy: T_F1 { TODO: declaration:GEN_Field.T_F1};
fx: _REC {declaration:GENB_2._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
TFldB1 = class(specialize GEN_Field<TRec1>) // Global (can be specialized to TClass2.TRec1)
fx: _REC { TODO: declaration:GENB_2._REC};
fy: T_F1 { TODO: declaration:GEN_Field.T_F1};
fx: _REC {declaration:GENB_2._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
TFldB2 = class(specialize GEN_Field<TRec2>) // TClass1.TRec2
fx: _REC { TODO: declaration:GENB_2._REC};
fy: T_F1 { TODO: declaration:GEN_Field.T_F1};
fx: _REC {declaration:GENB_2._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
TFldB3 = class(specialize GEN_Field<TRec3>) // TClass1.TRec3
fx: _REC { TODO: declaration:GENB_2._REC};
fy: T_F1 { TODO: declaration:GEN_Field.T_F1};
fx: _REC {declaration:GENB_2._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
public class var
@ -132,18 +132,18 @@ type
generic GENI_1<_IB1: TObject; _REC> = class(specialize GENB_1<_IB1, _REC>)
public type
TFldI0 = class(specialize GEN_Field<_REC>)
fx: _REC { TODO: declaration:GENI_1._REC};
fy: T_F1 { TODO: declaration:GEN_Field.T_F1};
fx: _REC {declaration:GENI_1._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
TFldI1 = class(specialize GEN_Field<TRec1>) // Global (can be specialized to TClass2.TRec1)
fx: _REC { TODO: declaration:GENI_1._REC};
fy: T_F1 { TODO: declaration:GEN_Field.T_F1};
fx: _REC {declaration:GENI_1._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
TFldI2 = class(specialize GEN_Field<TRec2>) // Global TRec2
fx: _REC { TODO: declaration:GENI_1._REC};
fy: T_F1 { TODO: declaration:GEN_Field.T_F1};
fx: _REC {declaration:GENI_1._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
//TFldX3 = class(specialize GEN_Field<TRec3>) // not yet known
@ -161,23 +161,23 @@ type
generic GENI_2B1<_IB2: TClass1; _REC> = class(specialize GENB_1<_IB2, _REC>)
public type
TFldI0 = class(specialize GEN_Field<_REC>)
fx: _REC { TODO: declaration:GENI_2B1._REC};
fy: T_F1 { TODO: declaration:GEN_Field.T_F1};
fx: _REC {declaration:GENI_2B1._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
TFldI1 = class(specialize GEN_Field<TRec1>) // Global (can be specialized to TClass2.TRec1)
fx: _REC { TODO: declaration:GENI_2B1._REC};
fy: T_F1 { TODO: declaration:GEN_Field.T_F1};
fx: _REC {declaration:GENI_2B1._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
TFldI2 = class(specialize GEN_Field<TRec2>) // TClass1.TRec2
fx: _REC { TODO: declaration:GENI_2B1._REC};
fy: T_F1 { TODO: declaration:GEN_Field.T_F1};
fx: _REC {declaration:GENI_2B1._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
TFldI3 = class(specialize GEN_Field<TRec3>) // TClass1.TRec3
fx: _REC { TODO: declaration:GENI_2B1._REC};
fy: T_F1 { TODO: declaration:GEN_Field.T_F1};
fx: _REC {declaration:GENI_2B1._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
public class var
@ -192,23 +192,23 @@ type
generic GENI_2<_IB2: TClass1; _REC> = class(specialize GENB_2<_IB2, _REC>)
public type
TFldI0 = class(specialize GEN_Field<_REC>)
fx: _REC { TODO: declaration:GENI_2._REC};
fy: T_F1 { TODO: declaration:GEN_Field.T_F1};
fx: _REC {declaration:GENI_2._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
TFldI1 = class(specialize GEN_Field<TRec1>) // Global (can be specialized to TClass2.TRec1)
fx: _REC { TODO: declaration:GENI_2._REC};
fy: T_F1 { TODO: declaration:GEN_Field.T_F1};
fx: _REC {declaration:GENI_2._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
TFldI2 = class(specialize GEN_Field<TRec2>) // TClass1.TRec2
fx: _REC { TODO: declaration:GENI_2._REC};
fy: T_F1 { TODO: declaration:GEN_Field.T_F1};
fx: _REC {declaration:GENI_2._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
TFldI3 = class(specialize GEN_Field<TRec3>) // TClass1.TRec3
fx: _REC { TODO: declaration:GENI_2._REC};
fy: T_F1 { TODO: declaration:GEN_Field.T_F1};
fx: _REC {declaration:GENI_2._REC};
fy: T_F1 {declaration:GEN_Field.T_F1};
procedure Foo;
end;
public class var
@ -406,14 +406,14 @@ end;
procedure GENB_1.TFldB0.Foo;
var
a: _REC { TODO declaration:GENB_1._REC};
a0: TFldB0 { TODO declaration:GENB_1.TFldB0};
a1: TFldB1 { TODO declaration:GENB_1.TFldB1};
a2: TFldB2 { TODO declaration:GENB_1.TFldB2};
a0: TFldB0 {declaration:GENB_1.TFldB0};
a1: TFldB1 {declaration:GENB_1.TFldB1};
a2: TFldB2 {declaration:GENB_1.TFldB2};
begin
fv{ TODO declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENB_1._REC} );
fv{declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENB_1._REC} );
fy{ TODO declaration:GENB_1.TFldB0.fy} := default(_REC { TODO: declaration:GENB_1._REC} );
FField1{ TODO declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENB_1._REC} );
fy{declaration:GENB_1.TFldB0.fy} := default(_REC { TODO: declaration:GENB_1._REC} );
FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENB_1._REC} );
a0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENB_1._REC} );
a1.FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
@ -425,9 +425,9 @@ end;
procedure GENB_1.TFldB1.Foo;
var
a: _REC { TODO,WRONG: declaration:GENB_1._REC}; // TODO: the test finds it and yet we can not jump there
a0: TFldB0 { TODO declaration:GENB_1.TFldB0};
a1: TFldB1 { TODO declaration:GENB_1.TFldB1};
a2: TFldB2 { TODO declaration:GENB_1.TFldB2};
a0: TFldB0 {declaration:GENB_1.TFldB0};
a1: TFldB1 {declaration:GENB_1.TFldB1};
a2: TFldB2 {declaration:GENB_1.TFldB2};
begin
fv{declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENB_1._REC} );
@ -444,9 +444,9 @@ end;
procedure GENB_1.TFldB2.Foo;
var
a: _REC { TODO,WRONG declaration:GENB_1._REC}; // TODO: the test finds something and yet we can not jump there
a0: TFldB0 { TODO declaration:GENB_1.TFldB0};
a1: TFldB1 { TODO declaration:GENB_1.TFldB1};
a2: TFldB2 { TODO declaration:GENB_1.TFldB2};
a0: TFldB0 {declaration:GENB_1.TFldB0};
a1: TFldB1 {declaration:GENB_1.TFldB1};
a2: TFldB2 {declaration:GENB_1.TFldB2};
begin
fv{declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENB_1._REC} );
@ -480,14 +480,14 @@ end;
procedure GENB_2.TFldB0.Foo;
var
a: _REC { TODO declaration:GENB_2._REC};
a0: TFldB0 { TODO declaration:GENB_2.TFldB0};
a1: TFldB1 { TODO declaration:GENB_2.TFldB1};
a2: TFldB2 { TODO declaration:GENB_2.TFldB2};
a0: TFldB0 {declaration:GENB_2.TFldB0};
a1: TFldB1 {declaration:GENB_2.TFldB1};
a2: TFldB2 {declaration:GENB_2.TFldB2};
begin
fv{ TODO declaration:GENB_2.fv} := default(_REC { TODO: declaration:GENB_2._REC} );
fv{declaration:GENB_2.fv} := default(_REC { TODO: declaration:GENB_2._REC} );
fy{ TODO declaration:GENB_2.TFldB0.fy} := default(_REC { TODO: declaration:GENB_1._REC} );
FField1{ TODO declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENB_2._REC} );
fy{declaration:GENB_2.TFldB0.fy} := default(_REC { TODO: declaration:GENB_1._REC} );
FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENB_2._REC} );
a0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENB_2._REC} );
a1.FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
@ -573,18 +573,18 @@ end;
procedure GENI_1.TFldI0.Foo;
var
a: _REC { TODO declaration:GENI_1._REC};
b0: TFldI0 { TODO declaration:GENI_1.TFldI0};
b1: TFldI1 { TODO declaration:GENI_1.TFldI1};
b2: TFldI2 { TODO declaration:GENI_1.TFldI2};
a0: TFldB0 { TODO declaration:GENB_1.TFldB0};
a1: TFldB1 { TODO declaration:GENB_1.TFldB1};
a2: TFldB2 { TODO declaration:GENB_1.TFldB2};
b0: TFldI0 {declaration:GENI_1.TFldI0};
b1: TFldI1 {declaration:GENI_1.TFldI1};
b2: TFldI2 {declaration:GENI_1.TFldI2};
a0: TFldB0 {declaration:GENB_1.TFldB0};
a1: TFldB1 {declaration:GENB_1.TFldB1};
a2: TFldB2 {declaration:GENB_1.TFldB2};
begin
fv{ TODO declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENI_1._REC} );
fIv{ TODO declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENI_1._REC} );
fv{declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENI_1._REC} );
fIv{declaration:GENI_1.fIv} := default(_REC { TODO: declaration:GENI_1._REC} );
fy{ TODO declaration:GENB_1.TFldB0.fy} := default(_REC { TODO: declaration:GENI_1._REC} );
FField1{ TODO declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_1._REC} );
fy{declaration:GENI_1.TFldI0.fy} := default(_REC { TODO: declaration:GENI_1._REC} );
FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_1._REC} );
b0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_1._REC} );
b1.FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
@ -607,9 +607,9 @@ var
a2: TFldB2 {declaration:GENB_1.TFldB2};
begin
fv{declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENI_1._REC} );
fIv{ TODO: declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENI_1._REC} );
fIv{declaration:GENI_1.fIv} := default(_REC { TODO: declaration:GENI_1._REC} );
fy{ TODO: declaration:GENB_1.TFldB1.fy}.r1a{ TODO: declaration:TRec1.r1a} := 1;
fy{declaration:GENI_1.TFldI1.fy}.r1a{ TODO: declaration:TRec1.r1a} := 1;
FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
b0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_1._REC} );
@ -633,9 +633,9 @@ var
a2: TFldB2 {declaration:GENB_1.TFldB2};
begin
fv{declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENI_1._REC} );
fIv{ TODO: declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENI_1._REC} );
fIv{declaration:GENI_1.fIv} := default(_REC { TODO: declaration:GENI_1._REC} );
fy{ TODO declaration:GENB_1.TFldB2.fy}.r2a{ TODO: declaration:TRec2.r2a} := 1;
fy{declaration:GENI_1.TFldI2.fy}.r2a{ TODO: declaration:TRec2.r2a} := 1;
FField1{declaration:GEN_Field.FField1}.r2a{declaration:TRec2.r2a} := 1;
b0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_1._REC} );
@ -659,9 +659,9 @@ var
a2: TFldB2 {declaration:GENB_1.TFldB2};
begin
fv{declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENI_1._REC} );
fIv{ TODO declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENI_1._REC} );
fIv{declaration:GENI_1.fIv} := default(_REC { TODO: declaration:GENI_1._REC} );
fx{declaration:GENB_1.fx} := default(_REC { TODO: declaration:GENI_1._REC} );
fIx{ TODO declaration:GENB_1.fx} := default(_REC { TODO: declaration:GENI_1._REC} );
fIx{declaration:GENI_1.fIx} := default(_REC { TODO: declaration:GENI_1._REC} );
b0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_1._REC} );
b1.FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
@ -676,17 +676,17 @@ end;
procedure GENI_2B1.TFldI0.Foo;
var
a: _REC { TODO declaration:GENI_2B1._REC};
b0: TFldI0 { TODO declaration:GENI_2B1.TFldI0};
b1: TFldI1 { TODO declaration:GENI_2B1.TFldI1};
b2: TFldI2 { TODO declaration:GENI_2B1.TFldI2};
a0: TFldB0 { TODO declaration:GENB_2.TFldB0};
a1: TFldB1 { TODO declaration:GENB_2.TFldB1};
a2: TFldB2 { TODO declaration:GENB_2.TFldB2};
b0: TFldI0 {declaration:GENI_2B1.TFldI0};
b1: TFldI1 {declaration:GENI_2B1.TFldI1};
b2: TFldI2 {declaration:GENI_2B1.TFldI2};
a0: TFldB0 {declaration:GENB_1.TFldB0};
a1: TFldB1 {declaration:GENB_1.TFldB1};
a2: TFldB2 {declaration:GENB_1.TFldB2};
begin
fv{ TODO declaration:GENB_2.fv} := default(_REC { TODO: declaration:GENI_2B1._REC} );
fv{declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENI_2B1._REC} );
fy{ TODO declaration:GENB_2.TFldB0.fy} := default(_REC { TODO: declaration:GENI_2B1._REC} );
FField1{ TODO declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_2B1._REC} );
fy{declaration:GENI_2B1.TFldI0.fy} := default(_REC { TODO: declaration:GENI_2B1._REC} );
FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_2B1._REC} );
b0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_2B1._REC} );
b1.FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
@ -709,9 +709,9 @@ var
a2: TFldB2 {declaration:GENB_1.TFldB2};
begin
fv{declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENI_2B1._REC} );
fIv{ TODO declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENI_2B1._REC} );
fIv{declaration:GENI_2B1.fIv} := default(_REC { TODO: declaration:GENI_2B1._REC} );
fy{ TODO declaration:GENB_1.TFldB1.fy}.r1a{ TODO: declaration:TRec1.r1a} := 1;
fy{declaration:GENI_2B1.TFldI1.fy}.r1a{ TODO: declaration:TRec1.r1a} := 1;
FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
b0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_2B1._REC} );
@ -736,7 +736,7 @@ var
begin
fv{declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENI_2B1._REC} );
fy{ TODO declaration:GENB_1.TFldB2.fy}.r2a{ TODO: declaration:TClass1.TRec2.r2a} := 1;
fy{declaration:GENI_2B1.TFldI2.fy}.r2a{ TODO: declaration:TClass1.TRec2.r2a} := 1;
FField1{declaration:GEN_Field.FField1}.r2a{ TODO declaration:TClass1.TRec2.r2a} := 1;
b0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_2B1._REC} );
@ -761,7 +761,7 @@ var
begin
fv{declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENI_2B1._REC} );
fy{ TODO declaration:GENB_1.TFldB3.fy}.r3a{ TODO: declaration:TClass1.TRec3.r3a} := 1;
fy{declaration:GENI_2B1.TFldI3.fy}.r3a{ TODO: declaration:TClass1.TRec3.r3a} := 1;
FField1{declaration:GEN_Field.FField1}.r3a{declaration:TClass1.TRec3.r3a} := 1;
b0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_2B1._REC} );
@ -785,9 +785,9 @@ var
a2: TFldB2 {declaration:GENB_1.TFldB2};
begin
fv{declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENI_2B1._REC} );
fIv{ TODO: declaration:GENB_1.fv} := default(_REC { TODO: declaration:GENI_2B1._REC} );
fIv{declaration:GENI_2B1.fIv} := default(_REC { TODO: declaration:GENI_2B1._REC} );
fx{declaration:GENB_1.fx} := default(_REC { TODO: declaration:GENI_2B1._REC} );
fIx{ TODO: declaration:GENB_1.fx} := default(_REC { TODO: declaration:GENI_2B1._REC} );
fIx{declaration:GENI_2B1.fIx} := default(_REC { TODO: declaration:GENI_2B1._REC} );
b0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_2B1._REC} );
b1.FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
@ -802,25 +802,25 @@ end;
procedure GENI_2.TFldI0.Foo;
var
a: _REC { TODO declaration:GENI_2._REC};
b0: TFldI0 { TODO declaration:GENI_2.TFldI0};
b1: TFldI1 { TODO declaration:GENI_2.TFldI1};
b2: TFldI2 { TODO declaration:GENI_2.TFldI2};
a0: TFldB0 { TODO declaration:GENB_2.TFldB0};
a1: TFldB1 { TODO declaration:GENB_2.TFldB1};
a2: TFldB2 { TODO declaration:GENB_2.TFldB2};
b0: TFldI0 {declaration:GENI_2.TFldI0};
b1: TFldI1 {declaration:GENI_2.TFldI1};
b2: TFldI2 {declaration:GENI_2.TFldI2};
a0: TFldB0 {declaration:GENB_2.TFldB0};
a1: TFldB1 {declaration:GENB_2.TFldB1};
a2: TFldB2 {declaration:GENB_2.TFldB2};
begin
fv{ TODO declaration:GENB_2.fv} := default(_REC { TODO: declaration:GENI_2._REC} );
fIv{ TODO declaration:GENB_2.fv} := default(_REC { TODO: declaration:GENI_2._REC} );
fv{declaration:GENB_2.fv} := default(_REC { TODO: declaration:GENI_2._REC} );
fIv{declaration:GENI_2.fIv} := default(_REC { TODO: declaration:GENI_2._REC} );
fy{ TODO declaration:GENB_2.TFldB0.fy} := default(_REC { TODO: declaration:GENI_2._REC} );
fy{declaration:GENI_2.TFldI0.fy} := default(_REC { TODO: declaration:GENI_2._REC} );
FField1{ TODO declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_2._REC} );
b0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_2._REC} );
b1.FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
b2.FField1{declaration:GEN_Field.FField1}.r2a{ TODO declaration:TClass1.TRec2.r2a} := 1;
b2.FField1{declaration:GEN_Field.FField1}.r2a{declaration:TClass1.TRec2.r2a} := 1;
a0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_2._REC} );
a1.FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
a2.FField1{declaration:GEN_Field.FField1}.r2a{ TODO declaration:TClass1.TRec2.r2a} := 1;
a2.FField1{declaration:GEN_Field.FField1}.r2a{declaration:TClass1.TRec2.r2a} := 1;
end;
{ GENI_2.TFldI1 }
@ -836,17 +836,17 @@ var
a2: TFldB2 {declaration:GENB_2.TFldB2};
begin
fv{declaration:GENB_2.fv} := default(_REC { TODO: declaration:GENI_2._REC} );
fIv{ TODO declaration:GENB_2.fv} := default(_REC { TODO: declaration:GENI_2._REC} );
fIv{declaration:GENI_2.fIv} := default(_REC { TODO: declaration:GENI_2._REC} );
fy{ TODO declaration:GENB_2.TFldB1.fy}.r1a{ TODO: declaration:TRec1.r1a} := 1;
fy{declaration:GENI_2.TFldI1.fy}.r1a{ TODO: declaration:TRec1.r1a} := 1;
FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
b0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_2._REC} );
b1.FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
b2.FField1{declaration:GEN_Field.FField1}.r2a{ TODO declaration:TClass1.TRec2.r2a} := 1;
b2.FField1{declaration:GEN_Field.FField1}.r2a{declaration:TClass1.TRec2.r2a} := 1;
a0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_2._REC} );
a1.FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
a2.FField1{declaration:GEN_Field.FField1}.r2a{ TODO declaration:TClass1.TRec2.r2a} := 1;
a2.FField1{declaration:GEN_Field.FField1}.r2a{declaration:TClass1.TRec2.r2a} := 1;
end;
{ GENI_2.TFldI2 }
@ -862,17 +862,17 @@ var
a2: TFldB2 {declaration:GENB_2.TFldB2};
begin
fv{declaration:GENB_2.fv} := default(_REC { TODO: declaration:GENI_2._REC} );
fIv{ TODO declaration:GENB_2.fv} := default(_REC { TODO: declaration:GENI_2._REC} );
fIv{declaration:GENI_2.fIv} := default(_REC { TODO: declaration:GENI_2._REC} );
fy{ TODO declaration:GENB_2.TFldB2.fy}.r2a{ TODO: declaration:TClass1.TRec2.r2a} := 1;
fy{declaration:GENI_2.TFldI2.fy}.r2a{ TODO: declaration:TClass1.TRec2.r2a} := 1;
FField1{declaration:GEN_Field.FField1}.r2a{declaration:TClass1.TRec2.r2a} := 1;
b0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_2._REC} );
b1.FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
b2.FField1{declaration:GEN_Field.FField1}.r2a{ TODO declaration:TClass1.TRec2.r2a} := 1;
b2.FField1{declaration:GEN_Field.FField1}.r2a{declaration:TClass1.TRec2.r2a} := 1;
a0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_2._REC} );
a1.FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
a2.FField1{declaration:GEN_Field.FField1}.r2a{ TODO declaration:TClass1.TRec2.r2a} := 1;
a2.FField1{declaration:GEN_Field.FField1}.r2a{declaration:TClass1.TRec2.r2a} := 1;
end;
{ GENI_2.TFldI3 }
@ -889,15 +889,15 @@ var
begin
fv{declaration:GENB_2.fv} := default(_REC { TODO: declaration:GENI_2._REC} );
fy{ TODO declaration:GENB_2.TFldB3.fy}.r3a{ TODO: declaration:TClass1.TRec3.r3a} := 1;
fy{declaration:GENI_2.TFldI3.fy}.r3a{ TODO: declaration:TClass1.TRec3.r3a} := 1;
FField1{declaration:GEN_Field.FField1}.r3a{declaration:TClass1.TRec3.r3a} := 1;
b0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_2._REC} );
b1.FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
b2.FField1{declaration:GEN_Field.FField1}.r2a{ TODO declaration:TClass1.TRec2.r2a} := 1;
b2.FField1{declaration:GEN_Field.FField1}.r2a{declaration:TClass1.TRec2.r2a} := 1;
a0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_2._REC} );
a1.FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
a2.FField1{declaration:GEN_Field.FField1}.r2a{ TODO declaration:TClass1.TRec2.r2a} := 1;
a2.FField1{declaration:GEN_Field.FField1}.r2a{declaration:TClass1.TRec2.r2a} := 1;
end;
{ GENI_2 }
@ -913,16 +913,16 @@ var
a2: TFldB2 {declaration:GENB_2.TFldB2};
begin
fv{declaration:GENB_2.fv} := default(_REC { TODO: declaration:GENI_2._REC} );
fIv{ TODO declaration:GENB_2.fv} := default(_REC { TODO: declaration:GENI_2._REC} );
fIv{declaration:GENI_2.fIv} := default(_REC { TODO: declaration:GENI_2._REC} );
fx{declaration:GENB_2.fx} := default(_REC { TODO: declaration:GENI_2._REC} );
fIx{ TODO declaration:GENB_2.fx} := default(_REC { TODO: declaration:GENI_2._REC} );
fIx{declaration:GENI_2.fIx} := default(_REC { TODO: declaration:GENI_2._REC} );
b0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_2._REC} );
b1.FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
b2.FField1{declaration:GEN_Field.FField1}.r2a{ TODO declaration:TClass1.TRec2.r2a} := 1;
b2.FField1{declaration:GEN_Field.FField1}.r2a{declaration:TClass1.TRec2.r2a} := 1;
a0.FField1{declaration:GEN_Field.FField1} := default(_REC { TODO: declaration:GENI_2._REC} );
a1.FField1{declaration:GEN_Field.FField1}.r1a{declaration:TRec1.r1a} := 1;
a2.FField1{declaration:GEN_Field.FField1}.r2a{ TODO declaration:TClass1.TRec2.r2a} := 1;
a2.FField1{declaration:GEN_Field.FField1}.r2a{declaration:TClass1.TRec2.r2a} := 1;
end;