on master help sign in
Fix problem in generating pattern matching code for records
78c6db6Evan Czaplicki
compiler/Generate/Cases.hs+1−1
@@ -14,7 +14,7 @@ import Transform.Substitute
14
14
15caseToMatch patterns = do
15caseToMatch patterns = do
16 v <- newVar
16 v <- newVar
17− match [v] (map (first (:[])) patterns) Fail
17+ (,) v `liftM` match [v] (map (first (:[])) patterns) Fail
18
18
19newVar = do n <- guid
19newVar = do n <- guid
20 return $ "case" ++ show n
20 return $ "case" ++ show n
compiler/Generate/JavaScript.hs+5−6
@@ -270,14 +270,13 @@ jsLet (defs,e') = do ds <- mapM toJS defs
270 return $ jsFunc "" (concat ds ++ ret e) ++ "()"
270 return $ jsFunc "" (concat ds ++ ret e) ++ "()"
271
271
272caseToJS span e ps = do
272caseToJS span e ps = do
273− match <- caseToMatch ps
273+ (tempVar,match) <- caseToMatch ps
274 e' <- toJS' e
274 e' <- toJS' e
275− let (match',stmt) = case (match,e) of
275+ let (match',stmt) = case e of
276− (Match name _ _, L _ (Var x)) -> (matchSubst [(name,deprime x)] match, "")
276+ L _ (Var x) -> (matchSubst [(tempVar,deprime x)] match, "")
277− (Match name _ _, _) -> (match, assign name e')
277+ _ -> (match, assign tempVar e')
278− _ -> (match, "")
279 matches <- matchToJS span match'
278 matches <- matchToJS span match'
280− return $ "function(){ " ++ stmt ++ matches ++ " }()"
279+ return $ jsFunc "" (stmt ++ matches) ++ "()"
281
280
282matchToJS span match =
281matchToJS span match =
283 case match of
282 case match of