on master help sign in
Remove special case for Never flags. Use () instead.
commit59bd3fe7f89682b07ebe8718d866a6e35a427c3d authorEvan Czaplicki <evancz@users.noreply.github.com> dateTue 5 Sep 2017, 10:34 (9 years ago) parent8171ead
10 files changed+51−48
src/AST/Expression/Canonical.hs+2−3 src/AST/Expression/Optimized.hs+7−10 src/AST/Module/Name.hs+6−1 src/Elm/Compiler.hs+4−4 src/Elm/Package.hs+6−1 src/Generate/JavaScript/BuiltIn.hs+1−5 src/Generate/JavaScript/Expression.hs+3−7 src/Nitpick/TopLevelTypes.hs+2−10 src/Optimize.hs+4−7 src/Optimize/Port.hs+16
src/AST/Expression/Canonical.hs+2−3
@@ -59,9 +59,8 @@ data Expr'
5959
6060
6161data Main
62− = VDom
63− | NoFlags
64− | Flags Type.Canonical
62+ = Static
63+ | Dynamic Type.Canonical
6564
6665
6766
src/AST/Expression/Optimized.hs+7−10
@@ -75,9 +75,8 @@ data Expr
7575
7676
7777data Main
78− = VDom
79− | NoFlags
80− | Flags Expr
78+ = Static
79+ | Dynamic Expr
8180
8281
8382data Decider a
@@ -188,17 +187,15 @@ instance Binary Expr where
188187instance Binary Main where
189188 put main =
190189 case main of
191− VDom -> putWord8 0
192− NoFlags -> putWord8 1
193− Flags expr -> putWord8 2 >> put expr
190+ Static -> putWord8 0
191+ Dynamic expr -> putWord8 1 >> put expr
194192
195193 get =
196194 do word <- getWord8
197195 case word of
198− 0 -> pure VDom
199− 1 -> pure NoFlags
200− 2 -> liftM Flags get
201− _ -> error "problem getting Can.Main binary"
196+ 0 -> pure Static
197+ 1 -> liftM Dynamic get
198+ _ -> error "problem getting Opt.Main binary"
202199
203200
204201instance (Binary a) => Binary (Decider a) where
src/AST/Module/Name.hs+6−1
@@ -3,7 +3,7 @@
33module AST.Module.Name
44 ( Raw
55 , Canonical(..)
6− , inVirtualDom, inCore, inHtml
6+ , inVirtualDom, inCore, inHtml, inBrowser
77 , toString, toText, canonicalToText
88 , isKernel, getKernel, canonicalIsKernel
99 )
@@ -50,6 +50,11 @@ inHtml raw =
5050 Canonical Package.html raw
5151
5252
53+inBrowser :: Raw -> Canonical
54+inBrowser raw =
55+ Canonical Package.browser raw
56+
57+
5358
5459-- CONVERSIONS
5560
src/Elm/Compiler.hs+4−4
@@ -172,7 +172,7 @@ warningToJson (Localizer localizer) location (Warning wrn) =
172172data Tag = Normal | Effect | Port
173173
174174
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])
176176parseHeader pkgName sourceCode =
177177 case Parse.run Parse.header sourceCode of
178178 Right header ->
@@ -182,7 +182,7 @@ parseHeader pkgName sourceCode =
182182 Left (Error (A.map Error.Syntax err))
183183
184184
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])
186186toHeaderSummary pkgName (Module.Header maybeHeaderDecl imports) =
187187 let
188188 dependencies =
@@ -192,7 +192,7 @@ toHeaderSummary pkgName (Module.Header maybeHeaderDecl imports) =
192192 in
193193 case maybeHeaderDecl of
194194 Nothing ->
195− ( Normal, Nothing, dependencies )
195+ ( Nothing, dependencies )
196196
197197 Just (Module.HeaderDecl sourceTag name _ _ _) ->
198198 let
@@ -202,7 +202,7 @@ toHeaderSummary pkgName (Module.Header maybeHeaderDecl imports) =
202202 Module.Port _ -> Port
203203 Module.Effect _ -> Effect
204204 in
205− ( tag, Just name, dependencies )
205+ ( Just (tag, name), dependencies )
206206
207207
208208
src/Elm/Package.hs+6−1
@@ -3,7 +3,7 @@
33module Elm.Package
44 ( Name(..)
55 , Package(..)
6− , dummyName, core, virtualDom, html, webgl, linearAlgebra
6+ , dummyName, core, browser, virtualDom, html, webgl, linearAlgebra
77 , toString, toText, toUrl, toFilePath
88 , fromText
99 , Version(..)
@@ -67,6 +67,11 @@ core =
6767 Name "elm-lang" "core"
6868
6969
70+browser :: Name
71+browser =
72+ Name "elm-lang" "browser"
73+
74+
7075virtualDom :: Name
7176virtualDom =
7277 Name "elm-lang" "virtual-dom"
src/Generate/JavaScript/BuiltIn.hs+1−5
@@ -123,11 +123,7 @@ incomingPort name converter =
123123
124124staticProgram :: Generator JS.Expr
125125staticProgram =
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")
131127
132128
133129
src/Generate/JavaScript/Expression.hs+3−7
@@ -225,16 +225,12 @@ generateCode expr =
225225generateProgram :: Opt.Main -> Opt.Expr -> Generator Code
226226generateProgram kind body =
227227 case kind of
228− Opt.VDom ->
228+ Opt.Static ->
229229 do html <- generateJsExpr body
230230 func <- BuiltIn.staticProgram
231231 jsExpr (func <| html)
232232
233− Opt.NoFlags ->
234− do almostProgram <- generateJsExpr body
235− jsExpr (JS.Call almostProgram [])
236−
237− Opt.Flags decoder ->
233+ Opt.Dynamic decoder ->
238234 do almostProgram <- generateJsExpr body
239235 flagDecoder <- generateJsExpr decoder
240236 jsExpr (almostProgram <| flagDecoder)
@@ -247,7 +243,7 @@ generateProgram kind body =
247243generateLetDef :: (Text, Opt.Def) -> Generator JS.Stmt
248244generateLetDef (name, def) =
249245 do jsBody <- generateDef name def
250− return $ JS.VarDeclStmt [ Help.varDecl name jsBody ]
246+ return $ JS.VarDeclStmt [ Help.varDecl (Var.safe name) jsBody ]
251247
252248
253249generateDef :: 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) =
8989 case Type.deepDealias mainType of
9090 Type.Type name [_]
9191 | name == vdomNode ->
92− return Can.VDom
92+ return Can.Static
9393
9494 Type.Type name [flags, _, _]
95− | name == program && flags == never ->
96− return Can.NoFlags
97−
9895 | name == program ->
99− return (Can.Flags flags)
96+ return (Can.Dynamic flags)
10097 <* Effects.checkPortType makeError flags
10198
10299 _ ->
@@ -112,11 +109,6 @@ program =
112109 Var.inCore "Platform" "Program"
113110
114111
115−never :: Type.Canonical
116−never =
117− Type.Type (Var.inCore "Basics" "Never") []
118−
119−
120112vdomNode :: Var.Canonical
121113vdomNode =
122114 let
src/Optimize.hs+4−7
@@ -334,14 +334,11 @@ optimizeVariable region (Var.Canonical home name) =
334334optimizeMain :: Can.Main -> Env.Optimizer Opt.Main
335335optimizeMain main =
336336 case main of
337− Can.VDom ->
338− return Opt.VDom
337+ Can.Static ->
338+ return Opt.Static
339339
340− Can.NoFlags ->
341− return Opt.NoFlags
342−
343− Can.Flags tipe ->
344− Opt.Flags <$> Port.toDecoder tipe
340+ Can.Dynamic tipe ->
341+ Opt.Dynamic <$> Port.toFlagsDecoder tipe
345342
346343
347344
src/Optimize/Port.hs+16
@@ -2,6 +2,7 @@
22{-# LANGUAGE OverloadedStrings #-}
33module Optimize.Port
44 ( toEncoder
5+ , toFlagsDecoder
56 , toDecoder
67 )
78 where
@@ -127,6 +128,21 @@ encodeTuple tipes =
127128
128129
129130
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+
130146-- DECODE
131147
132148