Bläddra i källkod

fcl-passrc: paswrite: fix for fields declarations inside classes. Variables can't be declared directly after methods nor properties (visibility section or var keyword is required)

git-svn-id: trunk@36798 -
maciej-izak 8 år sedan
förälder
incheckning
b087cc81f5
1 ändrade filer med 13 tillägg och 2 borttagningar
  1. 13 2
      packages/fcl-passrc/src/paswrite.pp

+ 13 - 2
packages/fcl-passrc/src/paswrite.pp

@@ -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;');