summaryrefslogtreecommitdiff
path: root/src/compiler/GF/Infra
diff options
context:
space:
mode:
authorhallgren <hallgren@chalmers.se>2013-09-19 18:23:47 +0000
committerhallgren <hallgren@chalmers.se>2013-09-19 18:23:47 +0000
commit3d5b9bd1fd46a51651cbfbd45f03e5b878aebbac (patch)
tree24e9cae9268da60b1a0d633ab4d9f970deee3905 /src/compiler/GF/Infra
parentc08f42ce9f1a0dc123896a8c94da24bb19756141 (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.hs25
-rw-r--r--src/compiler/GF/Infra/Option.hs4
-rw-r--r--src/compiler/GF/Infra/UseIO.hs1
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