on master help sign in
Remove special case for Never flags. Use () instead.
59bd3feEvan Czaplicki
src/AST/Expression/Canonical.hs+2−3
@@ -59,9 +59,8 @@ data Expr'
59
59
60
60
61data Main
61data Main
62− = VDom
62+ = Static
63− | NoFlags
64− | Flags Type.Canonical
63+ | Dynamic Type.Canonical
65
64
66
65
67
66
src/AST/Expression/Optimized.hs+7−10
@@ -75,9 +75,8 @@ data Expr
75
75
76
76
77data Main
77data Main
78− = VDom
78+ = Static
79− | NoFlags
80− | Flags Expr
79+ | Dynamic Expr
81
80
82
81
83data Decider a
82data Decider a
@@ -188,17 +187,15 @@ instance Binary Expr where
188instance Binary Main where
187instance Binary Main where
189 put main =
188 put main =
190 case main of
189 case main of
191− VDom -> putWord8 0
190+ Static -> putWord8 0
192− NoFlags -> putWord8 1
191+ Dynamic expr -> putWord8 1 >> put expr
193− Flags expr -> putWord8 2 >> put expr
194
192
195 get =
193 get =
196 do word <- getWord8
194 do word <- getWord8
197 case word of
195 case word of
198− 0 -> pure VDom
196+ 0 -> pure Static
199− 1 -> pure NoFlags
200− 2 -> liftM Flags get
197+ 1 -> liftM Dynamic get
201− _ -> error "problem getting Can.Main binary"
198+ _ -> error "problem getting Opt.Main binary"
202
199
203
200
204instance (Binary a) => Binary (Decider a) where
201instance (Binary a) => Binary (Decider a) where
src/AST/Module/Name.hs+6−1
@@ -3,7 +3,7 @@
3module AST.Module.Name
3module AST.Module.Name
4 ( Raw
4 ( Raw
5 , Canonical(..)
5 , Canonical(..)
6− , inVirtualDom, inCore, inHtml
6+ , inVirtualDom, inCore, inHtml, inBrowser
7 , toString, toText, canonicalToText
7 , toString, toText, canonicalToText
8 , isKernel, getKernel, canonicalIsKernel
8 , isKernel, getKernel, canonicalIsKernel
9 )
9 )
@@ -50,6 +50,11 @@ inHtml raw =
50 Canonical Package.html raw
50 Canonical Package.html raw
51
51
52
52
53+inBrowser :: Raw -> Canonical
54+inBrowser raw =
55+ Canonical Package.browser raw
56+
57+
53
58
54-- CONVERSIONS
59-- CONVERSIONS
55
60
src/Elm/Compiler.hs+4−4
@@ -172,7 +172,7 @@ warningToJson (Localizer localizer) location (Warning wrn) =
172data Tag = Normal | Effect | Port
172data Tag = Normal | Effect | Port
173
173
174
174
175−parseHeader :: Package.Name -> Text -> Either Error (Tag, Maybe M.Raw, [M.Raw])
175+parseHeader :: Package.Name -> Text -> Either Error (Maybe (Tag, M.Raw), [M.Raw])
176parseHeader pkgName sourceCode =
176parseHeader pkgName sourceCode =
177 case Parse.run Parse.header sourceCode of
177 case Parse.run Parse.header sourceCode of
178 Right header ->
178 Right header ->
@@ -182,7 +182,7 @@ parseHeader pkgName sourceCode =
182 Left (Error (A.map Error.Syntax err))
182 Left (Error (A.map Error.Syntax err))
183
183
184
184
185−toHeaderSummary :: Package.Name -> Module.Header [Module.UserImport] -> (Tag, Maybe M.Raw, [M.Raw])
185+toHeaderSummary :: Package.Name -> Module.Header [Module.UserImport] -> (Maybe (Tag, M.Raw), [M.Raw])
186toHeaderSummary pkgName (Module.Header maybeHeaderDecl imports) =
186toHeaderSummary pkgName (Module.Header maybeHeaderDecl imports) =
187 let
187 let
188 dependencies =
188 dependencies =
@@ -192,7 +192,7 @@ toHeaderSummary pkgName (Module.Header maybeHeaderDecl imports) =
192 in
192 in
193 case maybeHeaderDecl of
193 case maybeHeaderDecl of
194 Nothing ->
194 Nothing ->
195− ( Normal, Nothing, dependencies )
195+ ( Nothing, dependencies )
196
196
197 Just (Module.HeaderDecl sourceTag name _ _ _) ->
197 Just (Module.HeaderDecl sourceTag name _ _ _) ->
198 let
198 let
@@ -202,7 +202,7 @@ toHeaderSummary pkgName (Module.Header maybeHeaderDecl imports) =
202 Module.Port _ -> Port
202 Module.Port _ -> Port
203 Module.Effect _ -> Effect
203 Module.Effect _ -> Effect
204 in
204 in
205− ( tag, Just name, dependencies )
205+ ( Just (tag, name), dependencies )
206
206
207
207
208
208
src/Elm/Package.hs+6−1
@@ -3,7 +3,7 @@
3module Elm.Package
3module Elm.Package
4 ( Name(..)
4 ( Name(..)
5 , Package(..)
5 , Package(..)
6− , dummyName, core, virtualDom, html, webgl, linearAlgebra
6+ , dummyName, core, browser, virtualDom, html, webgl, linearAlgebra
7 , toString, toText, toUrl, toFilePath
7 , toString, toText, toUrl, toFilePath
8 , fromText
8 , fromText
9 , Version(..)
9 , Version(..)
@@ -67,6 +67,11 @@ core =
67 Name "elm-lang" "core"
67 Name "elm-lang" "core"
68
68
69
69
70+browser :: Name
71+browser =
72+ Name "elm-lang" "browser"
73+
74+
70virtualDom :: Name
75virtualDom :: Name
71virtualDom =
76virtualDom =
72 Name "elm-lang" "virtual-dom"
77 Name "elm-lang" "virtual-dom"
src/Generate/JavaScript/BuiltIn.hs+1−5
@@ -123,11 +123,7 @@ incomingPort name converter =
123
123
124staticProgram :: Generator JS.Expr
124staticProgram :: Generator JS.Expr
125staticProgram =
125staticProgram =
126− let
127− home =
128− ModuleName.inVirtualDom "Elm.Kernel.VirtualDom"
129− in
130− Var.global (Var.Global home "staticProgram")
126+ Var.global (Var.Global (ModuleName.inBrowser "Browser") "staticPage")
131
127
132
128
133
129
src/Generate/JavaScript/Expression.hs+3−7
@@ -225,16 +225,12 @@ generateCode expr =
225generateProgram :: Opt.Main -> Opt.Expr -> Generator Code
225generateProgram :: Opt.Main -> Opt.Expr -> Generator Code
226generateProgram kind body =
226generateProgram kind body =
227 case kind of
227 case kind of
228− Opt.VDom ->
228+ Opt.Static ->
229 do html <- generateJsExpr body
229 do html <- generateJsExpr body
230 func <- BuiltIn.staticProgram
230 func <- BuiltIn.staticProgram
231 jsExpr (func <| html)
231 jsExpr (func <| html)
232
232
233− Opt.NoFlags ->
234− do almostProgram <- generateJsExpr body
235− jsExpr (JS.Call almostProgram [])
236−
237− Opt.Flags decoder ->
233+ Opt.Dynamic decoder ->
238 do almostProgram <- generateJsExpr body
234 do almostProgram <- generateJsExpr body
239 flagDecoder <- generateJsExpr decoder
235 flagDecoder <- generateJsExpr decoder
240 jsExpr (almostProgram <| flagDecoder)
236 jsExpr (almostProgram <| flagDecoder)
@@ -247,7 +243,7 @@ generateProgram kind body =
247generateLetDef :: (Text, Opt.Def) -> Generator JS.Stmt
243generateLetDef :: (Text, Opt.Def) -> Generator JS.Stmt
248generateLetDef (name, def) =
244generateLetDef (name, def) =
249 do jsBody <- generateDef name def
245 do jsBody <- generateDef name def
250− return $ JS.VarDeclStmt [ Help.varDecl name jsBody ]
246+ return $ JS.VarDeclStmt [ Help.varDecl (Var.safe name) jsBody ]
251
247
252
248
253generateDef :: Text -> Opt.Def -> Generator JS.Expr
249generateDef :: Text -> Opt.Def -> Generator JS.Expr
src/Nitpick/TopLevelTypes.hs+2−10
@@ -89,14 +89,11 @@ checkMain typeEnv (Can.Def facts pattern@(A.A region _) body maybeType) =
89 case Type.deepDealias mainType of
89 case Type.deepDealias mainType of
90 Type.Type name [_]
90 Type.Type name [_]
91 | name == vdomNode ->
91 | name == vdomNode ->
92− return Can.VDom
92+ return Can.Static
93
93
94 Type.Type name [flags, _, _]
94 Type.Type name [flags, _, _]
95− | name == program && flags == never ->
96− return Can.NoFlags
97−
98 | name == program ->
95 | name == program ->
99− return (Can.Flags flags)
96+ return (Can.Dynamic flags)
100 <* Effects.checkPortType makeError flags
97 <* Effects.checkPortType makeError flags
101
98
102 _ ->
99 _ ->
@@ -112,11 +109,6 @@ program =
112 Var.inCore "Platform" "Program"
109 Var.inCore "Platform" "Program"
113
110
114
111
115−never :: Type.Canonical
116−never =
117− Type.Type (Var.inCore "Basics" "Never") []
118−
119−
120vdomNode :: Var.Canonical
112vdomNode :: Var.Canonical
121vdomNode =
113vdomNode =
122 let
114 let
src/Optimize.hs+4−7
@@ -334,14 +334,11 @@ optimizeVariable region (Var.Canonical home name) =
334optimizeMain :: Can.Main -> Env.Optimizer Opt.Main
334optimizeMain :: Can.Main -> Env.Optimizer Opt.Main
335optimizeMain main =
335optimizeMain main =
336 case main of
336 case main of
337− Can.VDom ->
337+ Can.Static ->
338− return Opt.VDom
338+ return Opt.Static
339
339
340− Can.NoFlags ->
340+ Can.Dynamic tipe ->
341− return Opt.NoFlags
341+ Opt.Dynamic <$> Port.toFlagsDecoder tipe
342−
343− Can.Flags tipe ->
344− Opt.Flags <$> Port.toDecoder tipe
345
342
346
343
347
344
src/Optimize/Port.hs+16
@@ -2,6 +2,7 @@
2{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Optimize.Port
3module Optimize.Port
4 ( toEncoder
4 ( toEncoder
5+ , toFlagsDecoder
5 , toDecoder
6 , toDecoder
6 )
7 )
7 where
8 where
@@ -127,6 +128,21 @@ encodeTuple tipes =
127
128
128
129
129
130
131+-- FLAGS DECODER
132+
133+
134+toFlagsDecoder :: T.Canonical -> Env.Optimizer Opt.Expr
135+toFlagsDecoder tipe =
136+ case tipe of
137+ T.Type name [] | Var.isTuple name ->
138+ do succeed <- decode "succeed"
139+ return $ Opt.Call succeed [ Opt.Ctor Help.zeroTuple [] ]
140+
141+ _ ->
142+ toDecoder tipe
143+
144+
145+
130-- DECODE
146-- DECODE
131
147
132
148