Explorar o código

* always print the fully qualified type name in case a type is nested

git-svn-id: trunk@17172 -
Jonas Maebe %!s(int64=14) %!d(string=hai) anos
pai
achega
9ae0414dda
Modificáronse 2 ficheiros con 25 adicións e 13 borrados
  1. 18 9
      compiler/symdef.pas
  2. 7 4
      compiler/symtype.pas

+ 18 - 9
compiler/symdef.pas

@@ -76,6 +76,7 @@ interface
           function  is_publishable : boolean;override;
           function  is_publishable : boolean;override;
           function  needs_inittable : boolean;override;
           function  needs_inittable : boolean;override;
           function  rtti_mangledname(rt:trttitype):string;override;
           function  rtti_mangledname(rt:trttitype):string;override;
+          function  OwnerHierarchyName: string; override;
           function  in_currentunit: boolean;
           function  in_currentunit: boolean;
           { regvars }
           { regvars }
           function is_intregable : boolean;
           function is_intregable : boolean;
@@ -1029,6 +1030,22 @@ implementation
       end;
       end;
 
 
 
 
+    function tstoreddef.OwnerHierarchyName: string;
+      var
+        tmp: tdef;
+      begin
+        tmp:=self;
+        result:='';
+        repeat
+          if tmp.owner.symtabletype in [ObjectSymtable,recordsymtable] then
+            tmp:=tdef(tmp.owner.defowner)
+          else
+            break;
+          result:=tabstractrecorddef(tmp).objrealname^+'.'+result;
+        until tmp=nil;
+      end;
+
+
     function tstoreddef.in_currentunit: boolean;
     function tstoreddef.in_currentunit: boolean;
       var
       var
         st: tsymtable;
         st: tsymtable;
@@ -2684,15 +2701,7 @@ implementation
       var
       var
         tmp: tabstractrecorddef;
         tmp: tabstractrecorddef;
       begin
       begin
-        Result:=objrealname^;
-        tmp:=self;
-        repeat
-          if tmp.owner.symtabletype in [ObjectSymtable,recordsymtable] then
-            tmp:=tabstractrecorddef(tmp.owner.defowner)
-          else
-            break;
-          Result:=tmp.objrealname^+'.'+Result;
-        until tmp=nil;
+        Result:=OwnerHierarchyName+objrealname^;
       end;
       end;
 
 
     function tabstractrecorddef.search_enumerator_get: tprocdef;
     function tabstractrecorddef.search_enumerator_get: tprocdef;

+ 7 - 4
compiler/symtype.pas

@@ -73,6 +73,7 @@ interface
          function  mangledparaname:string;
          function  mangledparaname:string;
          function  getmangledparaname:string;virtual;
          function  getmangledparaname:string;virtual;
          function  rtti_mangledname(rt:trttitype):string;virtual;abstract;
          function  rtti_mangledname(rt:trttitype):string;virtual;abstract;
+         function  OwnerHierarchyName: string; virtual; abstract;
          function  size:asizeint;virtual;abstract;
          function  size:asizeint;virtual;abstract;
          function  packedbitsize:asizeint;virtual;
          function  packedbitsize:asizeint;virtual;
          function  alignment:shortint;virtual;abstract;
          function  alignment:shortint;virtual;abstract;
@@ -258,12 +259,13 @@ implementation
 
 
     function tdef.typename:string;
     function tdef.typename:string;
       begin
       begin
+        result:=OwnerHierarchyName;
         if assigned(typesym) and
         if assigned(typesym) and
            not(typ in [procvardef,procdef]) and
            not(typ in [procvardef,procdef]) and
            (typesym.realname[1]<>'$') then
            (typesym.realname[1]<>'$') then
-          result:=typesym.realname
+          result:=result+typesym.realname
         else
         else
-          result:=GetTypeName;
+          result:=result+GetTypeName;
       end;
       end;
 
 
 
 
@@ -275,10 +277,11 @@ implementation
 
 
     function tdef.typesymbolprettyname:string;
     function tdef.typesymbolprettyname:string;
       begin
       begin
+        result:=OwnerHierarchyName;
         if assigned(typesym) then
         if assigned(typesym) then
-          result:=typesym.prettyname
+          result:=result+typesym.prettyname
         else
         else
-          result:='<no type symbol>'
+          result:=result+'<no type symbol>'
       end;
       end;
 
 
     function tdef.mangledparaname:string;
     function tdef.mangledparaname:string;