Browse Source

* use new TSym.EscapedRealName property when creating new symbols with the
same name as existing symbols

git-svn-id: trunk@47856 -

Jonas Maebe 4 years ago
parent
commit
5e3e4437c4
2 changed files with 12 additions and 2 deletions
  1. 10 0
      compiler/symbase.pas
  2. 2 2
      compiler/symcreat.pas

+ 10 - 0
compiler/symbase.pas

@@ -72,6 +72,7 @@ interface
       TSymEntry = class(TFPHashObject)
       private
          FRealName : {$ifdef symansistr}TSymStr{$else}pshortstring{$endif};
+         function GetEscapedRealName: TSymStr;
          function  GetRealname: TSymStr;
          procedure SetRealname(const ANewName: TSymStr);
       public
@@ -80,6 +81,7 @@ interface
          Owner : TSymtable;
          destructor destroy;override;
          property RealName: TSymStr read GetRealName write SetRealName;
+         property EscapedRealName: TSymStr read GetEscapedRealName;
       end;
 
 {************************************************
@@ -208,6 +210,14 @@ implementation
       end;
 
 
+    function TSymEntry.GetEscapedRealName: TSymStr;
+      begin
+        result:=GetRealname;
+        if result=Name then
+          result:='$'+result;
+      end;
+
+
     procedure TSymEntry.SetRealname(const ANewName:TSymStr);
       begin
 {$ifndef symansistr}

+ 2 - 2
compiler/symcreat.pas

@@ -1257,7 +1257,7 @@ implementation
       else
         begin
           symname:=sym.name;
-          symrealname:=sym.realname;
+          symrealname:=sym.EscapedRealName;
         end;
       result:=search_struct_member(trecorddef(nestedvarsdef),symname);
       if not assigned(result) then
@@ -1330,7 +1330,7 @@ implementation
           sl:=tpropaccesslist.create;
           sl.addsym(sl_load,pd.parentfpstruct);
           sl.addsym(sl_subscript,tfieldvarsym(fsym));
-          aliassym:=cabsolutevarsym.create_ref(lsym.name,tfieldvarsym(fsym).vardef,sl);
+          aliassym:=cabsolutevarsym.create_ref(lsym.EscapedRealName,tfieldvarsym(fsym).vardef,sl);
           { hide the original variable (can't delete, because there
             may be other loadnodes that reference it)
             -- only for locals; hiding parameters changes the