git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Fix error in code gen for pattern matches on data constructors #148
3ab225ePhil Freeman
examples/passing/DataImport.purs+6−9
@@ -1,16 +1,13 @@
1module M1 where
1module M1 where
2
2
3−data Test = Test
3+data Test = Test String
4
4
5−module M2 where
5+module Main where
6
6
7import M1
7import M1
8
8
9−test :: Test -> M1.Test
9+unTest (Test s) = s
10−test t = t
11−
12−testCtor = Test
13−
14−module Main where
15
10
11+main = do
12+ let x = unTest (Test "Done")
16−main = Trace.trace "Done"
13+ Trace.trace x
src/Language/PureScript/CodeGen/JS.hs+3−2
@@ -41,6 +41,7 @@ import Language.PureScript.Options
41import Language.PureScript.CodeGen.JS.AST as AST
41import Language.PureScript.CodeGen.JS.AST as AST
42import Language.PureScript.Types
42import Language.PureScript.Types
43import Language.PureScript.CodeGen.Optimize
43import Language.PureScript.CodeGen.Optimize
44+import Language.PureScript.TypeChecker.Monad (canonicalizeType)
44
45
45-- |
46-- |
46-- Generate code in the simplified Javascript intermediate representation for all declarations in a module
47-- Generate code in the simplified Javascript intermediate representation for all declarations in a module
@@ -198,7 +199,7 @@ binderToJs m e varName done (NullaryBinder ctor) =
198 then
199 then
199 return done
200 return done
200 else
201 else
201− return [JSIfElse (JSBinary EqualTo (JSAccessor "ctor" (JSVar varName)) (JSStringLiteral (show ((\(mp, nm) -> Qualified (Just mp) nm) $ qualify m ctor)))) (JSBlock done) Nothing]
202+ return [JSIfElse (JSBinary EqualTo (JSAccessor "ctor" (JSVar varName)) (JSStringLiteral (show ((\(mp, nm) -> Qualified (Just mp) nm) $ canonicalizeType m e ctor)))) (JSBlock done) Nothing]
202binderToJs m e varName done (UnaryBinder ctor b) = do
203binderToJs m e varName done (UnaryBinder ctor b) = do
203 value <- fresh
204 value <- fresh
204 js <- binderToJs m e value done b
205 js <- binderToJs m e value done b
@@ -207,7 +208,7 @@ binderToJs m e varName done (UnaryBinder ctor b) = do
207 then
208 then
208 return [success]
209 return [success]
209 else
210 else
210− return [JSIfElse (JSBinary EqualTo (JSAccessor "ctor" (JSVar varName)) (JSStringLiteral (show ((\(mp, nm) -> Qualified (Just mp) nm) $ qualify m ctor))))
211+ return [JSIfElse (JSBinary EqualTo (JSAccessor "ctor" (JSVar varName)) (JSStringLiteral (show ((\(mp, nm) -> Qualified (Just mp) nm) $ canonicalizeType m e ctor))))
211 success
212 success
212 Nothing]
213 Nothing]
213binderToJs m e varName done (ObjectBinder bs) = go done bs
214binderToJs m e varName done (ObjectBinder bs) = go done bs