X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FBreakArray.hs;h=60d1410cd070467d751271fce4de9883d017e322;hb=c8b37bf43c61c2fc42ec6ba4ad57f631a59fc2d4;hp=788adf200c1a57f811c21fbe27360636a6027d09;hpb=cdce647711c0f46f5799b24de087622cb77e647f;p=ghc-hetmet.git diff --git a/compiler/main/BreakArray.hs b/compiler/main/BreakArray.hs index 788adf2..60d1410 100644 --- a/compiler/main/BreakArray.hs +++ b/compiler/main/BreakArray.hs @@ -1,28 +1,47 @@ +----------------------------------------------------------------------------- -- -- Break Arrays in the IO monad -- Entries in the array are Word sized -- +-- Conceptually, a zero-indexed IOArray of Bools, initially False. +-- They're represented as Words with 0==False, 1==True. +-- They're used to determine whether GHCI breakpoints are on or off. +-- +-- (c) The University of Glasgow 2007 +-- +----------------------------------------------------------------------------- + +{-# OPTIONS -w #-} +-- The above warning supression flag is a temporary kludge. +-- While working on this module you are encouraged to remove it and fix +-- any warnings in the module. See +-- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings +-- for details module BreakArray - ( BreakArray (BA) + ( BreakArray +#ifdef GHCI + (BA) -- constructor is exported only for ByteCodeGen +#endif , newBreakArray +#ifdef GHCI , getBreak , setBreakOn , setBreakOff , showBreakArray +#endif ) where - +#ifdef GHCI import GHC.Exts import GHC.IOBase -import GHC.Prim import GHC.Word import Constants data BreakArray = BA (MutableByteArray# RealWorld) breakOff, breakOn :: Word -breakOn = fromIntegral 1 -breakOff = fromIntegral 0 +breakOn = 1 +breakOff = 0 -- XXX crude showBreakArray :: BreakArray -> IO () @@ -94,3 +113,14 @@ readBA# array i = IO $ \s -> readBreakArray :: BreakArray -> Int -> IO Word readBreakArray (BA array) (I# i) = readBA# array i + +#else /* GHCI */ +--stub implementation to make main/, etc., code happier. +--IOArray and IOUArray are increasingly non-portable, +--still don't have quite the same interface, and (for GHCI) +--presumably have a different representation. +data BreakArray = Unspecified +newBreakArray :: Int -> IO BreakArray +newBreakArray _ = return Unspecified +#endif /* GHCI */ +