on master help sign in
squash potential space leaks by using strict foldl
8af32d4raichoo
src/Core/CoreParser.hs+1−1
@@ -466,7 +466,7 @@ idrisMakeTokenParser languageDef
466
466
467 number base baseDigit
467 number base baseDigit
468 = do{ digits <- many1 baseDigit
468 = do{ digits <- many1 baseDigit
469− ; let n = foldl (\x d -> base*x + toInteger (digitToInt d)) 0 digits
469+ ; let n = foldl' (\x d -> base*x + toInteger (digitToInt d)) 0 digits
470 ; seq n (return n)
470 ; seq n (return n)
471 }
471 }
472
472
src/IRTS/CodegenJava.hs+4−4
@@ -15,7 +15,7 @@ import qualified Control.Monad.Trans as T
15import Control.Monad.Trans.State
15import Control.Monad.Trans.State
16import Data.Char
16import Data.Char
17import Data.Maybe (fromJust)
17import Data.Maybe (fromJust)
18−import Data.List (isPrefixOf, isSuffixOf, intercalate)
18+import Data.List (isPrefixOf, isSuffixOf, intercalate, foldl')
19import qualified Data.Text as T
19import qualified Data.Text as T
20import qualified Data.Text.IO as TIO
20import qualified Data.Text.IO as TIO
21import Language.Java.Parser
21import Language.Java.Parser
@@ -255,7 +255,7 @@ mkMainMethod =
255 )
255 )
256
256
257mergeInnerClasses :: [Decl] -> [Decl]
257mergeInnerClasses :: [Decl] -> [Decl]
258−mergeInnerClasses = foldl mergeInner []
258+mergeInnerClasses = foldl' mergeInner []
259 where
259 where
260 mergeInner ((decl@(MemberDecl (MemberClassDecl (ClassDecl priv name targs ext imp (ClassBody body))))):decls)
260 mergeInner ((decl@(MemberDecl (MemberClassDecl (ClassDecl priv name targs ext imp (ClassBody body))))):decls)
261 decl'@(MemberDecl (MemberClassDecl (ClassDecl _ name' _ ext' imp' (ClassBody body'))))
261 decl'@(MemberDecl (MemberClassDecl (ClassDecl _ name' _ ext' imp' (ClassBody body'))))
@@ -1480,7 +1480,7 @@ mkExp (SOp LB64Minus args) = mkBinOpExp longType Sub args
1480mkExp (SOp LB64Times args) = mkBinOpExp longType Mult args
1480mkExp (SOp LB64Times args) = mkBinOpExp longType Mult args
1481mkExp (SOp LB64UDiv (arg:args)) = do
1481mkExp (SOp LB64UDiv (arg:args)) = do
1482 (arg:args) <- mapM (mkVarAccess (Just longType)) (arg:args)
1482 (arg:args) <- mapM (mkVarAccess (Just longType)) (arg:args)
1483− return $ foldl (\ exp arg ->
1483+ return $ foldl' (\ exp arg ->
1484 MethodInv $ PrimaryMethodCall
1484 MethodInv $ PrimaryMethodCall
1485 ( MethodInv $ PrimaryMethodCall
1485 ( MethodInv $ PrimaryMethodCall
1486 ( MethodInv $ TypeMethodCall (J.Name [Ident "BigInteger"])
1486 ( MethodInv $ TypeMethodCall (J.Name [Ident "BigInteger"])
@@ -1505,7 +1505,7 @@ mkExp (SOp LB64UDiv (arg:args)) = do
1505mkExp (SOp LB64SDiv args) = mkBinOpExp longType Div args
1505mkExp (SOp LB64SDiv args) = mkBinOpExp longType Div args
1506mkExp (SOp LB64URem (arg:args)) = do
1506mkExp (SOp LB64URem (arg:args)) = do
1507 (arg:args) <- mapM (mkVarAccess (Just longType)) (arg:args)
1507 (arg:args) <- mapM (mkVarAccess (Just longType)) (arg:args)
1508− return $ foldl (\ exp arg ->
1508+ return $ foldl' (\ exp arg ->
1509 MethodInv $ PrimaryMethodCall
1509 MethodInv $ PrimaryMethodCall
1510 ( MethodInv $ PrimaryMethodCall
1510 ( MethodInv $ PrimaryMethodCall
1511 ( MethodInv $ TypeMethodCall (J.Name [Ident "BigInteger"])
1511 ( MethodInv $ TypeMethodCall (J.Name [Ident "BigInteger"])
src/Idris/AbsSyntaxTree.hs+2−2
@@ -887,10 +887,10 @@ prettyImp impl = prettySe 10
887 bracket p 1 $
887 bracket p 1 $
888 prettySe 1 f <+>
888 prettySe 1 f <+>
889 if impl then
889 if impl then
890− foldl fS empty as
890+ foldl' fS empty as
891 -- foldr (<+>) empty $ map prettyArgS as
891 -- foldr (<+>) empty $ map prettyArgS as
892 else
892 else
893− foldl fSe empty args
893+ foldl' fSe empty args
894 -- foldr (<+>) empty $ map prettyArgSe args
894 -- foldr (<+>) empty $ map prettyArgSe args
895 where
895 where
896 fS l r =
896 fS l r =
src/Idris/Parser.hs+1−1
@@ -274,7 +274,7 @@ pfc = do s <- getPosition
274pImport :: IParser String
274pImport :: IParser String
275pImport = do reserved "import"; f <- identifier; option ';' (lchar ';')
275pImport = do reserved "import"; f <- identifier; option ';' (lchar ';')
276 return (toPath f)
276 return (toPath f)
277− where toPath n = foldl1 (</>) $ splitOn "." n
277+ where toPath n = foldl1' (</>) $ splitOn "." n
278
278
279-- | A program is a list of declarations, possibly with associated
279-- | A program is a list of declarations, possibly with associated
280-- documentation strings.
280-- documentation strings.
src/Idris/REPLParser.hs+1−1
@@ -66,7 +66,7 @@ pCmd = try (do cmd ["q", "quit"]; eof; return Quit)
66 <|> do t <- pFullExpr defaultSyntax; return (Eval t)
66 <|> do t <- pFullExpr defaultSyntax; return (Eval t)
67 <|> do eof; return NOP
67 <|> do eof; return NOP
68
68
69− where toPath n = foldl1 (</>) $ splitOn "." n
69+ where toPath n = foldl1' (</>) $ splitOn "." n
70
70
71pOption :: IParser Opt
71pOption :: IParser Opt
72pOption = do discard (symbol "errorcontext"); return ErrContext
72pOption = do discard (symbol "errorcontext"); return ErrContext
src/Pkg/Package.hs+3−3
@@ -71,7 +71,7 @@ buildMods :: [Opt] -> [Name] -> IO ()
71buildMods opts ns = do let f = map (toPath . show) ns
71buildMods opts ns = do let f = map (toPath . show) ns
72 idris (map Filename f ++ opts)
72 idris (map Filename f ++ opts)
73 return ()
73 return ()
74− where toPath n = foldl1 (</>) $ splitOn "." n
74+ where toPath n = foldl1' (</>) $ splitOn "." n
75
75
76testLib :: Bool -> String -> String -> IO Bool
76testLib :: Bool -> String -> String -> IO Bool
77testLib warn p f
77testLib warn p f
@@ -93,7 +93,7 @@ rmIBC :: Name -> IO ()
93rmIBC m = rmFile $ toIBCFile m
93rmIBC m = rmFile $ toIBCFile m
94
94
95toIBCFile (UN n) = n ++ ".ibc"
95toIBCFile (UN n) = n ++ ".ibc"
96−toIBCFile (NS n ns) = foldl1 (</>) (reverse (toIBCFile n : ns))
96+toIBCFile (NS n ns) = foldl1' (</>) (reverse (toIBCFile n : ns))
97
97
98installIBC :: String -> Name -> IO ()
98installIBC :: String -> Name -> IO ()
99installIBC p m = do let f = toIBCFile m
99installIBC p m = do let f = toIBCFile m
@@ -105,7 +105,7 @@ installIBC p m = do let f = toIBCFile m
105 copyFile f (destdir </> takeFileName f)
105 copyFile f (destdir </> takeFileName f)
106 return ()
106 return ()
107 where getDest (UN n) = ""
107 where getDest (UN n) = ""
108− getDest (NS n ns) = foldl1 (</>) (reverse (getDest n : ns))
108+ getDest (NS n ns) = foldl1' (</>) (reverse (getDest n : ns))
109
109
110installObj :: String -> String -> IO ()
110installObj :: String -> String -> IO ()
111installObj p o = do d <- getDataDir
111installObj p o = do d <- getDataDir