on master help sign in
Merge pull request #439 from maxsnew/safeNames

Hack to make imported names safe.

commit56c4fb936d1772222f5f2d5796f250e53d30ce34 authorEvan Czaplicki <info@elm-lang.org> dateTue 28 Jan 2014, 06:11 (13 years ago) parent007ea7153c2ab1
3 files changed+19−6
compiler/Generate/JavaScript.hs+2−2 compiler/SourceSyntax/Helpers.hs+9 compiler/Transform/SafeNames.hs+8−4
compiler/Generate/JavaScript.hs+2−2
@@ -311,7 +311,7 @@ generate unsafeModule =
311311
312312 jsImport modul = setup Nothing path ++ [ include ]
313313 where
314− path = split modul
314+ path = Help.splitDots modul
315315 include = assign path $ dotSep ("Elm" : path ++ ["make"]) <| ref "_elm"
316316
317317 setup namespace path = map create paths
@@ -351,7 +351,7 @@ binop span op e1 e2 =
351351 func | Help.isOp operator = BracketRef () (dotSep (init parts ++ ["_op"])) (string operator)
352352 | otherwise = dotSep parts
353353 where
354− parts = split op
354+ parts = Help.splitDots op
355355 operator = last parts
356356
357357 opDict = Map.fromList (infixOps ++ specialOps)
compiler/SourceSyntax/Helpers.hs+9
@@ -3,6 +3,15 @@ module SourceSyntax.Helpers where
33
44import qualified Data.Char as Char
55
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+
615brkt :: String -> String
716brkt s = "{ " ++ s ++ " }"
817
compiler/Transform/SafeNames.hs+8−4
@@ -1,16 +1,20 @@
11{-# OPTIONS_GHC -Wall #-}
22module Transform.SafeNames (metadataModule) where
33
4−import Control.Arrow (first, (***))
4+import Control.Arrow (first, (***))
5+import Data.List (intercalate)
6+
7+import qualified Data.Set as Set
8+
9+import qualified Parse.Helpers as PHelp
510import SourceSyntax.Expression
11+import qualified SourceSyntax.Helpers as SHelp
612import SourceSyntax.Location
713import SourceSyntax.Module
814import SourceSyntax.Pattern
9−import qualified Data.Set as Set
10−import qualified Parse.Helpers as PHelp
1115
1216var :: String -> String
13−var = dereserve . deprime
17+var = intercalate "." . map (dereserve . deprime) . SHelp.splitDots
1418 where
1519 deprime = map (\c -> if c == '\'' then '$' else c)
1620 dereserve x = case Set.member x PHelp.jsReserveds of