From: Isaac Dupree Date: Wed, 26 Dec 2007 17:19:13 +0000 (+0000) Subject: move and generalize an instance (#1405) X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=c886dd30160f26f69336adc7dfc3aab5b89a4dfb move and generalize an instance (#1405) UserOfLocalRegs (ZLast Last) isn't Haskell98, but it was just as good an instance to be UserOfLocalRegs a => UserOfLocalRegs (ZLast a) --- diff --git a/compiler/cmm/ZipCfg.hs b/compiler/cmm/ZipCfg.hs index 228504c..85727a3 100644 --- a/compiler/cmm/ZipCfg.hs +++ b/compiler/cmm/ZipCfg.hs @@ -37,6 +37,8 @@ where #include "HsVersions.h" +import CmmExpr ( UserOfLocalRegs(..) ) --for an instance + import Outputable hiding (empty) import Panic import Unique @@ -140,6 +142,14 @@ data ZLast l -- so we don't want to pollute the 'l' type parameter with it | LastOther l +--So that we don't have orphan instances, this goes here or in CmmExpr. +--At least UserOfLocalRegs (ZLast Last) is needed (Last defined elsewhere), +--but there's no need for non-Haskell98 instances for that. +instance UserOfLocalRegs a => UserOfLocalRegs (ZLast a) where + foldRegsUsed f z (LastOther l) = foldRegsUsed f z l + foldRegsUsed _f z LastExit = z + + data ZHead m = ZFirst BlockId | ZHead (ZHead m) m -- ZHead is a (reversed) sequence of middle nodes labeled by a BlockId data ZTail m l = ZLast (ZLast l) | ZTail m (ZTail m l) diff --git a/compiler/cmm/ZipCfgCmmRep.hs b/compiler/cmm/ZipCfgCmmRep.hs index c5464e2..f0dc535 100644 --- a/compiler/cmm/ZipCfgCmmRep.hs +++ b/compiler/cmm/ZipCfgCmmRep.hs @@ -182,10 +182,6 @@ instance UserOfLocalRegs Last where last (LastCondBranch e _ _) = foldRegsUsed f z e last (LastSwitch e _tbl) = foldRegsUsed f z e -instance UserOfLocalRegs (ZLast Last) where - foldRegsUsed f z (LastOther l) = foldRegsUsed f z l - foldRegsUsed _f z LastExit = z - ---------------------------------------------------------------------- ----- Instance declarations for prettyprinting (avoids recursive imports)