on master help sign in
Stop permitting JSNumber, JSString, etc. through ports because they no longer exist
commitd80f00e767c1330a2e4e5b9348a946bde47414de authorEvan Czaplicki <info@elm-lang.org> dateFri 21 Feb 2014, 16:58 (13 years ago) parent26fbc55
2 files changed+12−23
compiler/Generate/JavaScript/Ports.hs+7−13 compiler/Type/ExtraChecks.hs+5−10
compiler/Generate/JavaScript/Ports.hs+7−13
@@ -36,16 +36,12 @@ inc tipe x =
3636 Lambda _ _ -> error "functions should not be allowed through input ports"
3737 Var _ -> error "type variables should not be allowed through input ports"
3838 Data ctor []
39− | ctor == "Int" -> elm JSNumber
40− | ctor == "Float" -> elm JSNumber
41− | ctor == "Bool" -> elm JSBoolean
42− | ctor == "String" -> elm JSString
43− | ctor == "JavaScript.JSNumber" -> js JSNumber
44− | ctor == "JavaScript.JSBool" -> js JSBoolean
45− | ctor == "JavaScript.JSString" -> js JSString
39+ | ctor == "Int" -> from JSNumber
40+ | ctor == "Float" -> from JSNumber
41+ | ctor == "Bool" -> from JSBoolean
42+ | ctor == "String" -> from JSString
4643 where
47− elm checks = check x checks (obj ("_J.to" ++ ctor) <| x)
48− js checks = check x checks x
44+ from checks = check x checks (obj ("_J.to" ++ ctor) <| x)
4945
5046 Data ctor [t]
5147 | ctor == "Maybe.Maybe" ->
@@ -104,10 +100,8 @@ out tipe x =
104100
105101 Var _ -> error "type variables should not be allowed through input ports"
106102 Data ctor []
107− | ctor `elem` ["Int","Float","Bool","String"] -> obj ("_J.from" ++ ctor) <| x
108− | ctor `elem` jsPrims -> x
109− where
110− jsPrims = map ("JavaScript.JS"++) ["Number","Bool","String"]
103+ | ctor `elem` ["Int","Float","Bool","String"] ->
104+ obj ("_J.from" ++ ctor) <| x
111105
112106 Data ctor [t]
113107 | ctor == "Maybe.Maybe" ->
compiler/Type/ExtraChecks.hs+5−10
@@ -8,7 +8,6 @@ module Type.ExtraChecks (mainType, occurs, portTypes) where
88
99import Control.Applicative ((<$>),(<*>))
1010import Control.Monad.State
11−import qualified Data.List as List
1211import qualified Data.Map as Map
1312import qualified Data.Traversable as Traverse
1413import qualified Data.UnionFind.IO as UF
@@ -56,9 +55,13 @@ portTypes rules expr =
5655 isValid isTopLevel seenFunc seenSignal direction name tipe =
5756 case tipe of
5857 ST.Data ctor ts
59− | isJs ctor || isElm ctor -> mapM_ valid ts
58+ | validConstructor -> mapM_ valid ts
6059 | ctor == "Signal.Signal" -> handleSignal ts
6160 | otherwise -> err' True "an unsupported type"
61+ where
62+ validConstructor =
63+ ctor `elem` ["Int","Float","String","Bool","Maybe.Maybe","_List"]
64+ || Help.isTuple ctor
6265
6366 ST.Var _ -> err "free type variables"
6467
@@ -80,14 +83,6 @@ portTypes rules expr =
8083 isValid' = isValid False
8184 valid = isValid' seenFunc seenSignal direction name
8285
83− isJs ctor =
84− List.isPrefixOf "JavaScript." ctor
85− && length (filter (=='.') ctor) == 1
86−
87− isElm ctor =
88− ctor `elem` ["Int","Float","String","Bool","Maybe.Maybe","_List"]
89− || Help.isTuple ctor
90−
9186 handleSignal ts
9287 | seenFunc = err "functions that involve signals"
9388 | seenSignal = err "signals-of-signals"