浏览代码

* apply patch by Blaise.ru to remove last remnants of VMT regeneration which is no longer needed/used

git-svn-id: trunk@43628 -
svenbarth 5 年之前
父节点
当前提交
f2818bfe7a
共有 2 个文件被更改,包括 7 次插入21 次删除
  1. 1 8
      compiler/nobj.pas
  2. 6 13
      compiler/symdef.pas

+ 1 - 8
compiler/nobj.pas

@@ -801,7 +801,6 @@ implementation
         vmtdef: trecorddef;
         vmtdef: trecorddef;
         systemvmt: tdef;
         systemvmt: tdef;
         sym: tsym;
         sym: tsym;
-        vmtdefname: TIDString;
       begin
       begin
         { these types don't have an actual VMT, we only use the other methods
         { these types don't have an actual VMT, we only use the other methods
           in TVMTBuilder to determine duplicates/overrides }
           in TVMTBuilder to determine duplicates/overrides }
@@ -826,13 +825,9 @@ implementation
         if _class.objecttype = odt_cppclass then
         if _class.objecttype = odt_cppclass then
           exit;
           exit;
 
 
-        { the VMT definition may already exist in case of generics }
-        vmtdefname:=internaltypeprefixName[itp_vmtdef]+_class.mangledparaname;
-        if assigned(try_search_current_module_type(vmtdefname)) then
-          exit;
         { create VMT type definition }
         { create VMT type definition }
         vmtdef:=crecorddef.create_global_internal(
         vmtdef:=crecorddef.create_global_internal(
-          vmtdefname,
+          internaltypeprefixName[itp_vmtdef]+_class.mangledparaname,
           0,
           0,
           target_info.alignment.recordalignmin);
           target_info.alignment.recordalignmin);
 {$ifdef llvm}
 {$ifdef llvm}
@@ -906,8 +901,6 @@ implementation
         old_current_structdef:=current_structdef;
         old_current_structdef:=current_structdef;
         current_structdef:=_class;
         current_structdef:=_class;
 
 
-        _class.resetvmtentries;
-
         { inherit (copy) VMT from parent object }
         { inherit (copy) VMT from parent object }
         if assigned(_class.childof) then
         if assigned(_class.childof) then
           _class.copyvmtentries(_class.childof);
           _class.copyvmtentries(_class.childof);

+ 6 - 13
compiler/symdef.pas

@@ -493,7 +493,6 @@ interface
           procedure buildderef;override;
           procedure buildderef;override;
           procedure deref;override;
           procedure deref;override;
           procedure derefimpl;override;
           procedure derefimpl;override;
-          procedure resetvmtentries;
           procedure copyvmtentries(objdef:tobjectdef);
           procedure copyvmtentries(objdef:tobjectdef);
           function  getparentdef:tdef;override;
           function  getparentdef:tdef;override;
           function  size : asizeint;override;
           function  size : asizeint;override;
@@ -7267,6 +7266,8 @@ implementation
 
 
 
 
     destructor tobjectdef.destroy;
     destructor tobjectdef.destroy;
+      var
+        i: longint;
       begin
       begin
          if assigned(symtable) then
          if assigned(symtable) then
            begin
            begin
@@ -7287,7 +7288,8 @@ implementation
            end;
            end;
          if assigned(vmtentries) then
          if assigned(vmtentries) then
            begin
            begin
-             resetvmtentries;
+             for i:=0 to vmtentries.count-1 do
+               dispose(pvmtentry(vmtentries[i]));
              vmtentries.free;
              vmtentries.free;
              vmtentries:=nil;
              vmtentries:=nil;
            end;
            end;
@@ -7532,22 +7534,13 @@ implementation
       end;
       end;
 
 
 
 
-    procedure tobjectdef.resetvmtentries;
-      var
-        i : longint;
-      begin
-        for i:=0 to vmtentries.Count-1 do
-          Dispose(pvmtentry(vmtentries[i]));
-        vmtentries.clear;
-      end;
-
-
     procedure tobjectdef.copyvmtentries(objdef:tobjectdef);
     procedure tobjectdef.copyvmtentries(objdef:tobjectdef);
       var
       var
         i : longint;
         i : longint;
         vmtentry : pvmtentry;
         vmtentry : pvmtentry;
       begin
       begin
-        resetvmtentries;
+        if vmtentries.count<>0 then
+          internalerror(2019081401);
         vmtentries.count:=objdef.vmtentries.count;
         vmtentries.count:=objdef.vmtentries.count;
         for i:=0 to objdef.vmtentries.count-1 do
         for i:=0 to objdef.vmtentries.count-1 do
           begin
           begin