|
@@ -239,9 +239,18 @@ end;
|
|
procedure TPasWriter.WriteClass(AClass: TPasClassType);
|
|
procedure TPasWriter.WriteClass(AClass: TPasClassType);
|
|
var
|
|
var
|
|
i: Integer;
|
|
i: Integer;
|
|
- Member: TPasElement;
|
|
|
|
|
|
+ Member, LastMember: TPasElement;
|
|
InterfacesListPrefix: string;
|
|
InterfacesListPrefix: string;
|
|
LastVisibility, CurVisibility: TPasMemberVisibility;
|
|
LastVisibility, CurVisibility: TPasMemberVisibility;
|
|
|
|
+
|
|
|
|
+ function ForceVisibility: boolean;
|
|
|
|
+ begin
|
|
|
|
+ Result := (LastMember <> nil) and
|
|
|
|
+ // variables can't be declared directly after methods nor properties
|
|
|
|
+ // (visibility section or var keyword is required)
|
|
|
|
+ (Member is TPasVariable) and not (LastMember is TPasVariable);
|
|
|
|
+ end;
|
|
|
|
+
|
|
begin
|
|
begin
|
|
PrepareDeclSection('type');
|
|
PrepareDeclSection('type');
|
|
wrt(AClass.Name + ' = ');
|
|
wrt(AClass.Name + ' = ');
|
|
@@ -275,11 +284,12 @@ begin
|
|
|
|
|
|
IncIndent;
|
|
IncIndent;
|
|
LastVisibility := visDefault;
|
|
LastVisibility := visDefault;
|
|
|
|
+ LastMember := nil;
|
|
for i := 0 to AClass.Members.Count - 1 do
|
|
for i := 0 to AClass.Members.Count - 1 do
|
|
begin
|
|
begin
|
|
Member := TPasElement(AClass.Members[i]);
|
|
Member := TPasElement(AClass.Members[i]);
|
|
CurVisibility := Member.Visibility;
|
|
CurVisibility := Member.Visibility;
|
|
- if CurVisibility <> LastVisibility then
|
|
|
|
|
|
+ if (CurVisibility <> LastVisibility) or ForceVisibility then
|
|
begin
|
|
begin
|
|
DecIndent;
|
|
DecIndent;
|
|
case CurVisibility of
|
|
case CurVisibility of
|
|
@@ -293,6 +303,7 @@ begin
|
|
LastVisibility := CurVisibility;
|
|
LastVisibility := CurVisibility;
|
|
end;
|
|
end;
|
|
WriteElement(Member);
|
|
WriteElement(Member);
|
|
|
|
+ LastMember := Member;
|
|
end;
|
|
end;
|
|
DecIndent;
|
|
DecIndent;
|
|
wrtln('end;');
|
|
wrtln('end;');
|