projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
replace several 'fromJust's with 'expectJust's
[ghc-hetmet.git]
/
ghc
/
compiler
/
utils
/
FastString.lhs
diff --git
a/ghc/compiler/utils/FastString.lhs
b/ghc/compiler/utils/FastString.lhs
index
28aa6b0
..
ea30779
100644
(file)
--- a/
ghc/compiler/utils/FastString.lhs
+++ b/
ghc/compiler/utils/FastString.lhs
@@
-51,6
+51,10
@@
module FastString
-- ** Outputing
hPutFS,
-- ** Outputing
hPutFS,
+ -- ** Internal
+ getFastStringTable,
+ hasZEncoding,
+
-- * LitStrings
LitString,
mkLitString#,
-- * LitStrings
LitString,
mkLitString#,
@@
-71,6
+75,7
@@
import System.IO.Unsafe ( unsafePerformIO )
import Control.Monad.ST ( stToIO )
import Data.IORef ( IORef, newIORef, readIORef, writeIORef )
import System.IO ( hPutBuf )
import Control.Monad.ST ( stToIO )
import Data.IORef ( IORef, newIORef, readIORef, writeIORef )
import System.IO ( hPutBuf )
+import Data.Maybe ( isJust )
import GHC.Arr ( STArray(..), newSTArray )
import GHC.IOBase ( IO(..) )
import GHC.Arr ( STArray(..), newSTArray )
import GHC.IOBase ( IO(..) )
@@
-343,6
+348,17
@@
isZEncoded :: FastString -> Bool
isZEncoded fs | ZEncoded <- enc fs = True
| otherwise = False
isZEncoded fs | ZEncoded <- enc fs = True
| otherwise = False
+-- | Returns 'True' if this 'FastString' is not Z-encoded but already has
+-- a Z-encoding cached (used in producing stats).
+hasZEncoding :: FastString -> Bool
+hasZEncoding fs@(FastString uid n_bytes _ fp enc) =
+ case enc of
+ ZEncoded -> False
+ UTF8Encoded ref ->
+ inlinePerformIO $ do
+ m <- readIORef ref
+ return (isJust m)
+
-- | Returns 'True' if the 'FastString' is empty
nullFS :: FastString -> Bool
nullFS f = n_bytes f == 0
-- | Returns 'True' if the 'FastString' is empty
nullFS :: FastString -> Bool
nullFS f = n_bytes f == 0
@@
-415,6
+431,15
@@
uniqueOfFS (FastString (I# u#) _ _ _ _) = u#
nilFS = mkFastString ""
-- -----------------------------------------------------------------------------
nilFS = mkFastString ""
-- -----------------------------------------------------------------------------
+-- Stats
+
+getFastStringTable :: IO [[FastString]]
+getFastStringTable = do
+ tbl <- readIORef string_table
+ buckets <- mapM (lookupTbl tbl) [0 .. hASH_TBL_SIZE]
+ return buckets
+
+-- -----------------------------------------------------------------------------
-- Outputting 'FastString's
-- |Outputs a 'FastString' with /no decoding at all/, that is, you
-- Outputting 'FastString's
-- |Outputs a 'FastString' with /no decoding at all/, that is, you