<div dir="auto"><div><div class="gmail_quote"><div dir="ltr">Am Di., 27. Nov. 2018, 08:18 hat Ryan Joseph <<a href="mailto:ryan@thealchemistguild.com">ryan@thealchemistguild.com</a>> geschrieben:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
<br>
> On Nov 27, 2018, at 4:59 AM, Sven Barth via fpc-pascal <<a href="mailto:fpc-pascal@lists.freepascal.org" target="_blank" rel="noreferrer">fpc-pascal@lists.freepascal.org</a>> wrote:<br>
> <br>
> Best check again once you've done the switch to tconstsym for constants. :) <br>
> <br>
<br>
I made most of the changes you mentioned so please look. Including the constsyms didn’t break anything and helped to clean up the code. I would have done that from the start but I wasn’t sure you wanted me mixing in new types.<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Good, thank you. Hopefully I'll find the time this evening to look at your changes again. :) </div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Some things remaining:<br>
<br>
1) kSomeDays is a typed const so I get a load node instead of tsetconstnode, which I need to need to know in order to make the name string. See the TODO’s in tgenericparamdef.create.<br>
<br>
type<br>
        TDay = (Mon, Tue, Wed);<br>
        TDays = set of TDay;<br>
const<br>
        kSomeDays:TDays = [Mon, Wed];<br>
<br>
<br>
var<br>
        d: specialize TMyRecord_Set<integer,kSomeDays>; // this doesn’t work<br>
        d: specialize TMyRecord_Set<integer,[Mon,Wed]>; // this works because I get a set node<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">The difference between typed and untyped constants are available everywhere else in the language as well, so I have no qualms (at least for now?) to error out on them. </div><div dir="auto"><br></div><div dir="auto">For sets I believe that this should work however (see here:  <a href="https://freepascal.org/docs-html/current/ref/refse9.html#x21-200002.1">https://freepascal.org/docs-html/current/ref/refse9.html#x21-200002.1</a> ):</div><div dir="auto"><br></div><div dir="auto">=== code begin ===</div><div dir="auto">const</div><div dir="auto">  kSomeDays = [Mon, Wed];</div><div dir="auto">=== code end ===</div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">2) Again in tgenericparamdef.create I don’t know how to make the pretty name string from a set (see the TODO)<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">I'll need to take a look at that. Maybe we'll need to add a list of elements to the set comet type if it isn't already there. 🤷‍♀️</div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">3) You may be right about forcing the const type at declaration. I still kept the undefined const placeholder in there but if you have nested specializations you can get type errors because the placeholder uses a nil node. It’s too early to know if there’s any reason for undefined consts.<br>
<br>
4) I’m not sure if changing the types to consts messed up PPU loading or it works out of the box. Seems to be ok from initial tests though.<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Did you try with the generic and the specialization in different units and changing only one of the two? Though you might want to check whether tstoreddef.ppuload (or wherever tdef.genericparas is initialized after a unit load) correctly instantiated the tconstsym instances instead of ttypesym ones. It might already work correctly, but better safe than sorry. 😅</div><div dir="auto"><br></div><div dir="auto">Regards, </div><div dir="auto">Sven </div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"></blockquote></div></div></div>