on master help sign in
Make sure all kernel code is at the very top
commit665d3d9cf24ca3e7aa64761a6c02237a6415da8f authorEvan Czaplicki <evancz@users.noreply.github.com> dateWed 25 Apr 2018, 17:18 (9 years ago) parentae76422
1 file changed+21−10
compiler/src/Generate/JavaScript.hs+21−10
compiler/src/Generate/JavaScript.hs+21−10
@@ -104,19 +104,25 @@ print ansi localizer home name (Can.Forall _ tipe) =
104104
105105data State =
106106 State
107− { _revBuilders :: [B.Builder]
107+ { _kernel :: B.Builder
108+ , _revBuilders :: [B.Builder]
108109 , _seenGlobals :: Set.Set Opt.Global
109110 }
110111
111112
112113emptyState :: State
113114emptyState =
114− State [] Set.empty
115+ State mempty [] Set.empty
115116
116117
117118stateToBuilder :: State -> B.Builder
118−stateToBuilder (State revBuilders _) =
119− List.foldl1' (\builder b -> b <> builder) revBuilders
119+stateToBuilder (State kernel revBuilders _) =
120+ case revBuilders of
121+ [] ->
122+ kernel
123+
124+ b:bs ->
125+ kernel <> List.foldl' (\code decl -> decl <> code) b bs
120126
121127
122128
@@ -127,12 +133,12 @@ type Graph = Map.Map Opt.Global Opt.Node
127133
128134
129135addGlobal :: Mode.Mode -> Graph -> State -> Opt.Global -> State
130−addGlobal mode graph state@(State builders seen) global =
136+addGlobal mode graph state@(State kernel builders seen) global =
131137 if Set.member global seen then
132138 state
133139 else
134140 addGlobalHelp mode graph global $
135− State builders (Set.insert global seen)
141+ State kernel builders (Set.insert global seen)
136142
137143
138144addGlobalHelp :: Mode.Mode -> Graph -> Opt.Global -> State -> State
@@ -175,10 +181,10 @@ addGlobalHelp mode graph global state =
175181 else
176182 case maybeServer of
177183 Just (Opt.KContent serverChunks serverDeps) | Mode.isServer mode ->
178− addBuilder (addDeps serverDeps state) (generateKernel mode serverChunks)
184+ addKernel (addDeps serverDeps state) (generateKernel mode serverChunks)
179185
180186 _ ->
181− addBuilder (addDeps clientDeps state) (generateKernel mode clientChunks)
187+ addKernel (addDeps clientDeps state) (generateKernel mode clientChunks)
182188
183189 Opt.Enum index ->
184190 addStmt state (
@@ -207,8 +213,13 @@ addStmt state stmt =
207213
208214
209215addBuilder :: State -> B.Builder -> State
210−addBuilder (State revBuilders seen) builder =
211− State (builder:revBuilders) seen
216+addBuilder (State kernel revBuilders seen) builder =
217+ State kernel (builder:revBuilders) seen
218+
219+
220+addKernel :: State -> B.Builder -> State
221+addKernel (State kernel revBuilders seen) moreKernel =
222+ State (moreKernel <> kernel) revBuilders seen
212223
213224
214225var :: Opt.Global -> Expr.Code -> JS.Stmt