> On Feb 16, 2019, at 9:42 AM, Sven Barth via fpc-pascal 
> <fpc-pascal@lists.freepascal.org> wrote:
> 
> When you create the constant symbols for the specialization you need to make 
> sure that they belong to the surrounding symtable, not the specialized 
> generic. 
> 

I probably didn’t get that right then. The constants are significantly 
different because they are generated during specialization unlike normal types 
which are already defined and have ownerships.

Btw I just saw this (in types_dec from pdecl.pas) and not sure it applies to 
constants. The symbol in question here was created in parse_generic_parameters 
and tconstsym doesn’t have a typedef method so I don’t know what casting to 
ttypesym did. Maybe tconstsym.constdef needs to be registered but I have no 
idea.

 { we are not freeing the type parameters, so register them }
               for i:=0 to generictypelist.count-1 do
                 begin
                    ttypesym(generictypelist[i]).register_sym;
                    
tstoreddef(ttypesym(generictypelist[i]).typedef).register_def;
                 end;

Regards,
        Ryan Joseph

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to