Selaa lähdekoodia

+ provide a tsym based variant of ChangeOwnerAndName

Sven/Sarah Barth 3 vuotta sitten
vanhempi
commit
eaeb614887
2 muutettua tiedostoa jossa 11 lisäystä ja 1 poistoa
  1. 1 1
      compiler/pgenutil.pas
  2. 10 0
      compiler/symtype.pas

+ 1 - 1
compiler/pgenutil.pas

@@ -680,7 +680,7 @@ uses
         for i:=0 to unnamed_syms.count-1 do
           begin
             sym:=tsym(unnamed_syms[i]);
-            sym.ChangeOwnerAndName(owner.symlist,sym.realname);
+            sym.ChangeOwnerAndName(owner,sym.realname);
           end;
         unnamed_syms.clear;
       end;

+ 10 - 0
compiler/symtype.pas

@@ -143,6 +143,7 @@ interface
          procedure buildderef;virtual;
          procedure deref;virtual;
          procedure ChangeOwner(st:TSymtable);
+         procedure ChangeOwnerAndName(st:TSymtable;const aname:tsymstr);
          procedure IncRefCount;
          procedure IncRefCountBy(AValue : longint);
          procedure MaybeCreateRefList;
@@ -687,6 +688,15 @@ implementation
       end;
 
 
+    procedure tsym.ChangeOwnerAndName(st:TSymtable;const aname:tsymstr);
+      begin
+        if assigned(owner) and owner.SymList.OwnsObjects then
+          owner.symlist.extract(self);
+        Owner:=st;
+        inherited ChangeOwnerAndName(Owner.SymList,aname);
+      end;
+
+
 {****************************************************************************
                                  tpropaccesslist
 ****************************************************************************}