on master help sign in
Stop putting cycles in a try/catch
d2dacadEvan Czaplicki
compiler/src/Generate/JavaScript.hs+1−24
@@ -241,19 +241,8 @@ generateCycle mode (Opt.Global home _) cycle =
241 let
241 let
242 safeDefs = map (generateSafeCycle mode home) cycle
242 safeDefs = map (generateSafeCycle mode home) cycle
243 realDefs = map (generateRealCycle home) cycle
243 realDefs = map (generateRealCycle home) cycle
244− block = JS.Block (safeDefs ++ realDefs)
245 in
244 in
246− case mode of
245+ JS.Block (safeDefs ++ realDefs)
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!"
257
246
258
247
259generateSafeCycle :: Mode.Mode -> ModuleName.Canonical -> (N.Name, Opt.Expr) -> JS.Stmt
248generateSafeCycle :: Mode.Mode -> ModuleName.Canonical -> (N.Name, Opt.Expr) -> JS.Stmt
@@ -275,18 +264,6 @@ generateRealCycle home (name, _) =
275 ]
264 ]
276
265
277
266
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−
290
267
291-- GENERATE KERNEL
268-- GENERATE KERNEL
292
269