Andy I had a look at what you did. Generally looks good. Much better than the Note version, as I hope you agree! (You seem to have deleted quite a bit of code!)
Here's a qn. I thought you were going to do ticks like this: dsExpr (HsTick a e) = tick{a} e but instead you have dsExpr (HsTick a e) = case tick{a} of DEFAULT -> e I think that both are probably fine, but the implications are not clear to me. The former seems more robust somehow. For example if we have case tick{a} of DEFAULT -> ....(case tick{a} of DEFAULT -> ...) GHC might eliminate the inner tick. Would that be OK (after all, you're only checking coverage, and it's covered)? Clearly it's important not to eliminate the inner tick if it's for a different program point (tick{b}, say). But I think that is ok because you make a fresh TickId for each {b} program point. Still it'd be good to write this down. Second point: (I'm offline at the moment): is there a Ghc Developer Wiki page describing how the implementation works? I'd appreciate one. You're replying on certain properties of the simplification and optimisation phases (such as not discarding (case tick of DEFAULT -> ...), which I'd like to have explicit. Here's another qn. You change if e then e1 else e2 into if (binTick (a,b) e) then e1 else e2 Then later, in CorePrep you go case (binTick (a,b) e) of True -> e1; False -> e2 ==> case e of True -> tick a e1; False -> tick b e2 So why did you not instead generate the 'tick' version in the first place? if e then (tick a e1) else (tick b e2) It's perhpas not so obvious in the case of guards, because the then and else branches aren't neatly to hand. But you can still do it. Instead of binTick (a,b) e generage case e of True -> tick a True; False -> tick b False Now the simplifier will do the rest for you. In short, I think you might be able to eliminate BinTick altogether, which would surely be an advantage! Simon | -----Original Message----- | From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Andy Gill | Sent: 29 November 2006 22:19 | To: [EMAIL PROTECTED] | Subject: patch applied (ghc): TickBox representation change | | Wed Nov 29 14:09:57 PST 2006 [EMAIL PROTECTED] | * TickBox representation change | | This changes the internal representation of TickBoxes, | from | Note (TickBox "module" n) <expr> | into | | case tick<module,n> of | _ -> <expr> | | tick has type :: #State #World, when the module and tick numbe | are stored inside IdInfo. | | Binary tick boxes change from | | Note (BinaryTickBox "module" t f) <expr> | | into | | btick<module,t,f> <expr> | | btick has type :: Bool -> Bool, with the module and tick number | stored inside IdInfo. | | | M ./compiler/basicTypes/Id.lhs +14 | M ./compiler/basicTypes/IdInfo.lhs -7 +34 | M ./compiler/basicTypes/MkId.lhs -1 +34 | M ./compiler/basicTypes/Name.lhs +6 | M ./compiler/coreSyn/CorePrep.lhs -19 +50 | M ./compiler/coreSyn/CoreSyn.lhs -9 | M ./compiler/coreSyn/CoreUtils.lhs -12 +5 | M ./compiler/coreSyn/PprCore.lhs -15 | M ./compiler/deSugar/Coverage.lhs -6 +12 | M ./compiler/deSugar/DsUtils.lhs -2 +19 | M ./compiler/iface/BinIface.hs -16 | M ./compiler/iface/IfaceSyn.lhs -10 | M ./compiler/iface/MkIface.lhs -3 | M ./compiler/iface/TcIface.lhs -2 | M ./compiler/main/DynFlags.hs -2 +2 | M ./compiler/main/TidyPgm.lhs -7 +4 | M ./compiler/simplCore/FloatIn.lhs -7 | M ./compiler/simplCore/Simplify.lhs -10 +2 | M ./compiler/stgSyn/CoreToStg.lhs -10 +4 | | _______________________________________________ | Cvs-ghc mailing list | [EMAIL PROTECTED] | http://www.haskell.org/mailman/listinfo/cvs-ghc _______________________________________________ Cvs-ghc mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/cvs-ghc