> On Nov 26, 2018, at 5:16 PM, Sven Barth via fpc-pascal 
> <fpc-pascal@lists.freepascal.org> wrote:
> 
> Am Mo., 26. Nov. 2018, 10:46 hat Ryan Joseph <r...@thealchemistguild.com> 
> geschrieben:
> 
> 
> > On Nov 26, 2018, at 12:09 AM, Sven Barth via fpc-pascal 
> > <fpc-pascal@lists.freepascal.org> wrote:
> > 
> > - your pretty name is wrong; the pretty name for a specialization with 
> > constants should be "TSomeGeneric<TSomeType, 42>", not 
> > "TSomeGeneric<SomeUnit.TSomeType, System.LongInt#42>" as it would be now
> 
> I’ll change the # prefix for const params but the unit prefix was not added 
> by me. See the line:
> 
> prettynamepart:=typeparam.resultdef.fullownerhierarchyname(true);
> 
> in pgenutil.pas.
> 
> Yes, but that is only because the code currently only handles types. For 
> constants the addition of the type is not required, only the constant value. 

Then is it ok if type params have the unit prefix? Right now I’m doing 
TGeneric<Unit.Type,40> because the first param is a type so it uses the 
original code.

> Like you mention below if the const type was restricted in the definition 
> then it would make sense to change these to tconstsym. I guess I need to try 
> and see how much code this change blows up.
> 
> Those assumptions will "simply" have to be checked/fixed. In the end we'll 
> have cleaner code and thus it will be worth it. And with the help of the 
> testsuite you can avoid regressions. :) 

Ok, I’ll make it happen if it’s important.

> 
> 
> > - get rid of tscannerfile.parsing_generic_type; it's not only at the wrong 
> > location (the name "parsing_generic_type" should already tell you that it 
> > has no place inside the *scanner*), but it's also used to solve something 
> > in a completely wrong way: you must *not* use current_structdef for the 
> > generic parameters as the only valid parameter list inside 
> > parse_generic_specialization_types_internal *is* paradeflist and 
> > genericdef.genericparas. If there is still a problem then you need to 
> > handle that differently (Note: also don't Exit from 
> > parse_generic_specialization_type_internal, because the idea is that all 
> > incompatibilities are shown at once, so use Continue to check the next 
> > parameter)
> 
> Yes, that was a hack to access current_structdef safely but I guess that’s 
> not what I should be doing. Let me see if I can get that same information 
> from the 2 params you mentioned.
> 
> Maybe you can show a test case that is failing? 

This is why I wanted to access current_structdef. When "specialize 
IMyInterface<T, U>” was being parsed I need a way to refer back to the generic 
so I know what “U” is.

type
        generic TMyClass<T, const U> = class (specialize IMyInterface<T, U>)
                type
                        THelperType = specialize THelper<T, U>;
                public
                        helper: THelperType;
                        procedure DoThis (value: T);
        end;
        TListClass = specialize TMyClass<integer,10>;


> 
> 
> > - remove the check for m_objfpc; yes it won't work with inline 
> > specializations in mode Delphi for now, but it can still be used for 
> > specializations in type or var sections; also one idea for an improvement I 
> > have for parsing inline specializations in mode Delphi would be if the 
> > compiler knows that the symbol left of the "<" can only be a generic (cause 
> > let's be honest: in most code types aren't overloaded with 
> > variables/constants and more often than not types begin with "T", so they 
> > shouldn't conflict with the names of more local variables/constants/fields 
> > either)
> 
> I got a crash in Delphi mode but I can change that to an error.
> 
> For now we should reject an inline specialization (aka block_type = 
> bt_general) in mode Delphi if the found generic contains any constant 
> parameter (declarations of such generics should be allowed). Later on we can 
> lift that restriction once I've implemented the checks I mentioned. 

Ok, I can give an error is this one instance where it fails and allow all the 
others.

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