@@ -22,8 +22,10 @@ This sorts variables into the young and old pools accordingly.
23generalize :: TS.Pool -> TS.Solver ()
23generalize :: TS.Pool -> TS.Solver ()
24generalize (TS.Pool youngRank youngInhabitants) =
24generalize (TS.Pool youngRank youngInhabitants) =
25+ {-# SCC elm_compiler_type_generalize #-}
25 do youngMark <- TS.uniqueMark
26 do youngMark <- TS.uniqueMark
26 let insert dict var =
27 let insert dict var =
28+ {-# SCC elm_compiler_type_insert #-}
27 do descriptor <- UF.descriptor var
29 do descriptor <- UF.descriptor var
28 UF.modifyDescriptor var (\desc -> desc { _mark = youngMark })
30 UF.modifyDescriptor var (\desc -> desc { _mark = youngMark })
29 return $ Map.insertWith (++) (_rank descriptor) [var] dict
31 return $ Map.insertWith (++) (_rank descriptor) [var] dict
@@ -50,20 +52,21 @@ generalize (TS.Pool youngRank youngInhabitants) =
50 -- For variables with rank youngRank
52 -- For variables with rank youngRank
51 -- If rank < youngRank: register in oldPool
53 -- If rank < youngRank: register in oldPool
52 -- otherwise generalize
54 -- otherwise generalize
53− let registerIfLowerRank var = do
55+ let registerIfLowerRank var =
56+ {-# SCC elm_compiler_type_register #-}
54− isRedundant <- liftIO $ UF.redundant var
57+ do isRedundant <- liftIO $ UF.redundant var
55− case isRedundant of
58+ case isRedundant of
56− True -> return ()
59+ True -> return ()
57− False -> do
60+ False -> do
58− desc <- liftIO $ UF.descriptor var
61+ desc <- liftIO $ UF.descriptor var
59− case _rank desc < youngRank of
62+ case _rank desc < youngRank of
61− TS.register var >> return ()
64+ TS.register var >> return ()
63− liftIO $ UF.setDescriptor var $ desc
66+ liftIO $ UF.setDescriptor var $ desc
64− { _rank = noRank
67+ { _rank = noRank
65− , _content = rigidify (_content desc)
68+ , _content = rigidify (_content desc)
68 mapM_ registerIfLowerRank (Map.findWithDefault [] youngRank rankDict)
71 mapM_ registerIfLowerRank (Map.findWithDefault [] youngRank rankDict)
@@ -82,6 +85,7 @@ rigidify content =
82-- move deeper into a variable.
85-- move deeper into a variable.
83adjustRank :: Int -> Int -> Int -> Variable -> IO Int
86adjustRank :: Int -> Int -> Int -> Variable -> IO Int
84adjustRank youngMark visitedMark groupRank var =
87adjustRank youngMark visitedMark groupRank var =
88+ {-# SCC elm_compiler_type_adjust #-}
85 do descriptor <- UF.descriptor var
89 do descriptor <- UF.descriptor var
86 adjustRankHelp youngMark visitedMark groupRank var descriptor
90 adjustRankHelp youngMark visitedMark groupRank var descriptor
@@ -92,12 +96,8 @@ adjustRankHelp youngMark visitedMark groupRank var descriptor@(Descriptor conten
93 do -- Set the variable as marked first because it may be cyclic.
97 do -- Set the variable as marked first because it may be cyclic.
94 UF.modifyDescriptor var $ \desc -> desc { _mark = visitedMark }
98 UF.modifyDescriptor var $ \desc -> desc { _mark = visitedMark }
97− adjustRankContent youngMark visitedMark groupRank content
99+ maxRank <- adjustRankContent youngMark visitedMark groupRank content
99 UF.modifyDescriptor var $ \desc -> desc { _rank = maxRank }
100 UF.modifyDescriptor var $ \desc -> desc { _rank = maxRank }
101 return maxRank
101 return maxRank
103 else if mark /= visitedMark then
103 else if mark /= visitedMark then
@@ -151,6 +151,7 @@ adjustRankContent youngMark visitedMark groupRank content =
152solve :: TypeConstraint -> ExceptT [A.Located Error.Error] IO TS.State
152solve :: TypeConstraint -> ExceptT [A.Located Error.Error] IO TS.State
153solve constraint =
153solve constraint =
154+ {-# SCC elm_compiler_type_solve #-}
154 do state <- liftIO (TS.run (actuallySolve constraint))
155 do state <- liftIO (TS.run (actuallySolve constraint))
155 case TS.sError state of
156 case TS.sError state of
@@ -265,6 +266,7 @@ crash msg =
266occurs :: (Text.Text, A.Located Variable) -> TS.Solver ()
267occurs :: (Text.Text, A.Located Variable) -> TS.Solver ()
267occurs (name, A.A region variable) =
268occurs (name, A.A region variable) =
269+ {-# SCC elm_compiler_type_occurs #-}
268 do hasOccurred <- liftIO $ occursHelp [] variable
270 do hasOccurred <- liftIO $ occursHelp [] variable
269 case hasOccurred of
271 case hasOccurred of