on master help sign in
Only generate try for cycles that have value definitions
commit0e9e2361dde185fca3b68beb51278d164c9960f3 authorEvan Czaplicki <evancz@users.noreply.github.com> dateThu 24 May 2018, 19:51 (8 years ago) parent2d76180
1 file changed+20−20
compiler/src/Generate/JavaScript.hs+20−20
compiler/src/Generate/JavaScript.hs+20−20
@@ -255,26 +255,26 @@ isDebugger (Opt.Global (ModuleName.Canonical _ home) _) =
255255
256256generateCycle :: Mode.Mode -> Opt.Global -> [N.Name] -> [(N.Name, Opt.Expr)] -> [Opt.Def] -> JS.Stmt
257257generateCycle mode (Opt.Global home _) names values functions =
258− let
259− funcBlock = JS.Block $ map (generateCycleFunc mode home) functions
260− safeBlock = JS.Block $ map (generateSafeCycle mode home) values
261− realBlock = JS.Block $ map (generateRealCycle home) values
262− in
263− case mode of
264− Mode.Prod _ _ ->
265− JS.Block [ funcBlock, safeBlock, realBlock ]
266−
267− Mode.Dev _ _ ->
268− let
269− tryRealBlock =
270− JS.Try realBlock Name.dollar $ JS.Throw $ JS.String $
271− "Some top-level definitions from `" <> N.toBuilder (ModuleName._module home) <> "` are causing infinite recursion:\\n"
272− <> drawCycle names
273− <> "\\n\\nThese errors are very tricky, so read "
274− <> B.stringUtf8 (D.makeNakedLink "halting-problem")
275− <> " to learn how to fix it!"
276− in
277− JS.Block [ funcBlock, safeBlock, tryRealBlock ]
258+ JS.Block
259+ [ JS.Block $ map (generateCycleFunc mode home) functions
260+ , JS.Block $ map (generateSafeCycle mode home) values
261+ , case map (generateRealCycle home) values of
262+ [] ->
263+ JS.EmptyStmt
264+
265+ realBlock@(_:_) ->
266+ case mode of
267+ Mode.Prod _ _ ->
268+ JS.Block realBlock
269+
270+ Mode.Dev _ _ ->
271+ JS.Try (JS.Block realBlock) Name.dollar $ JS.Throw $ JS.String $
272+ "Some top-level definitions from `" <> N.toBuilder (ModuleName._module home) <> "` are causing infinite recursion:\\n"
273+ <> drawCycle names
274+ <> "\\n\\nThese errors are very tricky, so read "
275+ <> B.stringUtf8 (D.makeNakedLink "halting-problem")
276+ <> " to learn how to fix it!"
277+ ]
278278
279279
280280generateCycleFunc :: Mode.Mode -> ModuleName.Canonical -> Opt.Def -> JS.Stmt