git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Fix error in code gen for pattern matches on data constructors #148
commit3ab225e37e9aeda48b0e24b70ac02cbe6419a4d1 authorPhil Freeman <paf31@cantab.net> dateWed 29 Jan 2014, 19:45 (13 years ago) parentc44e5ce
2 files changed+9−11
examples/passing/DataImport.purs+6−9 src/Language/PureScript/CodeGen/JS.hs+3−2
examples/passing/DataImport.purs+6−9
@@ -1,16 +1,13 @@
11module M1 where
22
3−data Test = Test
3+data Test = Test String
44
5−module M2 where
5+module Main where
66
77import M1
88
9−test :: Test -> M1.Test
10−test t = t
11−
12−testCtor = Test
13−
14−module Main where
9+unTest (Test s) = s
1510
16−main = Trace.trace "Done"
11+main = do
12+ let x = unTest (Test "Done")
13+ Trace.trace x
src/Language/PureScript/CodeGen/JS.hs+3−2
@@ -41,6 +41,7 @@ import Language.PureScript.Options
4141import Language.PureScript.CodeGen.JS.AST as AST
4242import Language.PureScript.Types
4343import Language.PureScript.CodeGen.Optimize
44+import Language.PureScript.TypeChecker.Monad (canonicalizeType)
4445
4546-- |
4647-- 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) =
198199 then
199200 return done
200201 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]
202203binderToJs m e varName done (UnaryBinder ctor b) = do
203204 value <- fresh
204205 js <- binderToJs m e value done b
@@ -207,7 +208,7 @@ binderToJs m e varName done (UnaryBinder ctor b) = do
207208 then
208209 return [success]
209210 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))))
211212 success
212213 Nothing]
213214binderToJs m e varName done (ObjectBinder bs) = go done bs