From 2ae31ea2888babe4ca0ff2c7fa4acba0f64bca60 Mon Sep 17 00:00:00 2001 From: Jan Mas Rovira Date: Mon, 25 Sep 2023 22:01:35 +0200 Subject: [PATCH] Add potentially isolated nodes in dependency builder --- .../Compiler/Internal/Extra/DependencyBuilder.hs | 12 ++++++++++++ src/Juvix/Compiler/Internal/Pretty/Base.hs | 6 +++++- tests/positive/issue2373/Main.juvix | 2 ++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Juvix/Compiler/Internal/Extra/DependencyBuilder.hs b/src/Juvix/Compiler/Internal/Extra/DependencyBuilder.hs index 1062754301..07355c9a8e 100644 --- a/src/Juvix/Compiler/Internal/Extra/DependencyBuilder.hs +++ b/src/Juvix/Compiler/Internal/Extra/DependencyBuilder.hs @@ -56,6 +56,17 @@ addStartNode n = modify (HashSet.insert n) addEdgeMay :: (Member (State DependencyGraph) r) => Maybe Name -> Name -> Sem r () addEdgeMay mn1 n2 = whenJust mn1 $ \n1 -> addEdge n1 n2 +addNode :: (Member (State DependencyGraph) r) => Name -> Sem r () +addNode n = + modify + ( HashMap.alter + ( \case + Just x -> Just x + Nothing -> Just (mempty :: HashSet Name) + ) + n + ) + addEdge :: (Member (State DependencyGraph) r) => Name -> Name -> Sem r () addEdge n1 n2 = modify @@ -179,6 +190,7 @@ goFunctionDefHelper :: FunctionDef -> Sem r () goFunctionDefHelper f = do + addNode (f ^. funDefName) checkStartNode (f ^. funDefName) when (f ^. funDefInstance) $ goInstance f diff --git a/src/Juvix/Compiler/Internal/Pretty/Base.hs b/src/Juvix/Compiler/Internal/Pretty/Base.hs index 6070f3e495..fbbaf2dbbf 100644 --- a/src/Juvix/Compiler/Internal/Pretty/Base.hs +++ b/src/Juvix/Compiler/Internal/Pretty/Base.hs @@ -244,9 +244,13 @@ instance PrettyCode FunctionDef where funDefName' <+> kwColon <+> funDefType' - <> line + <> hardline <> vsep (toList clauses') +instance PrettyCode PreLetStatement where + ppCode = \case + PreLetFunctionDef f -> ppCode f + instance PrettyCode FunctionClause where ppCode c = do funName <- ppCode (c ^. clauseName) diff --git a/tests/positive/issue2373/Main.juvix b/tests/positive/issue2373/Main.juvix index 3987947c7a..e282cb627c 100644 --- a/tests/positive/issue2373/Main.juvix +++ b/tests/positive/issue2373/Main.juvix @@ -1,8 +1,10 @@ module Main; import Stdlib.Data.Nat open; +import Stdlib.Data.Bool open; main : Nat := let + y : Nat := 0; x : _ := 0; in x;