Conversation
|
Well, I guess we found out what that condition is for. I suppose it's not possible to create a type that contains itself without either unions (which this returns true for), or having |
|
Though I guess that only prevents us from instantiating such a type, not from defining it and indeed: I suppose we could cache it during datatype initialization (which essentially gets us the recursion memoization for free by storing the flag in the datatype). |
|
Yes, I started computing that property in datatype initialization, of whether the type is able to be allocated versus whether the fields could form a cycle, to set |
|
Seems valid, so LGTM. |
jl_concrete_subtype was recursing into the vararg element of a tuple,
which I don't think is correct (because it could be zero-length and
thus be constructible even if the element type is not). Fix that and
as a bonus get we are now able to get rid of the previous condition
that (accidentally) special cased tuples to have that behavior.
Fixes #31062