> On Nov 29, 2018, at 5:15 AM, Sven Barth via fpc-pascal 
> <fpc-pascal@lists.freepascal.org> wrote:
> 
> Looks better.
> The next thing to nuke is the tgenericparamdef. The parameters stored in 
> tdef.genericparas are the parameter symbols, so there should be no need for 
> defs. If necessary some of the code in pgenutil (and related functions) will 
> need to be changed from handling a list of defs to a list of syms.

I added that extra type so that it would be compatible with genericdeflist. I 
don’t see how that can be removed. The const sym is pulled out in 
generate_specialization_phase2 and renamed (which I forget why already).

So the tgenericparamdef is just a vessel to hold the constsym until 
generate_specialization_phase2? Either way removing it means breaking 
genericdeflist right?

if typeparam.nodetype <> typen then
  begin
    { the typesym from paramdef will be added to the list in 
generate_specialization_phase2 }
    paramdef := 
tgenericparamdef.create(typeparam.resultdef,typeparam,constprettyname);
    genericdeflist.Add(paramdef);
  end
else
  begin
    constprettyname := '';
    genericdeflist.Add(typeparam.resultdef);
  end;

from generate_specialization_phase2:

for i:=0 to genericdef.genericparas.Count-1 do
  begin
    srsym:=tsym(genericdef.genericparas[i]);
    if not (sp_generic_para in srsym.symoptions) then
      internalerror(2013092602);

    // note: ryan
    { set the generic param name of the constsym of tgenericparamdef }
    typedef := tstoreddef(context.genericdeflist[i]);
    if typedef.typ = genericconstdef then
      tgenericparamdef(typedef).typesym.realname := srsym.realname;
    
    generictypelist.add(srsym.realname,typedef.typesym);
  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