on master help sign in
Stop permitting JSNumber, JSString, etc. through ports because they no longer exist
d80f00eEvan Czaplicki
compiler/Generate/JavaScript/Ports.hs+7−13
@@ -36,16 +36,12 @@ inc tipe x =
36 Lambda _ _ -> error "functions should not be allowed through input ports"
36 Lambda _ _ -> error "functions should not be allowed through input ports"
37 Var _ -> error "type variables should not be allowed through input ports"
37 Var _ -> error "type variables should not be allowed through input ports"
38 Data ctor []
38 Data ctor []
39− | ctor == "Int" -> elm JSNumber
39+ | ctor == "Int" -> from JSNumber
40− | ctor == "Float" -> elm JSNumber
40+ | ctor == "Float" -> from JSNumber
41− | ctor == "Bool" -> elm JSBoolean
41+ | ctor == "Bool" -> from JSBoolean
42− | ctor == "String" -> elm JSString
42+ | ctor == "String" -> from JSString
43− | ctor == "JavaScript.JSNumber" -> js JSNumber
44− | ctor == "JavaScript.JSBool" -> js JSBoolean
45− | ctor == "JavaScript.JSString" -> js JSString
46 where
43 where
47− elm checks = check x checks (obj ("_J.to" ++ ctor) <| x)
44+ from checks = check x checks (obj ("_J.to" ++ ctor) <| x)
48− js checks = check x checks x
49
45
50 Data ctor [t]
46 Data ctor [t]
51 | ctor == "Maybe.Maybe" ->
47 | ctor == "Maybe.Maybe" ->
@@ -104,10 +100,8 @@ out tipe x =
104
100
105 Var _ -> error "type variables should not be allowed through input ports"
101 Var _ -> error "type variables should not be allowed through input ports"
106 Data ctor []
102 Data ctor []
107− | ctor `elem` ["Int","Float","Bool","String"] -> obj ("_J.from" ++ ctor) <| x
103+ | ctor `elem` ["Int","Float","Bool","String"] ->
108− | ctor `elem` jsPrims -> x
104+ obj ("_J.from" ++ ctor) <| x
109− where
110− jsPrims = map ("JavaScript.JS"++) ["Number","Bool","String"]
111
105
112 Data ctor [t]
106 Data ctor [t]
113 | ctor == "Maybe.Maybe" ->
107 | ctor == "Maybe.Maybe" ->
compiler/Type/ExtraChecks.hs+5−10
@@ -8,7 +8,6 @@ module Type.ExtraChecks (mainType, occurs, portTypes) where
8
8
9import Control.Applicative ((<$>),(<*>))
9import Control.Applicative ((<$>),(<*>))
10import Control.Monad.State
10import Control.Monad.State
11−import qualified Data.List as List
12import qualified Data.Map as Map
11import qualified Data.Map as Map
13import qualified Data.Traversable as Traverse
12import qualified Data.Traversable as Traverse
14import qualified Data.UnionFind.IO as UF
13import qualified Data.UnionFind.IO as UF
@@ -56,9 +55,13 @@ portTypes rules expr =
56 isValid isTopLevel seenFunc seenSignal direction name tipe =
55 isValid isTopLevel seenFunc seenSignal direction name tipe =
57 case tipe of
56 case tipe of
58 ST.Data ctor ts
57 ST.Data ctor ts
59− | isJs ctor || isElm ctor -> mapM_ valid ts
58+ | validConstructor -> mapM_ valid ts
60 | ctor == "Signal.Signal" -> handleSignal ts
59 | ctor == "Signal.Signal" -> handleSignal ts
61 | otherwise -> err' True "an unsupported type"
60 | otherwise -> err' True "an unsupported type"
61+ where
62+ validConstructor =
63+ ctor `elem` ["Int","Float","String","Bool","Maybe.Maybe","_List"]
64+ || Help.isTuple ctor
62
65
63 ST.Var _ -> err "free type variables"
66 ST.Var _ -> err "free type variables"
64
67
@@ -80,14 +83,6 @@ portTypes rules expr =
80 isValid' = isValid False
83 isValid' = isValid False
81 valid = isValid' seenFunc seenSignal direction name
84 valid = isValid' seenFunc seenSignal direction name
82
85
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−
91 handleSignal ts
86 handleSignal ts
92 | seenFunc = err "functions that involve signals"
87 | seenFunc = err "functions that involve signals"
93 | seenSignal = err "signals-of-signals"
88 | seenSignal = err "signals-of-signals"