Changes between Version 2 and Version 3 of DataParallel/ClosureConversion/ClassLess
- Timestamp:
- 04/20/07 06:33:35 (6 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
DataParallel/ClosureConversion/ClassLess
v2 v3 21 21 * if we do not have a conversion, we generate an instance (and hence dfun) for `C tau^`, where `tau^` is the closure converted `tau`; 22 22 * if we have a conversion, we generate an instance for `C_CC tau^`. 23 In any case, we add a field `is_CC :: Just Instance` to `InstEnv.Instance` that contains the additionally generated instance. And in both cases, we should be able to derive the required code for the dfun from the definition of `C tau`. 23 In any case, we add a field `is_CC :: Just Instance` to `InstEnv.Instance` that contains the additionally generated instance. And in both cases, we should be able to derive the required code for the dfun from the definition of `C tau`. We also make sure that the `dfun`'s `idCC` field (see below) is set to that of the converted dfun. 24 24 25 25 === Type terms === … … 40 40 41 41 When converting a toplevel binding for `f :: t`, we generate `f_CC :: t^`. The alternatives `GlobalId` and `LocalId` of `Var.Var` get a new field `idCC :: Maybe Id` and the `Id` for `f` contains `Just f_CC` in that field. 42 43 === Core terms === 44 45 Apart from the standard rules, we need to handle the following special cases: 46 * We come across a value variable `v` where `idCC v == Nothing` whose type is `t`: we generate `convert t v` (see below). 47 * We come across a case expression where the scrutinised type `T` has `tyConCC T == Nothing`: we leave the case expression as is (i.e., unconverted), but make sure that the `idCC` field of all variables bound by patterns in the alternatives have their `idCC` field as `Nothing`. (This implies that the previous case will kick in and convert the (unconverted) values obtained after decomposition.) 48 * We come across a dfun: If its `idCC` field is `Nothing`, we keep the selection as is, but apply `convert t e` from it it, where `t` is the type of the selected method and `e` the selection expression. If `idCC` is `Just d_CC`, and the dfun's class is converted, `d_CC` is fully converted. If it's class is not converted, we also keep the selection unconverted, but have a bit less to do in `convert t e`. '''TODO:''' This needs to be fully worked out. 49 50 === Generating conversions ===
