RFR: universal type variables: initial prototype
Vicente Romero
vromero at openjdk.java.net
Fri Aug 6 02:08:44 UTC 2021
On Thu, 5 Aug 2021 13:15:49 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:
>> the thing is that one value only doesn't apply to all cases, what if some type variables are universal but others aren't?
>
> But you have only one predicate? Anyway - see the other related comment - you really need this predicate when you call this later on:
>
>
> attribTypes(tree.arguments, env, arg -> valueOKSet.contains(arg));
>
>
> But it feels like the code in there can be simplified so that you use a single `attribType` inside a loop, by passing the right boolean flag for that parameter.
it wont be that simple, see that the method invoked, `Attr.attribTypes`, is doing:
List<Type> types = attribAnyTypes(trees, env);
return chk.checkRefTypes(trees, types, valueOK);
and Check.checkRefTypes is doing:
List<JCExpression> tl = trees;
for (List<Type> l = types; l.nonEmpty(); l = l.tail) {
l.head = checkRefType(tl.head.pos(), l.head, valueOK.test(tl.head));
tl = tl.tail;
}
return types;
and Check.checkRefType is the one using the flag, so in order to do all this at the level of `Attr.visitTypeApply` I will have to unfold all this code, popping up code that belongs in `Check`, and then the code in `Attr.visitTypeApply` will lose readability. This is why I opted for the current solution.
-------------
PR: https://git.openjdk.java.net/valhalla/pull/521
More information about the valhalla-dev
mailing list