diff options
| author | hallgren <hallgren@chalmers.se> | 2013-09-19 18:23:47 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2013-09-19 18:23:47 +0000 |
| commit | 3d5b9bd1fd46a51651cbfbd45f03e5b878aebbac (patch) | |
| tree | 24e9cae9268da60b1a0d633ab4d9f970deee3905 /src/compiler/GF/Infra | |
| parent | c08f42ce9f1a0dc123896a8c94da24bb19756141 (diff) | |
Make Ident abstract; imports of Data.ByteString.Char8 down from 29 to 16 modules
Most of the explicit uses of ByteStrings were eliminated by using identS,
identS = identC . BS.pack
which was found in GF.Grammar.CF and moved to GF.Infra.Ident. The function
prefixIdent :: String -> Ident -> Ident
allowed one additional import of ByteString to be eliminated. The functions
isArgIdent :: Ident -> Bool
getArgIndex :: Ident -> Maybe Int
were needed to eliminate explicit pattern matching on Ident from two modules.
Diffstat (limited to 'src/compiler/GF/Infra')
| -rw-r--r-- | src/compiler/GF/Infra/Ident.hs | 25 | ||||
| -rw-r--r-- | src/compiler/GF/Infra/Option.hs | 4 | ||||
| -rw-r--r-- | src/compiler/GF/Infra/UseIO.hs | 1 |
3 files changed, 23 insertions, 7 deletions
diff --git a/src/compiler/GF/Infra/Ident.hs b/src/compiler/GF/Infra/Ident.hs index 967945be9..bb26ea98c 100644 --- a/src/compiler/GF/Infra/Ident.hs +++ b/src/compiler/GF/Infra/Ident.hs @@ -13,9 +13,10 @@ ----------------------------------------------------------------------------- module GF.Infra.Ident (-- * Identifiers - Ident(..), ident2bs, showIdent, ppIdent, - identC, identV, identA, identAV, identW, - argIdent, varStr, varX, isWildIdent, varIndex, + Ident, ident2bs, showIdent, ppIdent, prefixIdent, + identS, identC, identV, identA, identAV, identW, + argIdent, isArgIdent, getArgIndex, + varStr, varX, isWildIdent, varIndex, -- * refreshing identifiers IdState, initIdStateN, initIdState, lookVar, refVar, refVarPlus @@ -23,6 +24,7 @@ module GF.Infra.Ident (-- * Identifiers import GF.Data.Operations import qualified Data.ByteString.Char8 as BS +import Data.Char(isDigit) import Text.PrettyPrint @@ -54,6 +56,9 @@ showIdent i = BS.unpack $! ident2bs i ppIdent :: Ident -> Doc ppIdent = text . showIdent +identS :: String -> Ident +identS = identC . BS.pack + identC :: BS.ByteString -> Ident identV :: BS.ByteString -> Int -> Ident identA :: BS.ByteString -> Int -> Ident @@ -62,6 +67,10 @@ identW :: Ident (identC, identV, identA, identAV, identW) = (IC, IV, IA, IAV, IW) + +prefixIdent :: String -> Ident -> Ident +prefixIdent pref = identC . BS.append (BS.pack pref) . ident2bs + -- normal identifier -- ident s = IC s @@ -70,6 +79,16 @@ argIdent :: Int -> Ident -> Int -> Ident argIdent 0 (IC c) i = identA c i argIdent b (IC c) i = identAV c b i +isArgIdent IA{} = True +isArgIdent IAV{} = True +isArgIdent _ = False + +getArgIndex (IA _ i) = Just i +getArgIndex (IAV _ _ i) = Just i +getArgIndex (IC s) + | isDigit (BS.last s) = (Just . read . BS.unpack . snd . BS.spanEnd isDigit) s +getArgIndex x = Nothing + -- | used in lin defaults varStr :: Ident varStr = identA (BS.pack "str") 0 diff --git a/src/compiler/GF/Infra/Option.hs b/src/compiler/GF/Infra/Option.hs index c4aecae23..554468783 100644 --- a/src/compiler/GF/Infra/Option.hs +++ b/src/compiler/GF/Infra/Option.hs @@ -42,8 +42,6 @@ import GF.Data.ErrM import Data.Set (Set) import qualified Data.Set as Set -import qualified Data.ByteString.Char8 as BS - usageHeader :: String @@ -398,7 +396,7 @@ optDescr = Just p -> set $ \o -> o { optHaskellOptions = Set.insert p (optHaskellOptions o) } Nothing -> fail $ "Unknown Haskell option: " ++ x ++ " Known: " ++ show (map fst haskellOptionNames) - literalCat x = set $ \o -> o { optLiteralCats = foldr Set.insert (optLiteralCats o) ((map (identC . BS.pack) . splitBy (==',')) x) } + literalCat x = set $ \o -> o { optLiteralCats = foldr Set.insert (optLiteralCats o) ((map identS . splitBy (==',')) x) } lexicalCat x = set $ \o -> o { optLexicalCats = foldr Set.insert (optLexicalCats o) (splitBy (==',') x) } outDir x = set $ \o -> o { optOutputDir = Just x } gfLibPath x = set $ \o -> o { optGFLibPath = Just x } diff --git a/src/compiler/GF/Infra/UseIO.hs b/src/compiler/GF/Infra/UseIO.hs index 2fdc42d83..140c2623f 100644 --- a/src/compiler/GF/Infra/UseIO.hs +++ b/src/compiler/GF/Infra/UseIO.hs @@ -34,7 +34,6 @@ import Text.Printf import Control.Monad import Control.Monad.Trans(MonadIO(..)) import Control.Exception(evaluate) -import qualified Data.ByteString.Char8 as BS putShow' :: Show a => (c -> a) -> c -> IO () putShow' f = putStrLn . show . length . show . f |
