on master help sign in
Fix #209, bad JS generation for primes in patterns
commitbc0c6a441073b3fac504cf9c192d9ec47c2c1685 authorEvan Czaplicki <info@elm-lang.org> dateTue 13 Aug 2013, 18:10 (13 years ago) parent3d36846
2 files changed+7−7
compiler/Generate/Cases.hs+6−3 compiler/Generate/JavaScript.hs+1−4
compiler/Generate/Cases.hs+6−3
@@ -1,4 +1,4 @@
1−module Generate.Cases (caseToMatch, Match (..), Clause (..), matchSubst) where
1+module Generate.Cases (caseToMatch, Match (..), Clause (..), matchSubst, deprime) where
22
33import Control.Arrow (first)
44import Control.Monad (liftM,foldM)
@@ -12,6 +12,9 @@ import SourceSyntax.Pattern
1212import SourceSyntax.Expression
1313import Transform.Substitute
1414
15+deprime :: String -> String
16+deprime = map (\c -> if c == '\'' then '$' else c)
17+
1518caseToMatch patterns = do
1619 v <- newVar
1720 (,) v `liftM` match [v] (map (first (:[])) patterns) Fail
@@ -65,7 +68,7 @@ match vs@(v:_) cs def
6568
6669dealias v c@(p:ps, L s e) =
6770 case p of
68− PAlias x pattern -> (pattern:ps, L s $ subst x (Var v) e)
71+ PAlias x pattern -> (pattern:ps, L s $ subst (deprime x) (Var v) e)
6972 _ -> c
7073
7174matchVar :: [String] -> [([Pattern],LExpr t v)] -> Match t v
@@ -76,7 +79,7 @@ matchVar (v:vs) cs def = match vs (map subVar cs) def
7679 where
7780 subOnePattern pattern e =
7881 case pattern of
79− PVar x -> subst x (Var v) e
82+ PVar x -> subst (deprime x) (Var v) e
8083 PAnything -> e
8184 PRecord fs ->
8285 foldr (\x -> subst x (Access (L s (Var v)) x)) e fs
compiler/Generate/JavaScript.hs+1−4
@@ -10,14 +10,11 @@ import Data.Either (partitionEithers)
1010import qualified Text.Pandoc as Pan
1111
1212import Unique
13−import Generate.Cases
13+import Generate.Cases (caseToMatch, deprime, matchSubst, Match(..), Clause(..))
1414import SourceSyntax.Everything
1515import SourceSyntax.Location
1616import qualified Transform.SortDefinitions as SD
1717
18−deprime :: String -> String
19−deprime = map (\c -> if c == '\'' then '$' else c)
20−
2118indent = concatMap f
2219 where f '\n' = "\n "
2320 f c = [c]