I think this mostly refers to the type constraints
generic TTest<T: TObject> = …
this can only be a class (I.e. inherits from TObject)
The reason you have ; is probably because , is for having multiple of the same type like "A, B: TObject" which makes both A And B require to be a class vs "A; B: TObject" which makes A unrestricted and B a class
I think on the trunk there is also the feature for constants:
generic TBuffer<const Size: SizeInt> …
T1KBuff = specialize TBuffer<1024>
But I’m not sure right now if I remember correctly
But yes, this definitely needs some documentation, I figured that stuff out a year ago or so simply by trial and error, just trying out various constructs that I thought could work, and surprisingly many of them worked (at least on trunk)