Prechádzať zdrojové kódy

Correctly handle subclasses, patch by Henrique Werlang (issue #39195)

git-svn-id: trunk@49589 -


(cherry picked from commit c7690907e7cdd53fc3d5a9698a84e9361d2e1316)
michael 4 rokov pred
rodič
commit
6c78bb2b71
1 zmenil súbory, kde vykonal 20 pridanie a 11 odobranie
  1. 20 11
      packages/fcl-passrc/src/paswrite.pp

+ 20 - 11
packages/fcl-passrc/src/paswrite.pp

@@ -433,9 +433,26 @@ procedure TPasWriter.WriteDummyExternalFunctions(aSection : TPasSection);
       end;
   end;
 
+  procedure DoCheckClass(C: TPasClassType; Force : Boolean; Prefix: String);
+  var
+    I: Integer;
+    M : TPasElement;
+
+  begin
+    if (C.ExternalName<>'') then
+      for I:=0 to C.Members.Count-1 do
+      begin
+        M:=TPasElement(C.members[I]);
+        if (M is TPasClassType) then
+          DoCheckClass(M as TPasClassType, Force, Prefix + C.SafeName + '.')
+        else
+          DoCheckElement(M, Force, Prefix + C.SafeName + '.');
+      end;
+  end;
+
 Var
-  I,J : Integer;
-  E,M : TPasElement;
+  I : Integer;
+  E : TPasElement;
   C : TPasClassType;
 
 begin
@@ -447,15 +464,7 @@ begin
     E:=TPasElement(aSection.Declarations[i]);
     DoCheckElement(E,False,'');
     if (E is TPasClassType) then
-      begin
-      C:=E as TPasClassType;
-      if (C.ExternalName<>'') then
-        For J:=0 to C.Members.Count-1 do
-          begin
-          M:=TPasElement(C.members[J]);
-          DoCheckElement(M,True,C.SafeName+'.');
-          end;
-      end;
+      DoCheckClass(E as TPasClassType, True, '');
     end;
   Addln;
   Addln('// end of dummy implementations');