on master help sign in
Move splitDots and prevent a non-exhaustive pattern match warning
53c2ab1Max New
compiler/Generate/JavaScript.hs+2−3
@@ -12,7 +12,6 @@ import Generate.JavaScript.Helpers
12import qualified Generate.Cases as Case
12import qualified Generate.Cases as Case
13import qualified Generate.JavaScript.Ports as Port
13import qualified Generate.JavaScript.Ports as Port
14import qualified Generate.Markdown as MD
14import qualified Generate.Markdown as MD
15−import qualified Parse.Helpers as PHelp
16import qualified SourceSyntax.Helpers as Help
15import qualified SourceSyntax.Helpers as Help
17import SourceSyntax.Literal
16import SourceSyntax.Literal
18import SourceSyntax.Pattern as Pattern
17import SourceSyntax.Pattern as Pattern
@@ -312,7 +311,7 @@ generate unsafeModule =
312
311
313 jsImport modul = setup Nothing path ++ [ include ]
312 jsImport modul = setup Nothing path ++ [ include ]
314 where
313 where
315− path = PHelp.splitDots modul
314+ path = Help.splitDots modul
316 include = assign path $ dotSep ("Elm" : path ++ ["make"]) <| ref "_elm"
315 include = assign path $ dotSep ("Elm" : path ++ ["make"]) <| ref "_elm"
317
316
318 setup namespace path = map create paths
317 setup namespace path = map create paths
@@ -352,7 +351,7 @@ binop span op e1 e2 =
352 func | Help.isOp operator = BracketRef () (dotSep (init parts ++ ["_op"])) (string operator)
351 func | Help.isOp operator = BracketRef () (dotSep (init parts ++ ["_op"])) (string operator)
353 | otherwise = dotSep parts
352 | otherwise = dotSep parts
354 where
353 where
355− parts = PHelp.splitDots op
354+ parts = Help.splitDots op
356 operator = last parts
355 operator = last parts
357
356
358 opDict = Map.fromList (infixOps ++ specialOps)
357 opDict = Map.fromList (infixOps ++ specialOps)
compiler/Parse/Helpers.hs−10
@@ -18,16 +18,6 @@ import SourceSyntax.Expression
18import SourceSyntax.PrettyPrint
18import SourceSyntax.PrettyPrint
19import SourceSyntax.Declaration (Assoc)
19import SourceSyntax.Declaration (Assoc)
20
20
21−splitDots :: String -> [String]
22−splitDots = go []
23− where
24− go vars str =
25− case break (=='.') str of
26− (x,'.':rest) | Help.isOp x -> vars ++ [x ++ '.' : rest]
27− | otherwise -> go (vars ++ [x]) rest
28− (x,[]) -> vars ++ [x]
29−
30−
31reserveds = [ "if", "then", "else"
21reserveds = [ "if", "then", "else"
32 , "case", "of"
22 , "case", "of"
33 , "let", "in"
23 , "let", "in"
compiler/SourceSyntax/Helpers.hs+9
@@ -3,6 +3,15 @@ module SourceSyntax.Helpers where
3
3
4import qualified Data.Char as Char
4import qualified Data.Char as Char
5
5
6+splitDots :: String -> [String]
7+splitDots = go []
8+ where
9+ go vars str =
10+ case break (=='.') str of
11+ (x,_:rest) | isOp x -> vars ++ [x ++ '.' : rest]
12+ | otherwise -> go (vars ++ [x]) rest
13+ (x,[]) -> vars ++ [x]
14+
6brkt :: String -> String
15brkt :: String -> String
7brkt s = "{ " ++ s ++ " }"
16brkt s = "{ " ++ s ++ " }"
8
17
compiler/Transform/SafeNames.hs+3−2
@@ -5,15 +5,16 @@ import Control.Arrow (first, (***))
5import Data.List (intercalate)
5import Data.List (intercalate)
6
6
7import qualified Data.Set as Set
7import qualified Data.Set as Set
8−import qualified Parse.Helpers as PHelp
9
8
9+import qualified Parse.Helpers as PHelp
10import SourceSyntax.Expression
10import SourceSyntax.Expression
11+import qualified SourceSyntax.Helpers as SHelp
11import SourceSyntax.Location
12import SourceSyntax.Location
12import SourceSyntax.Module
13import SourceSyntax.Module
13import SourceSyntax.Pattern
14import SourceSyntax.Pattern
14
15
15var :: String -> String
16var :: String -> String
16−var = intercalate "." . map (dereserve . deprime) . PHelp.splitDots
17+var = intercalate "." . map (dereserve . deprime) . SHelp.splitDots
17 where
18 where
18 deprime = map (\c -> if c == '\'' then '$' else c)
19 deprime = map (\c -> if c == '\'' then '$' else c)
19 dereserve x = case Set.member x PHelp.jsReserveds of
20 dereserve x = case Set.member x PHelp.jsReserveds of