Explorar el Código

* allow sp_generic_dummysym for procsyms even if there are no generic overloads

Sven/Sarah Barth hace 1 año
padre
commit
bfe5733624
Se han modificado 1 ficheros con 19 adiciones y 15 borrados
  1. 19 15
      compiler/symsym.pas

+ 19 - 15
compiler/symsym.pas

@@ -1074,18 +1074,19 @@ implementation
           end;
         if sp_generic_dummy in symoptions then
           begin
-            if not assigned(fgenprocsymovlds) then
-              internalerror(2021010602);
             if not assigned(fgenprocsymovldsderefs) then
               fgenprocsymovldsderefs:=tfplist.create
             else
               fgenprocsymovldsderefs.clear;
-            for i:=0 to fgenprocsymovlds.count-1 do
-              begin
-                sym:=tprocsym(fgenprocsymovlds[i]);
-                d.build(sym);
-                fgenprocsymovldsderefs.add(pointer(ptrint(d.dataidx)));
-              end;
+            { this might happen for procsyms in classes that override symbols
+              in a parent class that generic overloads }
+            if assigned(fgenprocsymovlds) then
+              for i:=0 to fgenprocsymovlds.count-1 do
+                begin
+                  sym:=tprocsym(fgenprocsymovlds[i]);
+                  d.build(sym);
+                  fgenprocsymovldsderefs.add(pointer(ptrint(d.dataidx)));
+                end;
           end;
       end;
 
@@ -1109,16 +1110,19 @@ implementation
           end;
         if sp_generic_dummy in symoptions then
           begin
-            if not assigned(fgenprocsymovlds) then
-              internalerror(2021010603);
+            {if not assigned(fgenprocsymovlds) then
+              internalerror(2021010603);}
             if not assigned(fgenprocsymovldsderefs) then
               internalerror(2021010302);
-            fgenprocsymovlds.clear;
-            for i:= 0 to fgenprocsymovldsderefs.count-1 do
+            if assigned(fgenprocsymovlds) then
               begin
-                d.dataidx:=ptrint(fgenprocsymovldsderefs[i]);
-                sym:=tprocsym(d.resolve);
-                fgenprocsymovlds.add(sym);
+                fgenprocsymovlds.clear;
+                for i:= 0 to fgenprocsymovldsderefs.count-1 do
+                  begin
+                    d.dataidx:=ptrint(fgenprocsymovldsderefs[i]);
+                    sym:=tprocsym(d.resolve);
+                    fgenprocsymovlds.add(sym);
+                  end;
               end;
           end;
       end;