on master help sign in
Stop putting cycles in a try/catch

Based on how code gets generated, the try/catch will block functions from getting “hoisted” and cause issues in some cases

commitd2dacad64bddd586b4d29cc4f1a28ed92986b13e authorEvan Czaplicki <evancz@users.noreply.github.com> dateTue 8 May 2018, 23:05 (8 years ago) parent2861e0e
1 file changed+1−24
compiler/src/Generate/JavaScript.hs+1−24
compiler/src/Generate/JavaScript.hs+1−24
@@ -241,19 +241,8 @@ generateCycle mode (Opt.Global home _) cycle =
241241 let
242242 safeDefs = map (generateSafeCycle mode home) cycle
243243 realDefs = map (generateRealCycle home) cycle
244− block = JS.Block (safeDefs ++ realDefs)
245244 in
246− case mode of
247− Mode.Prod _ _ ->
248− block
249−
250− Mode.Dev _ _ ->
251− JS.Try block Name.dollar $ JS.Throw $ JS.String $
252− "The following top-level definitions are causing infinite recursion:\\n"
253− <> drawCycle (map fst cycle)
254− <> "\\n\\nThese errors are very tricky, so read "
255− <> B.stringUtf8 (D.makeLink "halting-problem")
256− <> " to learn how to fix it!"
245+ JS.Block (safeDefs ++ realDefs)
257246
258247
259248generateSafeCycle :: Mode.Mode -> ModuleName.Canonical -> (N.Name, Opt.Expr) -> JS.Stmt
@@ -275,18 +264,6 @@ generateRealCycle home (name, _) =
275264 ]
276265
277266
278−drawCycle :: [N.Name] -> B.Builder
279−drawCycle names =
280− let
281− topLine = "\\n ┌─────┐"
282− nameLine name = "\\n │ " <> N.toBuilder name
283− midLine = "\\n │ ↓"
284− bottomLine = "\\n └─────┘"
285− in
286− mconcat (topLine : List.intersperse midLine (map nameLine names) ++ [ bottomLine ])
287−
288−
289−
290267
291268-- GENERATE KERNEL
292269