swift
0afe0305 - Change the encoding of result indices. Now, we would count all parameters there, not just

Commit
2 years ago
Change the encoding of result indices. Now, we would count all parameters there, not just semantic results. The rationale for this change is as follows: the interface type of linear maps (pullback in particular) depends on whether there are semantic result parameters. E.g. the pullback type for (T1, T2) -> R might be (R.Tan) -> (T1.Tan, T2.Tan) or (R.Tan, T2.Tan) -> (T1.Tan) depending on whether T2 is a semantic result parameter (inout or class-bound) or not. There was no way to deduce this just from the generic function signature and param / result indices as previously result indices included number of semantic result parameters only (first semantic result parameter, second semantic result parameter and so on). E.g. in the example above we might have result indices to be (0, 1), however, this will not give any information if T1 or T2 is a semantic result parameter type given a generic signature. This change extends result indices. Now their capacity is assumed to be number of results plus number of all function parameters and we encode indices of all parameters that are assumed to be semantic result parameter. So, in the example above we will have result indices to be (0, 1) if T1 is a semantic result parameter or (0, 2) is T2 is a semantic result parameter. This allows one to correctly deduce the generic linear map types for reabstraction thunks and also keep a variety of other invariants.
Author
asl asl
Parents
Loading